linux搭建nginx服务 linux用nginx搭建web服务器
Nginx不解析PHP,必须由php-fpm处理,核心错误源于fastcgi_pass路径不匹配、SCRIPT_FILENAME构造错误或权限问题;需严格校验监听地址、显式设置SCRIPT_FILENAME、确保Nginx用户有socket及文件读取权限,并逐项验证。
Nginx 本身不解析 PHP,必须靠 php-fpm 处理,配置错一步就返回 404、502 或直接下载/显示源码——核心问题出在 fastcgi_pass 路径、SCRIPT_FILENAME 构造、或权限三者之一。确认 php-fpm 监听是否且路径匹配
很多“PHP 不执行”问题 其实卡在第一步:Nginx 根本连不上 php-fpm。不是服务没启,而是舞台地址连接。运行 systemctl status php-fpm 确认状态为 active (running)查监听方式:sudo ss -tlnp | grep ':9000\|php-fpm',看是 127.0.0.1:9000 还是 /run/php/php-fpm.sock(Ubuntu/Debian 经常用,CentOS/RHEL 默认可能用前面)fastcgi_pass 必须和实际输出完全一致:写 unix:/var/run/php/php-fpm.sock 却实际实现 /run/php/php-fpm.sock,就会 502Socket 文件权限要允许 Nginx 工作用户(如 www-data 或 nginx)访问:ls -l /run/php/php-fpm.sock,若属主不是 Nginx 用户,需改 php-fpm.conf 中的listen.owner 和listen.grouplocation ~ \.php$ 块里 SCRIPT_FILENAME 必须动态拼对
这是最常被抄错不易察觉的点:include fastcgi_params 里面的 SCRIPT_FILENAME 默认是空的或者错的,必须明显式覆盖。不要只写 include fastcgi_params 就完事了——它不包含 SCRIPT_FILENAME 的定义(新版 Nginx 的 fastcgi_params 文件里已删掉行)必须加:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;$document_root 依赖 root 指令位置:如果 root 写在服务器 如果 root 在 location / 里,$document_root 在 location ~ \.php$ 中会为空验证方法:临时在 location ~ \.php$ 里加 add_header X-Script-Path $document_root$fastcgi_script_name;,curl 看响应头是否拼出真实路径index.php 不生效?检查 root 和索引块的作用域
浏览器访问/显示 404 或列目录,不是 PHP 问题,是 Nginx 找不到入口文件。
