Nginx php实现原理
Nginx与PHP协同工作原理
Nginx作为高性能Web服务器,本身不直接处理PHP代码,需通过FastCGI协议与PHP处理器(如PHP-FPM)通信。以下是核心实现原理:
Nginx处理PHP请求流程
客户端发起PHP请求后,Nginx接收请求并检查文件扩展名(如.php)。匹配到PHP文件时,Nginx通过FastCGI协议将请求转发给PHP-FPM进程。
PHP-FPM作为独立服务运行,接收Nginx转发的请求后执行PHP脚本。执行结果通过FastCGI协议返回给Nginx,最终由Nginx发送给客户端。
关键配置组件
Nginx配置中需设定FastCGI参数,典型配置片段如下:

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
PHP-FPM需配置监听方式,常见有两种:
- TCP Socket:监听网络端口(如127.0.0.1:9000)
- Unix Domain Socket:监听套接字文件(如/var/run/php-fpm.sock)
性能优化要点
Unix Domain Socket方式通常比TCP Socket有更低延迟,适合单机部署。TCP Socket方式便于分布式部署,可跨服务器通信。
调整PHP-FPM进程管理参数能显著影响性能:

pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 30
安全注意事项
确保Nginx和PHP-FPM运行在非root用户下。限制PHP可访问目录,防止目录穿越攻击:
fastcgi_param DOCUMENT_ROOT /var/www/html;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
禁用危险PHP函数:
disable_functions = exec,passthru,shell_exec,system
常见问题排查
检查Nginx错误日志(通常位于/var/log/nginx/error.log)和PHP-FPM日志(通常位于/var/log/php-fpm.log)。验证FastCGI连接是否正常:
telnet 127.0.0.1 9000
确认文件权限设置正确,Nginx进程用户需要有PHP文件的读取权限,PHP-FPM进程用户需要有执行权限。






