Nginx 与 PHP-FPM 配置
将 Nginx 设置为 PHP-FPM 的反向代理,以提供 PHP 应用。
Nginx 与 PHP-FPM 配置 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 4 节课。
为什么使用 Nginx + PHP-FPM
Nginx 是一款高性能 Web 服务器和反向代理。PHP-FPM(FastCGI Process Manager)管理 PHP 工作进程池。Nginx 通过 FastCGI 将 PHP 请求传递给 FPM。
基本 Nginx 服务器块
用于 PHP 应用程序的最小 Nginx 配置。
# /etc/nginx/sites-available/myapp
server {
listen 80;
server_name example.com;
root /srv/myapp/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}try_files 指令
try_files $uri $uri/ /index.php?$query_string 会首先尝试提供静态文件。如果找不到文件,则回退到 index.php,从而启用前端控制器路由(Laravel、Symfony)。
PHP-FPM 进程池配置
请在 /etc/php/8.3/fpm/pool.d/www.conf 中配置工作进程池。
[www]
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
pm.max_requests = 500 ; recycle workers to prevent leaksUnix 套接字与 TCP
对于同一台机器上的通信,使用 Unix 套接字(fastcgi_pass unix:/run/php/php8.3-fpm.sock)比使用 TCP(127.0.0.1:9000)更快。
使用 Let's Encrypt 配置 HTTPS
请使用 Certbot 获取免费的 TLS 证书。
$ certbot --nginx -d example.com
# Certbot modifies your Nginx config and sets up auto-renewalGzip 压缩
请启用 gzip 以减小响应大小。
# nginx.conf or server block:
gzip on;
gzip_types text/plain text/css application/javascript application/json;
gzip_min_length 1024;为静态资源启用浏览器缓存
请为静态文件添加缓存控制标头。
location ~* \.(js|css|png|jpg|gif|ico|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}Nginx 请求速率限制
请使用 limit_req 模块按 IP 限制请求数量,这是 PHP 开始处理之前的第一道防线。
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
}
server {
location /api/ {
limit_req zone=one burst=20 nodelay;
}
}安全标头
请为所有响应添加安全标头。
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header Referrer-Policy "strict-origin-when-cross-origin";重新加载与重启
修改 Nginx 配置后,请执行平滑重新加载(不会停机):nginx -t && nginx -s reload。修改 PHP-FPM 配置后,请执行:systemctl reload php8.3-fpm。
总结
请配置 Nginx,通过 FastCGI 使用指向 public/index.php 的服务器块。调整 PHP-FPM 进程池设置。使用 Unix 套接字。启用 HTTPS、gzip 和静态文件缓存。
快速检查
try_files $uri $uri/ /index.php?$query_string 的作用是什么?
常见问题解答
「Nginx 与 PHP-FPM 配置」课时是免费的吗?
是的 — 「Nginx 与 PHP-FPM 配置」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 4 节课。
「Nginx 与 PHP-FPM 配置」这节课中我会学到什么?
将 Nginx 设置为 PHP-FPM 的反向代理,以提供 PHP 应用。 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 PHP Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「Nginx 与 PHP-FPM 配置」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 PHP Academy 课中编写并运行代码吗?
能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Nginx 与 PHP-FPM 配置
- 环境变量与 .env 文件
- 使用 GitHub Actions 部署
- 将 PHP 应用容器化