另一个Nginx和PHP-FPM问题,502错误的网关错误

时间:2016-04-18 22:11:06

标签: php nginx

我在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

这可能是微不足道的,但我不得不承认我很困惑...... 谢谢你的帮助!

2 个答案:

答案 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 配置文件解决了问题。