Nginx 本身不内置 FastCGI 执行能力,需通过 ngx_http_fastcgi_module 模块与外部 FastCGI 进程(如 PHP-FPM)通信;核心是确保模块启用、正确配置 fastcgi_pass 与 SCRIPT_FILENAME 等参数,并调优缓冲区、超时及可选缓存。
Nginx 本身不内置 FastCGI 执行能力,它通过 `ngx_http_fastcgi_module` 模块与外部 FastCGI 进程(如 PHP-FPM、uWSGI 或自研 FastCGI 服务)通信。所以“安装时配置支持 FastCGI”不是指编译进 Nginx 的某种运行时开关,而是**确保模块已启用 + 正确连接后端 + 合理调优参数**。核心动作分三步:编译阶段确认模块存在、部署阶段配置通信链路、运行阶段优化响应效率。绝大多数最新预编译包(包括 Ubuntu/Debian 的 apt、CentOS 的 yum、宝塔面板、Docker 最新镜像)都默认启用了 ngx_http_fastcgi_module。验证方式很简单:
nginx -V 2>&1 | grep -o with-http_fastcgi_module,输出有结果即表示已启用nginx -V 查看完整 configure 参数,确认含 --with-http_fastcgi_module
--with-http_fastcgi_module(它是默认开启的,通常无需手动加)这是真正让动态脚本跑起来的关键。以 PHP-FPM 为例,重点在 location ~ .php$ 块中设置:
unix:/run/php/php8.1-fpm.sock)而非 127.0.0.1:9000,减少网络栈开销$document_root 或漏掉 $fastcgi_script_name
REMOTE_ADDR、QUERY_STRING 等关键变量;不要用 fastcgi.conf 替代,除非你清楚差异fastcgi_index index.php,避免目录访问时 403 或 404即使不启用缓存,合理设置缓冲区和超时也能显著提升吞吐与稳定性:
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_connect_timeout 3s;(连接 PHP-FPM 的上限)
fastcgi_read_timeout 60s;(等待 PHP 返回的最长时间)
fastcgi_send_timeout 60s;(向 PHP 发送请求的时限)
fastcgi_keep_conn on;(要求 PHP-FPM 也开启 pm.max_requests 配合)
对非个性化、低频更新的页面(如文章页、产品页),缓存能将 PHP 调用降为零。只需两处配置:
http{} 块中定义缓存区:fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=phpcache:128m inactive=1h max_size=2g;
location ~ .php$ 中启用:fastcgi_cache phpcache;
fastcgi_cache_valid 200 302 10m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
注意:缓存不适用于登录态页面,可通过 fastcgi_no_cache $cookie_session; 排除。