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


11

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

Nginx + Php5-fpm无法呈现php文件

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

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

总结一下我尝试过的:

  • 重新安装。
  • 更改脚本特权(将其更改为0777)。
  • fastcgi_intercept_errors on
  • 检查root指令的层次:serverlocationlocation ~ \.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;
        }


    }

}

Answers:


14

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

listen.mode = 0750

并将用户设置为nginx

listen.owner = nginx
listen.group = nginx

所以文件看起来像这样:

srwxr-x---. 1 nginx nginx 0 jul  8 08:59 /var/run/php5-fpm.sock

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

listen = /var/run/php5-fpm.sock;

另外,我得到的404不是,500或者503是因为我www.conf配置为错误重定向自定义页面,并且由于错误不存在,所以我得到了404

编辑:

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


正确,您必须控制:-哪个用户/组运行nginx(或任何Web服务器)-哪个用户/组运行php-fpm
Dmitry Dubovitsky 2015年

0

我实际上遇到了“未找到”错误,因为我读过的书给了我一个错误的匹配字符串,该字符串与/php_status我在php-fpm 7.0.x(当前为7.0.19)和nginx 1.12(当前为1.12.0)中配置的路径不匹配

这里是 /etc/php/7.0/fpm/pool.d/{config}

pm.status_path = /php_status

下面是配置default/etc/nginx/sites-available(我是在Ubuntu)

server {
  listen 80 default;
  root /var/www;

  index index.html index.htm default.html;
  access_log /dev/null;
  error_log /dev/null;

  location / {
    try_files $uri $uri/ =404;
  }

  location /php_status {
    fastcgi_pass unix:/var/run/php7.0-fpm.sock;
    # fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    include fastcgi_params;
    allow 127.0.0.1;
    deny all;
  }
}

注意:以下内容经过专门设计,因此/php_status不能在Internet上公开使用(也不提供PHP或默认主机的设置)。它还包括fastcgi_pass用于tcp和unix-socket php-fpm的指令

您还应该在之后运行以下两个命令

sudo service nginx reload
sudo service php7.0-fpm restart

验证尝试运行

curl http://127.0.0.1/php_status
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.