FastCGI是Nginx与PHP等动态语言处理器之间的重要接口,合理配置可以显著提升网站性能。以下是Nginx FastCGI的详细优化配置建议:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; # 或 unix:/var/run/php-fpm.sock
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
fastcgi_buffers 16 16k; # 缓冲区数量和大小(通常8-16个,每个8k-16k)
fastcgi_buffer_size 32k; # 响应头缓冲区大小
fastcgi_busy_buffers_size 256k; # 忙碌时缓冲区大小
fastcgi_temp_file_write_size 256k; # 临时文件写入大小
fastcgi_max_temp_file_size 0; # 禁用临时文件(如果内存足够)
fastcgi_buffering on; # 启用缓冲(默认)
fastcgi_connect_timeout 60s; # 后端连接超时
fastcgi_send_timeout 60s; # 发送请求超时
fastcgi_read_timeout 60s; # 读取响应超时
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=MYAPP:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header updating http_500;
fastcgi_cache_valid 200 301 302 30m;
fastcgi_cache_valid 404 1m;
location ~ \.php$ {
fastcgi_cache MYAPP;
fastcgi_cache_bypass $no_cache; # 通过某些条件绕过缓存
fastcgi_no_cache $no_cache; # 不缓存条件
fastcgi_cache_min_uses 1; # 最少请求次数后才缓存
add_header X-Cache $upstream_cache_status; # 显示缓存状态
}
# 使用unix socket通常比TCP更快
fastcgi_pass unix:/var/run/php-fpm.sock;
# 保持连接(需要Nginx 1.1.4+和PHP-FPM配置支持)
fastcgi_keep_conn on;
Nginx FastCGI性能也依赖于PHP-FPM的配置:
[www]
pm = dynamic
pm.max_children = 50 # 根据内存调整(每个进程约20-30MB)
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500 # 防止内存泄漏
分离动态和静态请求:
location ~ ^/(static|images|js|css)/ {
expires max;
access_log off;
}
禁用不必要日志:
location ~ \.php$ {
access_log off; # 如果不需要记录PHP访问日志
error_log /var/log/nginx/php_errors.log;
}
安全加固:
fastcgi_param HTTPS $https if_not_empty;
fastcgi_hide_header X-Powered-By;
微调Linux系统参数:
# 增加文件描述符限制
echo "ulimit -n 65536" >> /etc/profile
# 调整内核参数
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
sysctl -p
strace
和gdb
分析PHP-FPM进程通过以上配置优化,可以显著提高Nginx与PHP-FPM之间的FastCGI性能,但具体参数应根据服务器硬件配置和实际负载情况进行调整。