如何搭建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-mysql、php7.4-gd、php7.4-curl、php7.4-json、php7.4-mbstring、php7.4-zip 和 php7.4-xml 这些库。执行此命令后,请确保重新启动您的 Nginx 服务
- 创建一个名为 
info.php的文件,并将以下内容添加到该文件中: 
<?php 
php
info();
?> 
- 
将
info.php文件保存到 Nginx 服务器的默认文档根目录/var/www/html/中。 - 
确保 Nginx 服务正在运行:
 
systemctl start nginx 
systemctl enable nginx 
- 在浏览器中访问 URL:
http://<your_server_ip>/info.php。如果一切正常,则应该会显示 PHP 7.4 版本信息和相关配置信息。 
这个文件包含有关您的服务器和 PHP 配置的敏感信息,可能会被黑客利用。因此,最好在完成测试后将其从服务器上删除或限制对其的访问权限。
/etc/php/7.4/fpm/ :PHP 7.4 FPM 配置文件目录里面包含的文件
- 
php.ini:PHP 主配置文件,包含 PHP 运行时参数的设置,例如内存限制、上传文件大小限制等。
 - 
www.conf:PHP-FPM 的主要配置文件,用于控制 PHP-FPM 进程池的行为,例如监听方式、用户与组、进程数等。
 - 
pool.d/*.conf:除了主配置文件外,可以创建多个 .conf 文件来设置不同的进程池。
 - 
apache2.conf or nginx.conf:Web 服务器与 PHP 的连接配置文件,用于将 Web 服务器与 PHP 引擎结合起来工作,例如通常会在这里指定 PHP 解释器的位置和连接方式。
 
其中php.ini的配置建议
- 
memory_limit:PHP 脚本能够使用的最大内存限制,建议设为 128M 或更高。
 - 
max_execution_time:PHP 脚本的最长执行时间,建议设为 60 秒或更高。
 - 
post_max_size:POST 请求允许的最大数据量,建议设为 8M 或更高。
 - 
upload_max_filesize:上传文件大小限制,建议设为 8M 或更高。
 - 
session.gc_maxlifetime:Session 的最大存活时间,建议设为 86400 秒(即一天)或更高。
 - 
date.timezone:设置所在时区,例如 "Asia/Shanghai"。
 - 
display_errors:是否开启 PHP 错误提示,建议关闭(设为 Off)。
 - 
error_reporting:错误报告级别,建议设为 E_ALL & ~E_NOTICE & ~E_DEPRECATED。
 - 
expose_php:是否显示 PHP 版本信息,建议关闭(设为 Off)。
 - 
opcache.enable:是否开启 PHP opcode 缓存,建议开启(设为 On)。
 
在 /etc/php/7.4/fpm/pool.d/www.conf 文件中
- 
[www]:这是 PHP-FPM 进程池的名称,可以修改或保持默认。
 - 
user 和 group:PHP-FPM 进程运行的用户和组。建议使用非root用户来运行。
 - 
listen:指定 PHP-FPM 监听方式(TCP 或者 Unix 套接字)。如果使用 Unix 套接字,则应该指定套接字文件的路径。
 - 
listen.owner 和 listen.group:如果使用 Unix 套接字,则可以指定套接字文件的所有者和组。
 - 
pm:进程管理器类型,通常选择 dynamic 或 ondemand。
 - 
pm.max_children:最大子进程数,控制着 PHP-FPM 可以创建的 PHP 进程的数量。
 - 
pm.start_servers:初始工作进程数,指定 PHP-FPM 启动时会启动的进程数。
 - 
pm.min_spare_servers 和 pm.max_spare_servers:空闲工作进程数,当没有请求处理时,PHP-FPM 会维持空闲的工作进程数在一个合理的范围内。
 - 
chdir:设置 PHP 工作目录,默认为 /var/www。
 - 
php_admin_value[open_basedir]:限制 PHP 执行脚本的访问路径,防止脚本越权访问文件。
 - 
php_admin_value[upload_tmp_dir]:上传临时文件的存储路径。
 - 
php_admin_value[session.save_path]:Session 文件的存储路径。
 - 
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  ; 请求最大执行时间
##


