LNMPA遇到504 Gateway time-out錯(cuò)誤的解決方法
Nginx的特點(diǎn)是處理靜態(tài)很給力,Apache的特點(diǎn)是處理動(dòng)態(tài)很穩(wěn)定,兩者結(jié)合起來便是LNMPA,nginx處理前端,apache處理后端,這樣處理靜態(tài)會(huì)很快,處理動(dòng)態(tài)會(huì)很穩(wěn)定。當(dāng)我以為安裝完成以后便萬事大吉,不料更新網(wǎng)站的時(shí)候卻出現(xiàn)504 Gateway time-out;起初還以為這是偶然,多次嘗試后依然出現(xiàn)這樣的情況,因此才決定查找解決方法。
LNMP面對(duì)504 Gateway time-out
因?yàn)?04 Gateway time-out是Nginx的專屬錯(cuò)誤,因此起初我以為是nginx配置出錯(cuò),查找網(wǎng)上的教程,找到相應(yīng)的解決方法,下面簡(jiǎn)單說說LNMP面對(duì)此種情況的解決方案。Nginx出現(xiàn)這樣的錯(cuò)誤,是因?yàn)閷?duì)PHP-CGI進(jìn)程數(shù)限制得太小,面對(duì)更新網(wǎng)站這類操作,很可能出現(xiàn)進(jìn)程不足而超時(shí)的情況,因此要修改兩處涉及到處理時(shí)間的文件。
首先是nginx.conf文件,這個(gè)文件在/nginx/conf/nginx.conf,打開以后,主要修改前面幾個(gè)時(shí)間,建議修改為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文件,這個(gè)文件在/php-5.2.17/etc/php-fpm.conf,不同的一鍵安裝包位置有所不同,反正找找php安裝以后文件下面的etc文件夾即可,在線編輯或下載下來用Dreamweaver編輯。
進(jìn)入文件后搜索”max_children”這是php-cgi進(jìn)程數(shù),一個(gè)進(jìn)程占20M~30M內(nèi)存,按自己的VPS或云主機(jī)內(nèi)存進(jìn)行計(jì)算,好比512M內(nèi)存,推薦設(shè)置為18即可;另外搜索”request_terminate_timeout”,這是超時(shí)時(shí)間,若php程序要長(zhǎng)時(shí)間運(yùn)作,那么設(shè)置時(shí)間大一點(diǎn)會(huì)比較好,好比設(shè)置為120秒,單位默認(rèn)是秒,或者寫成120同樣可以。
LNMPA遇到504 Gateway time-out
當(dāng)我按照Nginx的解決方法設(shè)置,很快設(shè)置成功,不過依然會(huì)出現(xiàn)504 Gateway time-out,這時(shí)我直接切換為L(zhǎng)NMP組合,發(fā)現(xiàn)不再遇到504 Gateway time-out錯(cuò)誤,這說明設(shè)置已經(jīng)生效;為什么還會(huì)出現(xiàn)這樣的錯(cuò)誤呢?
經(jīng)過大量的資料查找,終于發(fā)現(xiàn)這是Nginx與Apache通信時(shí)間設(shè)置問題,當(dāng)用戶發(fā)出php腳本執(zhí)行請(qǐng)求,nginx不會(huì)執(zhí)行php,會(huì)把這個(gè)問題留給后臺(tái)的apache,nginx會(huì)等待一段時(shí)間,apache可以在等待時(shí)間內(nèi)處理php腳本請(qǐng)求,若未處理完,nginx便已未收到數(shù)據(jù)請(qǐng)求而返回504 Gateway time-out錯(cuò)誤,實(shí)際情況是apache依然會(huì)在后臺(tái)處理完php腳本,只是前臺(tái)返回錯(cuò)誤。
解決方法是修改nginx與apche通信時(shí)間,具體是配置proxy.conf,這個(gè)文件在/nginx/conf/下面,名字可能會(huì)有變化,好比有的安裝包是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;
proxy_temp_file_write_size 100m;
第一項(xiàng)是連接時(shí)間,前端連接后端時(shí)間,60s以內(nèi)即可,第二個(gè)是發(fā)送時(shí)間,允許后端返回?cái)?shù)據(jù)的時(shí)間,90s以內(nèi)即可,第三個(gè)時(shí)間是讀寫時(shí)間,這是前端等待后端處理時(shí)間,這是導(dǎo)致504 Gateway time-out的根本原因,出現(xiàn)這個(gè)錯(cuò)誤,說明這個(gè)值太小,推薦不小于600s,服務(wù)器越差,那么設(shè)置得更長(zhǎng),保證處理完畢。
當(dāng)我把這個(gè)文件設(shè)置好,重啟nginx和apache,再次更新文章,已經(jīng)不會(huì)遇到這類錯(cuò)誤,說明出錯(cuò)原因不是nginx,而是前段和后端的通信時(shí)間太短。另外,nginx還會(huì)有502錯(cuò)誤,實(shí)際上原理是差不多的,同樣設(shè)置上面這部分文件,LNMPA組合依然是設(shè)置前后端的通信時(shí)間。
關(guān)鍵詞:LNMPA
閱讀本文后您有什么感想? 已有 人給出評(píng)價(jià)!
- 0
- 0
- 0
- 0
- 0
- 0