> 文章列表 > 如何搭建nginx+php环境

如何搭建nginx+php环境

如何搭建nginx+php环境

#!/bin/bash

# 检查是否为root用户
if [ $(id -u) -ne 0 ]; then
  echo "该脚本必须以root用户身份运行。"
  exit 1
fi

# 检查操作系统类型
source /etc/os-release
if [[ "$ID" == "debian" || "$ID" == "ubuntu" ]]; then
  # 更新软件包列表
  apt-get update
  
  # 安装 PHP 和 Nginx
  apt-get install -y php-fpm php-mysql nginx

apt-get install php7.4 php7.4-fpm
  
  # 启动 PHP-FPM 和 Nginx 服务
  systemctl start php7.4-fpm
  systemctl enable php7.4-fpm
  systemctl start nginx
  systemctl enable nginx

# 安装 PHP-FPM

apt-get update

apt-get install -y php7.4-fpm

apt-get install -y php7.4-mysql php7.4-gd php7.4-curl php7.4-json php7.4-mbstring php7.4-zip php7.4-xml#安装常用的 PHP 库

#配置 PHP-FPM,更改参数 cgi.fix_pathinfo

sed -i 's/;cgi.fix_pathinfo=./cgi.fix_pathinfo=0/' /etc/php/7.4/fpm/php.ini

sed -i 's/post_max_size = ./post_max_size = 50M/' /etc/php/7.4/fpm/php.ini

#配置监听方式
sed -i 's/^(listen = ).*/\\1/run/php/php7.4-fpm.sock/' /etc/php/7.4/fpm/pool.d/www.conf

systemctl restart php7.4-fpm echo "PHP-FPM已成功安装和配置!"

  # 配置 Nginx
  cat > /etc/nginx/sites-available/default << EOF
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.php index.html index.htm;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }

location ~ \\.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;

   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

   fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}
EOF

sudo systemctl restart php7.4-fpm
sudo systemctl restart nginx

else
  echo "该脚本只支持Debian和Ubuntu系统。"
  exit 1
fi

echo "PHP和Nginx已成功安装和配置!"
修改 php-fpm 配置文件 /etc/php/7.4/fpm/pool.d/www.conf,确保如下内容

listen = /run/php/php7.4-fpm.sock

这些是常见的php库,可以一次性安装上

  • php7.4-mysql:MySQL 扩展
  • php7.4-gd:GD 图像处理库
  • php7.4-curl:cURL 库
  • php7.4-json:JSON 支持
  • php7.4-mbstring:多字节字符串支持
  • php7.4-zip:Zip 压缩支持
  • php7.4-xml:XML 支持

apt-get install php7.4-mysql php7.4-gd php7.4-curl php7.4-json php7.4-mbstring php7.4-zip php7.4-xml

安装 php7.4-mysqlphp7.4-gdphp7.4-curlphp7.4-jsonphp7.4-mbstringphp7.4-zipphp7.4-xml 这些库。执行此命令后,请确保重新启动您的 Nginx 服务

  1. 创建一个名为 info.php 的文件,并将以下内容添加到该文件中:

<?php

php

info();

?>

  1. info.php 文件保存到 Nginx 服务器的默认文档根目录 /var/www/html/ 中。

  2. 确保 Nginx 服务正在运行:

systemctl start nginx

systemctl enable nginx

  1. 在浏览器中访问 URL:http://<your_server_ip>/info.php。如果一切正常,则应该会显示 PHP 7.4 版本信息和相关配置信息。

这个文件包含有关您的服务器和 PHP 配置的敏感信息,可能会被黑客利用。因此,最好在完成测试后将其从服务器上删除或限制对其的访问权限。

/etc/php/7.4/fpm/ :PHP 7.4 FPM 配置文件目录里面包含的文件

  1. php.ini:PHP 主配置文件,包含 PHP 运行时参数的设置,例如内存限制、上传文件大小限制等。

  2. www.conf:PHP-FPM 的主要配置文件,用于控制 PHP-FPM 进程池的行为,例如监听方式、用户与组、进程数等。

  3. pool.d/*.conf:除了主配置文件外,可以创建多个 .conf 文件来设置不同的进程池。

  4. apache2.conf or nginx.conf:Web 服务器与 PHP 的连接配置文件,用于将 Web 服务器与 PHP 引擎结合起来工作,例如通常会在这里指定 PHP 解释器的位置和连接方式。

其中php.ini的配置建议

  1. memory_limit:PHP 脚本能够使用的最大内存限制,建议设为 128M 或更高。

  2. max_execution_time:PHP 脚本的最长执行时间,建议设为 60 秒或更高。

  3. post_max_size:POST 请求允许的最大数据量,建议设为 8M 或更高。

  4. upload_max_filesize:上传文件大小限制,建议设为 8M 或更高。

  5. session.gc_maxlifetime:Session 的最大存活时间,建议设为 86400 秒(即一天)或更高。

  6. date.timezone:设置所在时区,例如 "Asia/Shanghai"。

  7. display_errors:是否开启 PHP 错误提示,建议关闭(设为 Off)。

  8. error_reporting:错误报告级别,建议设为 E_ALL & ~E_NOTICE & ~E_DEPRECATED。

  9. expose_php:是否显示 PHP 版本信息,建议关闭(设为 Off)。

  10. opcache.enable:是否开启 PHP opcode 缓存,建议开启(设为 On)。

在 /etc/php/7.4/fpm/pool.d/www.conf 文件中

  1. [www]:这是 PHP-FPM 进程池的名称,可以修改或保持默认。

  2. user 和 group:PHP-FPM 进程运行的用户和组。建议使用非root用户来运行。

  3. listen:指定 PHP-FPM 监听方式(TCP 或者 Unix 套接字)。如果使用 Unix 套接字,则应该指定套接字文件的路径。

  4. listen.owner 和 listen.group:如果使用 Unix 套接字,则可以指定套接字文件的所有者和组。

  5. pm:进程管理器类型,通常选择 dynamic 或 ondemand。

  6. pm.max_children:最大子进程数,控制着 PHP-FPM 可以创建的 PHP 进程的数量。

  7. pm.start_servers:初始工作进程数,指定 PHP-FPM 启动时会启动的进程数。

  8. pm.min_spare_servers 和 pm.max_spare_servers:空闲工作进程数,当没有请求处理时,PHP-FPM 会维持空闲的工作进程数在一个合理的范围内。

  9. chdir:设置 PHP 工作目录,默认为 /var/www。

  10. php_admin_value[open_basedir]:限制 PHP 执行脚本的访问路径,防止脚本越权访问文件。

  11. php_admin_value[upload_tmp_dir]:上传临时文件的存储路径。

  12. php_admin_value[session.save_path]:Session 文件的存储路径。

  13. request_terminate_timeout:请求最大执行时间,建议设为 60 秒或更高。

这是一个配置示例,可以根据自己的需要配置,这只是个参考

##

[user]
group = user

[global]
; 全局设置
pid = /run/php/php7.4-fpm.pid  ; PHP-FPM 进程 ID 文件路径
error_log = /var/log/php7.4-fpm.log  ; 错误日志文件路径
emergency_restart_threshold = 10  ; 当某个进程崩溃次数超过该值时,PHP-FPM 会自动重启进程池
emergency_restart_interval = 1m  ; 当连续重启进程池次数达到该值时,PHP-FPM 会暂停一段时间
process_control_timeout = 10s  ; 控制进程池中某个进程状态的等待时间

[www]
; 进程池名字
listen = /run/php/php7.4-fpm.sock  ; 监听方式为 Unix 套接字,套接字文件路径
listen.owner = user  ; Unix 套接字文件所有者
listen.group = user  ; Unix 套接字文件所属组
listen.mode = 0666  ; Unix 套接字文件权限
user = user  ; 进程运行用户
group = user  ; 进程运行组
pm = dynamic  ; 进程管理器类型:dynamic 或 ondemand(动态或按需)
pm.max_children = 50  ; 最大子进程数
pm.start_servers = 5  ; 初始工作进程数
pm.min_spare_servers = 3  ; 空闲工作进程数下限
pm.max_spare_servers = 10  ; 空闲工作进程数上限
chdir = /  ; PHP 脚本执行时的工作目录
php_admin_value[open_basedir] = /path/to/your/web/root:/tmp/  ; 限制脚本访问路径,防止越权访问文件
php_admin_value[upload_tmp_dir] = /tmp/  ; 上传临时文件的存储路径
php_admin_value[session.save_path] = /var/lib/php/session/  ; Session 存储路径
request_terminate_timeout = 60s  ; 请求最大执行时间

##