Nginx 仅在使用 php-fpm 的 php 脚本上抛出 404

ari*_*nmz 13 nginx php-fpm

我已经使用nginx+安装了一个测试服务器php-fpm。我已经尝试了以下所有方法:

Nginx + Php5-fpm 不渲染 php 文件

nginx + php fpm -> 404 php 页面 - 找不到文件

访问PHP文件时,nginx抛出404错误

总结一下我的尝试:

  • 重新安装。
  • 更改脚本权限(将它们更改为0777)。
  • fastcgi_intercept_errors on.
  • root在以下级别检查指令:server,locationlocation ~ \.php
  • 检查了fastcgi_param SCRIPT_FILENAME指令。

服务器在(并且仅在).php脚本上返回 404 。我可以将它们重命名为.html,它们会很好。我该怎么办?

这是我的nginx.conf

user nginx;
worker_processes 1;

error_log  /var/log/nginx/error.log;

pid        /run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    keepalive_timeout  2;

    include /etc/nginx/conf.d/*.conf;

    index   index.html index.htm;

    server {
        listen       80;
        server_name  _;
        root         /var/www/html;

        location / {
            root /var/www/html;
            index index.php index.html index.htm;
        }

        error_page  404              /404.html;
        location = /40x.html {
            #root /var/www/html;
        }


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            #root /var/www/html;
        }

        location ~ \.php$ {
            root           /var/www/html;
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass   unix:/var/run/php5-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }


    }

}
Run Code Online (Sandbox Code Playgroud)

ari*_*nmz 14

解决了。事实证明,问题是在 php 正在侦听的套接字上设置的权限。我不得不改变一个名为指令listen.mode/etc/php-fpm.d/www.conf

listen.mode = 0750
Run Code Online (Sandbox Code Playgroud)

并将用户设置为nginx

listen.owner = nginx
listen.group = nginx
Run Code Online (Sandbox Code Playgroud)

所以文件看起来像这样:

srwxr-x---. 1 nginx nginx 0 jul  8 08:59 /var/run/php5-fpm.sock
Run Code Online (Sandbox Code Playgroud)

因为我使用的是 unix 套接字而不是 tcp 端口:

listen = /var/run/php5-fpm.sock;
Run Code Online (Sandbox Code Playgroud)

另外,我渐渐404的代替500503因为我的www.conf配置为重定向错误自定义页面,并且因为他们不存在,我得到404的。

编辑:

看起来在 Fedora 中最新版本的 nginx 发行版(Fedora 22、23)中,nginx 默认使用 apache 用户,并且套接字也设置为用户 apache,因此不需要进一步配置。