一个关于 nginx 配置的问题,配置一个 php 网站,页面总是输出 File not found.,查看 nginx log 中报错:
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
nginx 配置如下:
erver { listen 80; server_name abc.com; root "/root/work/abc/public"; index index.html index.htm index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } access_log off; error_log /var/log/nginx/abc.com-error.log error; sendfile off; client_max_body_size 100m; location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php5.6-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors off; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; } location ~ /\.ht { deny all; } }
查了一下,大多数给出的解决方法都是 fastcgi_param 改成 document_root ,但是我这个现在已经是这个了。
还有一个怀疑是 php-fpm 的权限问题,但是不知道怎么解决和是否是这个问题:
root 20618 0.0 0.4 317860 18816 ? Ss 18:11 0:00 php-fpm: master process (/etc/php/5.6/fpm/php-fpm.conf) www-data 20620 0.0 0.1 317860 6828 ? S 18:11 0:00 php-fpm: pool www www-data 20621 0.0 0.1 317860 6828 ? S 18:11 0:00 php-fpm: pool www root 24811 0.0 0.0 11744 932 pts/7 S+ 19:33 0:00 grep --color=auto php-fpm
所以想请教一下有没有人遇到类似的问题,或者有没有解决方案?
![]() | 1 taozywu 2017-02-18 20:19:44 +08:00 1.给我看下你 php-fpm 的配置 2.请确定 /var/run/php/php5.6-fpm.sock 这个在 php-fpm 配置正确 3.注意 php 和 nginx 执行权限 |
2 polandeme OP @taozywu php-fpm 配置是默认配置 [php-fpm.conf]( https://gist.github.com/polandeme/38bc11cc1b4aeebe65e0097a4a3ec1dc) /var/run/php/php5.6-fpm.sock 这个配置应该是正确的,存在这个文件,开始有报过这路径错误日志,我改过来了。 现在是怀疑第三点,但是不知道怎么调试。 |
3 zen9073 2017-02-18 22:38:48 +08:00 /etc/php/5.6/fpm/pool.d/www.conf 文件中 listen 字段是怎么配置的 nginx 的运行用户和户组是什么 另外你把 nginx 的 “ root ” 设置在 root 目录, nginx 或者 php-fpm 有权限读取吗 |
4 julyclyde 2017-02-19 09:39:38 +08:00 首先,既然 nginx 能收到 fastcgi 发来的错误信息,那就根本不需要考虑 nginx 和 php-fpm “能否通信”的问题了 |
5 julyclyde 2017-02-19 09:41:48 +08:00 我比较怀疑的是 fastcgi_split_path_info 的问题 建议你用 socat 冒充 php 在那 unix socket 上监听,查一下 nginx 发来的各个 fastcgi_param 的值到底是什么;或用 strace 跟踪一下传递过来的字符串 或者是去掉 fastcgi_split_path_info 试一下 |
6 polandeme OP |
9 julyclyde 2017-02-26 23:11:57 +08:00 @polandeme 移除就修复了,说明你的 documen_root 有问题或者没权限 不仅要“下对应的文件夹”还要“ root 本身”的整个目录树的权限都打开才可以 |
10 feivorid 2018-03-01 15:42:53 +08:00 我一直在 var/www 目录下也没有好用 悲催 |
![]() | 11 yanglihui 2021-03-22 11:56:56 +08:00 试试关闭 selinux (别问我怎么知道的,看到各种杂七杂八解决方案,看了一天了。。。没一个靠谱) 查看 SELinux 状态:getenforce 临时关闭:setenforce 0 修改配置文件需要重启机器:/etc/selinux/config 将 SELINUX=enforcing 改为 SELINUX=disabled |