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

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

Nginx + Php5-fpm不能渲染php文件

nginx + PHP的PHP – > 404 PHP页面 – 文件未find

当访问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; } } } 

解决了它。 事实certificate,问题是设置在哪里的PHP套接字的权限。 我不得不在/etc/php-fpm.d/www.conf上更改一个名为listen.mode的指令

 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而不是500503因为我的www.conf被configuration为错误redirect自定义页面 ,并且因为他们不在那里,所以我得到了404

编辑:

在Fedora(Fedora 22,23)的nginx发行版的最新版本中,nginx默认使用apache用户,并且套接字也设置为用户apache,所以不需要进一步的configuration。

我实际上有一个“找不到”的错误,因为我读了一本书给我一个不正确的匹配string的path/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 

这里是/etc/nginx/sites-available default的configuration(我在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; } } 

注:以下内容devise为/php_status不在Internet上公开提供(也不提供PHP服务或设置为默认主机)。 它还包括用于tcp和unix-socket php-fpm的fastcgi_pass指令

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

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

validation尝试运行

 curl http://127.0.0.1/php_status