502错误的网关
502 Bad Gateway
我经常遇到的问题是,如果我转到服务器上使用 php 的页面,我会收到“502 Bad Gateway”错误。
错误日志:
/var/log/nginx/error.log
每分钟显示大约 3 个此错误副本:
2016/08/27 15:07:22 [error] 17309#0: *53554 connect() to unix:/var/run/php5-fpm.sock
failed (11: Resource temporarily unavailable) while connecting to upstream, client:
[dedicated server], server: localhost, request: "POST /xmlrpc.php HTTP/1.0",
upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: [my IP address]
来自 nginx
或 php5-fpm
进程的 CPU 负载有时很大(超过 100%),但有时只是很明显 (2%),很少微不足道。
这是我在 syslog
(!) 中经常看到的内容:
Aug 27 15:17:21 [site] avahi-daemon[871]: Invalid response packet from host
[some IP address that isn't mine and nslookup never heard of].
到目前为止我尝试过的事情:
apt-get update
- 删除并重新安装了
php5
、php5-cgi
和 php5-fpm
- 确保
apache2
在我的系统上不是 运行
added
这到 nginx.conf
,在 http {
内 ... }
:
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
确保运行 nginx
的同一用户拥有 /var/run/php5-fpm.sock
。这是在 /etc/php5/fpm/pool.d/www.conf
.
中引用为 listen.owner
和 listen.group
的同一所有者
尝试将对该套接字的引用更改为 TCP/IP 套接字:
/etc/nginx/sites-available/default
包含行 fastcgi_pass unix:127.0.0.1:9000;
/etc/php5/fpm/pool.d/www.conf
包含行 listen = 127.0.0.1:9000;
因为这使得 php 页面中的 none 可以正常工作,所以我恢复了该更改。
- 确保我没有在
nginx.conf
设置中禁用 PHP 文件。我不是,有时它会起作用,所以不可能。
php5-fpm 设置:
我怀疑这是 php5 占用内存或 CPU 时间的问题,因为 (a) 它经常发生并且 (b) 如果我没有收到 504 错误,我会收到使用 php 在任何页面上的加载时间都非常慢。这是我认为 /etc/php5/fpm/pool.d/www.conf
文件的相关部分:
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
所以:我还应该尝试什么? TIA.
您可以检查以下内容,
1- sudo service php5-fpm status
,如果没有运行
,尝试开始
2- 将套接字更改为 tcp/ip 时删除 unix,即在 /etc/nginx/sites-available/default
文件中,在 php 块中将 fastcgi_pass unix:/var/run/php5-fpm.sock;
更改为 fastcgi_pass 127.0.0.1:9000;
并在 /etc/php5/fpm/pool.d/www.conf
文件中将 listen = /var/run/php5-fpm.sock
更改为 listen = 127.0.0.1:9000
3- 尝试增加 php 的进程管理器,即 pm.max_children=40
、pm.start_servers = 10
、pm.min_spare_servers = 5
、pm.max_spare_servers = 10
4- 关闭来自 nginx.conf
的 keepalive 连接
5- 如果可能,尝试实现 caching(几乎是静态内容,因此所有请求都不会打扰 php)。
我经常遇到的问题是,如果我转到服务器上使用 php 的页面,我会收到“502 Bad Gateway”错误。
错误日志:
/var/log/nginx/error.log
每分钟显示大约 3 个此错误副本:
2016/08/27 15:07:22 [error] 17309#0: *53554 connect() to unix:/var/run/php5-fpm.sock
failed (11: Resource temporarily unavailable) while connecting to upstream, client:
[dedicated server], server: localhost, request: "POST /xmlrpc.php HTTP/1.0",
upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: [my IP address]
来自 nginx
或 php5-fpm
进程的 CPU 负载有时很大(超过 100%),但有时只是很明显 (2%),很少微不足道。
这是我在 syslog
(!) 中经常看到的内容:
Aug 27 15:17:21 [site] avahi-daemon[871]: Invalid response packet from host
[some IP address that isn't mine and nslookup never heard of].
到目前为止我尝试过的事情:
apt-get update
- 删除并重新安装了
php5
、php5-cgi
和php5-fpm
- 确保
apache2
在我的系统上不是 运行 added 这到
nginx.conf
,在http {
内 ...}
:fastcgi_buffers 8 16k; fastcgi_buffer_size 32k; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300;
确保运行
nginx
的同一用户拥有/var/run/php5-fpm.sock
。这是在/etc/php5/fpm/pool.d/www.conf
. 中引用为 尝试将对该套接字的引用更改为 TCP/IP 套接字:
/etc/nginx/sites-available/default
包含行fastcgi_pass unix:127.0.0.1:9000;
/etc/php5/fpm/pool.d/www.conf
包含行listen = 127.0.0.1:9000;
因为这使得 php 页面中的 none 可以正常工作,所以我恢复了该更改。
- 确保我没有在
nginx.conf
设置中禁用 PHP 文件。我不是,有时它会起作用,所以不可能。
listen.owner
和 listen.group
的同一所有者
php5-fpm 设置:
我怀疑这是 php5 占用内存或 CPU 时间的问题,因为 (a) 它经常发生并且 (b) 如果我没有收到 504 错误,我会收到使用 php 在任何页面上的加载时间都非常慢。这是我认为 /etc/php5/fpm/pool.d/www.conf
文件的相关部分:
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
所以:我还应该尝试什么? TIA.
您可以检查以下内容,
1- sudo service php5-fpm status
,如果没有运行
2- 将套接字更改为 tcp/ip 时删除 unix,即在 /etc/nginx/sites-available/default
文件中,在 php 块中将 fastcgi_pass unix:/var/run/php5-fpm.sock;
更改为 fastcgi_pass 127.0.0.1:9000;
并在 /etc/php5/fpm/pool.d/www.conf
文件中将 listen = /var/run/php5-fpm.sock
更改为 listen = 127.0.0.1:9000
3- 尝试增加 php 的进程管理器,即 pm.max_children=40
、pm.start_servers = 10
、pm.min_spare_servers = 5
、pm.max_spare_servers = 10
4- 关闭来自 nginx.conf
的 keepalive 连接5- 如果可能,尝试实现 caching(几乎是静态内容,因此所有请求都不会打扰 php)。