如何搭建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 ; 请求最大执行时间
##


