一聚教程网:一个值得你收藏的教程网站

热门教程

LNMP一键安装环境502 Bad Gateway

时间:2022-06-30 18:43:47 编辑:袖梨 来源:一聚教程网

LNMP一键安装包进行环境搭建但我发现我的wordpress后台的时候,部分页面出现502 Bad Gateway错误问题了,下面我们来看解决办法。

我的PHP版本是5.2.17

mysql版本是5.1.60

WordPress版本3.8.3

看了php-fpm的日志,基本上都是类似下面的错误

 代码如下 复制代码
May 13 19:35:21.668482 [WARNING] fpm_stdio_child_said(), line 167: child 12854 (pool default) said into stderr: "[Tue May 13 19:35:16 2014"
May 13 19:35:21.680238 [WARNING] fpm_stdio_child_said(), line 167: child 12854 (pool default) said into stderr: "] [notice] EACCELERATOR(12854): PHP crashed on opline 469 of curl_exec() at /*/wp-includes/class-http.php:1249", pipe is closed
May 13 19:35:21.680267 [WARNING] fpm_stdio_child_said(), line 167: child 12854 (pool default) said into stderr: "", pipe is closed
May 13 19:35:21.680285 [NOTICE] fpm_got_signal(), line 48: received SIGCHLD
May 13 19:35:21.680317 [WARNING] fpm_children_bury(), line 215: child 12854 (pool default) exited on signal 11 SIGSEGV after 2056.281254 seconds from start
May 13 19:35:21.680742 [NOTICE] fpm_children_make(), line 352: child 20797 (pool default) started

查询了网上的解决办法,修改后基本上都没有什么作用,错误依旧。

尝试了第一种方法:将unix套接字改成tcp/ip的
修改

 代码如下 复制代码

/usr/local/php/etc/php-fpm.cnf

< value name="“listen_address”">/tmp/nginx.socket< /value>
里面的

/tmp/nginx.socket
修改成

127.0.0.1:9000
同时将/usr/local/nginx/conf/nginx.conf 及其/usr/local/nginx/conf/vhost/ 下面的虚拟主机配置里的

fastcgi_pass  unix:/tmp/php-cgi.sock;
修改成

fastcgi_pass  127.0.0.1:9000;

之后,重新启动LNMP。

这种方法,解决了wodpress部分后台的502错误问题,但更新页面和插件页面还是一样出现502 Bad Gateway错误。

 

于是又尝试了第二种方法,将libsqlite3.so.0.8.6修改
32位的修改如下

 代码如下 复制代码

mv /usr/lib/libsqlite3.so.0.8.6 /usr/lib/libsqlite3.so.0.8.6.bak
64位的修改如下

mv /usr/lib64/libsqlite3.so.0.8.6 /usr/lib64/libsqlite3.so.0.8.6.bak

修改完登陆wordpress,打开更新页面和插件页面,还真不出现502 Bad Gateway错误了。

至此问题解决。

但现在我就奇怪了,想到第二种方法的人,真是神人啊?怎么能想出这个问题的解决方案的?是如何查到的呢?

希望高人指点。

 

LNMP的制作者军哥说,

只有在centos 6 下 php 5.2.17 + wordpress 3.8.1下会502

wordpress beta版本没问题

php 5.3下没问题

但实际上,我现在的wordpress版本也出现了同样的问题,所以应该是PHP5.2的原因!

提醒使用LNMP一键安装的朋友们,如果你想不出现502 Bad Gateway错误,建议安装PHP 5.3版本吧!!

下面附一些不是因为php版本导致问题的解决办法

一、fastcgi缓冲区设置过小
出现错误,首先要查找nginx的日志文件,目录为/var/log/nginx,在日志中发现了如下错误。

2013/01/17 13:33:47 [error] 15421#0: *16 upstream sent too big header while reading response header from upstream

查阅了一下资料,大意是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大。

网上查找了一下解决方法,在国外网站看到了一个增加缓冲区的方法,彻底解决了Nginx 502 Bad Gateway的问题。方法如下:

 代码如下 复制代码
http {
    ...
    fastcgi_buffers 8 16k;
    fastcgi_buffer_size 32k;
    ...
}

请根据服务器已经网站的情况自行增大上述两个配置项。

二、代理缓冲区设置过小
如果你使用的是nginx反向代理,如果header过大,超出了默认的1k,就会引发上述的upstream sent too big header (说白了就是nginx把外部请求给后端处理,后端返回的header太大,nginx处理不过来就会导致502。

 代码如下 复制代码
server {
        listen       80;
        server_name  *.lxy.me;
 
        location / {
 
###############添加这3行
               proxy_buffer_size 64k;
              proxy_buffers   32 32k;
              proxy_busy_buffers_size 128k;
###############添加这3行
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP       $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
............
}

三、默认php-cgi的进程数设置过少
在安装好使用过程中出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 将其中的max_children值适当增加。也有可能是max_requests值不够用。需要说明的是这连个配置项占用内存很大,请根据服务器配置进行设置。否则可能起到反效果。

四、php执行超时
php执行超时,修改/usr/local/php/etc/php.ini 将max_execution_time 改为300

五、nginx等待时间超时
部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间


http  {
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  ......
  }
好了问题解决了,

最后附一个方法案三


首先检查一下ulimit -n的值,SSH输入命令:

 代码如下 复制代码
# ulimit -n

返回:65535
1、提升服务器的文件句柄打开

SSH命令:# vi /etc/security/limits.conf,在结尾处添加以下内容:

 代码如下 复制代码
* soft nofile 65535
* hard nofile 65535

2、提升nginx的进程文件打开数

 代码如下 复制代码
# vi /usr/local/nginx/conf/nginx.conf

查看 worker_rlimit_nofile 51200;
3、修改 php-fpm.conf 配置文件

前面确认了 ulimit -n 值为 65535,/usr/local/php/etc/php-fpm.conf 中的选项 rlimit_files 确保和此数值一致。

 代码如下 复制代码
65535
10240

4、修改 sysctl.conf

 代码如下 复制代码

# vi /etc/sysctl.conf

底部添加

 代码如下 复制代码
fs.file-max=65535

至此,重启 /root/lnmp restart 生效,看看还有没有类似错误信息出现!

ps.为减小php-fpm.log文件大小,可将 /usr/local/php/etc/php-fpm.conf 中的 Log level 由 notice 修改为 ERROR,这样能降低日志的生成速度!

 代码如下 复制代码

Log level
    Error

热门栏目