我在CentOS上安装了一个带有PHP7服务器的Nginx,就像很多用户一样,我遇到了502坏网关问题。我读了整晚试图解决我的问题,但我仍然有同样的问题。我会在这里解释一下,如果有人知道发生了什么,我会很感激一些帮助: - )
首先来自nginx和php-fpm的错误日志。我使用“套接字方法”,我尝试使用127.0.0.1:9000的“网络方法”,但它没有改变任何东西......所以我回滚了配置。根据日志,它似乎不是一个许可被拒绝的问题。
注意:html页面没问题,问题只出现在php页面上。
nginx.log
2016/04/18 22:59:22 [error] 4705#0: *47 upstream sent invalid status "20 Site temporarily unavailable" while reading response header from upstream, client: 86.253.24.233, server: testvps.balusson.net, request: "GET /phpMyAdmin/ HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/www.sock:", host: "testvps.balusson.net"
2016/04/18 23:46:09 [error] 6115#0: *95 upstream sent invalid status "20 Site temporairement indisponible" while reading response header from upstream, client: 86.253.24.233, server: testvps.balusson.net, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/www.sock:", host: "testvps.balusson.net"
但我在PHP-FPM日志中没有看到任何内容
[root@vps263501 ~]# tail /var/log/php-fpm/error.log
[18-Apr-2016 21:46:48] NOTICE: fpm is running, pid 8008
[18-Apr-2016 21:46:48] NOTICE: ready to handle connections
[18-Apr-2016 21:59:41] NOTICE: Terminating ...
[18-Apr-2016 21:59:41] NOTICE: exiting, bye-bye!
[18-Apr-2016 22:11:12] NOTICE: fpm is running, pid 2886
[18-Apr-2016 22:11:12] NOTICE: ready to handle connections
[18-Apr-2016 22:11:15] NOTICE: Terminating ...
[18-Apr-2016 22:11:15] NOTICE: exiting, bye-bye!
[18-Apr-2016 22:11:15] NOTICE: fpm is running, pid 2913
[18-Apr-2016 22:11:15] NOTICE: ready to handle connections
我的配置文件非常简单:
/etc/nginx/sites-available/maisonrt2012.conf
server {
listen 80;
server_name testvps.balusson.net;
root /var/www/maisonrt2012/public_html;
index index.html index.htm index.php;
# Pass PHP scripts on to PHP-FPM
location ~* \.php$ {
try_files $uri /index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_pass unix:/run/php-fpm/www.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
location /phpMyAdmin {
root /usr/share/;
index index.html index.htm index.php;
}
}
根据我的站点可用配置文件
,将default.conf设置为unix套接字server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
root /var/www/maisonrt2012/public_html/;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
}
在nginx.conf文件中,用户被指定为nginx;
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
我的PHP-FPM配置文件如下 /etc/php-fpm.d/www.conf
; Start a new pool named 'www'.
[www]
user = nginx
group = nginx
;listen = 127.0.0.1:9000
listen = /run/php-fpm/www.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
;listen.acl_users = nobody
;listen.acl_groups =
listen.allowed_clients = 127.0.0.1
www.sock的位置可以使用nginx用户和权限
[root@vps263501 ~]# ls -l /run/php-fpm/
total 0
srw-rw---- 1 nginx nginx 0 Apr 18 22:11 www.sock
我在文件/ etc / nginx / fastcgi_params中添加了以下两行,因为它们丢失了(我在不同的主题上发现了这一行)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
但我仍然有我的问题。 我现在被困住,所以如果有人有想法我会很感激: - )
当然,PHP和Nginx都是以合适的用户
开始的[root@vps263501 ~]# ps aux | grep php
root 2913 0.0 0.3 317080 6464 ? Ss Apr18 0:00 php-fpm: master process (/etc/php-fpm.conf)
nginx 2914 0.0 0.4 319436 8460 ? S Apr18 0:00 php-fpm: pool www
nginx 2915 0.0 0.4 319436 8460 ? S Apr18 0:00 php-fpm: pool www
nginx 2916 0.0 0.4 319436 8460 ? S Apr18 0:00 php-fpm: pool www
nginx 2917 0.0 0.4 319436 8460 ? S Apr18 0:00 php-fpm: pool www
nginx 2918 0.0 0.4 319436 8460 ? S Apr18 0:00 php-fpm: pool www
nginx 3705 0.0 0.4 319436 8460 ? S Apr18 0:00 php-fpm: pool www
root 9259 0.0 0.0 103304 892 pts/0 S+ 00:09 0:00 grep php
[root@vps263501 ~]# ps aux | grep nginx
nginx 2914 0.0 0.4 319436 8460 ? S Apr18 0:00 php-fpm: pool www
nginx 2915 0.0 0.4 319436 8460 ? S Apr18 0:00 php-fpm: pool www
nginx 2916 0.0 0.4 319436 8460 ? S Apr18 0:00 php-fpm: pool www
nginx 2917 0.0 0.4 319436 8460 ? S Apr18 0:00 php-fpm: pool www
nginx 2918 0.0 0.4 319436 8460 ? S Apr18 0:00 php-fpm: pool www
nginx 3705 0.0 0.4 319436 8460 ? S Apr18 0:00 php-fpm: pool www
root 4168 0.0 0.1 45556 2140 ? Ss Apr18 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 6115 0.0 0.1 45560 2324 ? S Apr18 0:00 nginx: worker process
root 9261 0.0 0.0 103304 892 pts/0 S+ 00:09 0:00 grep nginx
这可能是微不足道的,但我不得不承认我很困惑...... 谢谢你的帮助!
答案 0 :(得分:0)
在php-fpm中将套接字更改为127.0.0.1:9000并重启php-fpm。 然后在你的nginx网站conf中尝试以下设置:
location / {
root /var/www/maisonrt2012/public_html;
index index.php index.html index.htm;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#error_page 404 404.html;
}
重新启动nginx并尝试一下。不要忘记:www-data可能需要读取并执行对php文件的权限。
有同样的问题。我用暴力强迫尝试了:P。 也许这会帮助你。
答案 1 :(得分:0)
如果其他浏览 StackOverflow 的人再次遇到这个问题,我可以看到很多地方都提到了这种事情,例如
https://forum.nginx.org/read.php?3,129805,129811
https://forum.directadmin.com/threads/php-fpm-5-6-and-7-0-error-restart-every-minute.54709/
有多种可能的原因,但我确实发现了一个导致我们系统出现问题的原因。我已将 monit 设置为在进程失败时重新启动进程。我有一个自定义 monit 配置文件,用于查找 php-fpm 套接字。我们将 php-fpm 从 PHP 7.3 更新到 7.4,并更改了套接字文件的名称。所以 monit 决定 php-fpm 没有运行并每分钟重新启动它。更改 monit 配置文件解决了问题。