NGX的特点是处理静态非常强大,apache处理动态非常稳定。他们的组合是LNMPA,nginx前端,Apache后端,这样静态会处理的很快,动态会很稳定。当我以为安装完成后一切都会好的时候,却在更新网站时,出现了504网关超时;一开始我以为是意外,但尝试多次后还是发生了,于是决定想办法解决。
LNMP面临504网关超时
因为504网关超时是nginx的专属错误,一开始我以为是Nginx配置的错误。查阅在线教程,找到相应的解决方案。下面简单谈谈LNMP对这种情况的解决方案。Nginx出现这个错误是因为php-CGI进程的数量太少。面对更新网站这样的操作,很可能会出现流程不足,超时的情况。因此,需要修改两个涉及处理时间的文件。
首先是nginx.conf文件,打开后位于/nginx /nginx/conf/nginx.conf,主要修改前几次,建议修改到120秒以上。至于用什么工具修改,建议在线命令行编辑;或者用winscp下载,用dreamweaver修改。
fastcgi _ connect _ timeout 300s
fastcgi _ send _ timeout 300s
fastcgi _ read _ timeout 300s
fastcgi _ buffer _ size 128k
fastcgi _ buffers 8 128k#8 128
fastcgi _ busy _ buffers _ size 256k
fastcgi _ temp _ file _ write _ size 256k;
其次,要修改php-fpm.conf文件,这个文件在/php-5.2.17/etc/php-fpm.conf,不同一键安装包的位置不一样。反正就是PHP安装好之后在文件下面找etc文件夹,在线编辑或者下载用Dreamweaver编辑。
进入文件后搜索“max_children”。这是php-cgi进程的数量。一个进程占用20M~30M内存,按照自己的VPS或者云主机内存计算,比如512M内存。建议设置为18。另外搜索“请求_终止_超时”,就是超时。如果php程序需要长时间运行,那就把时间设置的长一点会更好,比如设置为120秒,默认单位是秒,或者写成120。
LNMPA遇到504网关超时
我按照Nginx的解决方案设置的时候,很快就成功了,但是还是出现了504网关超时。这时候直接切换到LNMP组合,发现不再遇到504网关超时错误,说明设置生效了。为什么会有这样的错误?
经过大量的资料搜索,我终于发现这是Nginx和apache的通信时间设置的问题。当用户发送php脚本执行请求时,nginx不会执行php,而是把这个问题留给apache在后台处理。nginx会等待一段时间,Apache可以在等待的时间内处理php脚本请求。如果没有完成,Nginx没有收到数据请求,返回504网关超时错误。实际上,apache仍然会在后台完成php脚本的处理,但是前台会返回一个错误。
解决方法是修改nginx和apche的通信时间,具体来说就是配置proxy.conf,这个文件在/nginx/conf/下,名字可能会变。比如有的安装包是laproxy.conf,反正是**proxy.conf文件。
proxy _ connect _ timeout 60
proxy _ send _ timeout 600
proxy _ read _ timeout 90
proxy _ buffer _ size 128k
proxy _ buffers 8 128k
proxy _ busy _ buffers _ size 256k
代理_临时_文件_写入_大小100m
第一项是连接时间,是前端连接后端的60s以内,第二项是发送时间,允许后端返回数据,是90s以内,第三项是读写时间,是前端等待后端处理的时间。这是504网关超时的根本原因。这个误差说明这个值太小,建议不低于600s。服务器越差,保证处理完成的时间越长。
当我设置好这个文件,重启nginx和apache,再次更新文章,就不会遇到这种错误,说明错误的原因不是nginx,而是前端和后端的通信时间太短。此外,nginx中还会出现502错误。其实原理也差不多。同样设置上面的文件,仍然使用LNMPA组合来设置前后端的通信时间。