0Pricing
PHP Academy · 课时

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 leaks

Unix 套接字与 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-renewal

Gzip 压缩

请启用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. Nginx 与 PHP-FPM 配置
  2. 环境变量与 .env 文件
  3. 使用 GitHub Actions 部署
  4. 将 PHP 应用容器化
← 返回 PHP Academy