éå°502é®é¢ï¼å¯ä»¥ä¼å
èèæç
§ä»¥ä¸ä¸¤ä¸ªæ¥éª¤å»è§£å³ã
1ãæ¥çå½åçPHP FastCGIè¿ç¨æ°æ¯å¦å¤ç¨ï¼
å¤å¶ä»£ç 代ç å¦ä¸:
netstat -anpo | grep "php-cgi" | wc -l
å¦æå®é
使ç¨çâFastCGIè¿ç¨æ°âæ¥è¿é¢è®¾çâFastCGIè¿ç¨æ°âï¼é£ä¹ï¼è¯´æâFastCGIè¿ç¨æ°âä¸å¤ç¨ï¼éè¦å¢å¤§ã
2ãé¨åPHPç¨åºçæ§è¡æ¶é´è¶
è¿äºNginxççå¾
æ¶é´ï¼å¯ä»¥éå½å¢å nginx.confé
ç½®æ件ä¸FastCGIçtimeoutæ¶é´ï¼ä¾å¦ï¼
å¤å¶ä»£ç 代ç å¦ä¸:
http { fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; ...... } ......
php.iniä¸memory_limit设ä½äºä¼åºéï¼ä¿®æ¹äºphp.iniçmemory_limit为64Mï¼éå¯nginxï¼åç°å¥½äºï¼åæ¥æ¯PHPçå
åä¸è¶³äºã
å¦æè¿æ ·ä¿®æ¹äºè¿è§£å³ä¸äºé®é¢ï¼å¯ä»¥åèä¸é¢è¿äºæ¹æ¡ï¼
ä¸ãmax-childrenåmax-requests
ä¸å°æå¡å¨ä¸è¿è¡çnginx php(fpm) xcacheï¼è®¿é®éæ¥å 300W pvå·¦å³ã
æè¿ç»å¸¸ä¼åºç°è¿æ ·çæ
åµï¼php页é¢æå¼å¾æ
¢ï¼cpu使ç¨ççªç¶éè³å¾ä½ï¼ç³»ç»è´è½½çªç¶åè³å¾é«ï¼æ¥çç½å¡çæµéï¼ä¹ä¼åç°çªç¶éå°äºå¾ä½ãè¿ç§æ
åµåªæç»æ°ç§éå°±æ¢å¤äºã
æ£æ¥php-fpmçæ¥å¿æ件åç°äºä¸äºçº¿ç´¢ã
å¤å¶ä»£ç 代ç å¦ä¸:
Sep 30 08:32:23.289973 [NOTICE] fpm_unix_init_main(), line 271: getrlimit(nofile): max:51200, cur:51200 Sep 30 08:32:23.290212 [NOTICE] fpm_sockets_init_main(), line 371: using inherited socket fd=10, â127.0.0.1:9000â³ Sep 30 08:32:23.290342 [NOTICE] fpm_event_init_main(), line 109: libevent: using epoll Sep 30 08:32:23.296426 [NOTICE] fpm_init(), line 47: fpm is running, pid 30587ã
å¨è¿å å¥çåé¢ï¼æ¯1000å¤è¡çå
³échildrenåå¼å¯childrençæ¥å¿ã
åæ¥ï¼php-fpmæä¸ä¸ªåæ° max_requestsï¼è¯¥åæ°ææäºï¼æ¯ä¸ªchildrenæå¤å¤çå¤å°ä¸ªè¯·æ±å便ä¼è¢«å
³éï¼é»è®¤ç设置æ¯500ãå 为phpæ¯æ请æ±è½®è¯¢ç»æ¯ä¸ª childrenï¼å¨å¤§æµéä¸ï¼æ¯ä¸ªchildreå°è¾¾max_requestsæç¨çæ¶é´é½å·®ä¸å¤ï¼è¿æ ·å°±é æææçchildrenåºæ¬ä¸å¨åä¸æ¶é´ 被å
³éã
å¨è¿æé´ï¼nginxæ æ³å°phpæ件转交ç»php-fpmå¤çï¼æ以cpuä¼éè³å¾ä½(ä¸ç¨å¤çphpï¼æ´ä¸ç¨æ§è¡sql)ï¼èè´è½½ä¼åè³å¾é«(å
³éåå¼å¯childrenãnginxçå¾
php-fpm)ï¼ç½å¡æµéä¹éè³å¾ä½(nginxæ æ³çææ°æ®ä¼ è¾ç»å®¢æ·ç«¯)
解å³é®é¢å¾ç®åï¼å¢å childrençæ°éï¼å¹¶ä¸å° max_requests è®¾ç½®æª 0 æè
ä¸ä¸ªæ¯è¾å¤§çå¼ï¼
æå¼ /usr/local/php/etc/php-fpm.confè°å¤§ä»¥ä¸ä¸¤ä¸ªåæ°(æ ¹æ®æå¡å¨å®é
æ
åµï¼è¿å¤§ä¹ä¸è¡ï¼
å¤å¶ä»£ç 代ç å¦ä¸:
<value>5120</value><value>600</value>ãã
ç¶åéå¯php-fpmã
äºãå¢å ç¼å²åºå®¹é大å°
å°nginxçerror logæå¼ï¼åç°âpstream sent too big header while reading response header from upstreamâè¿æ ·çé误æ示ãæ¥é
äºä¸ä¸èµæï¼å¤§ææ¯nginxç¼å²åºæä¸ä¸ªbugé æç,æ们ç½ç«ç页é¢æ¶èå ç¨ç¼å²åºå¯è½è¿å¤§ãåèèå¤åçä¿® æ¹åæ³å¢å äºç¼å²åºå®¹é大å°è®¾ç½®ï¼502é®é¢å½»åºè§£å³ãåæ¥ç³»ç»ç®¡çåå对åæ°åäºè°æ´åªä¿çäº2个设置åæ°ï¼client head bufferï¼fastcgi buffer sizeã
ä¸ãrequest_terminate_timeout
å¦æ主è¦æ¯å¨ä¸äºpostæè
æ°æ®åºæä½çæ¶ååºç°502è¿ç§æ
åµï¼èä¸æ¯å¨éæ页é¢æä½ä¸å¸¸è§ï¼é£ä¹å¯ä»¥æ¥çä¸ä¸php-fpm.conf设置ä¸çä¸é¡¹ï¼
request_terminate_timeout
è¿ä¸ªå¼æ¯max_execution_timeï¼å°±æ¯fast-cgiçæ§è¡èæ¬æ¶é´ã
0s
0s为å
³éï¼å°±æ¯æ éæ§è¡ä¸å»ãï¼å½æ¶è£
çæ¶å没ä»ç»çå°±æ¹äºä¸ä¸ªæ°åï¼é®é¢è§£å³äºï¼æ§è¡å¾é¿æ¶é´ä¹ä¸ä¼åºéäºãä¼åfastcgiä¸ï¼è¿å¯ä»¥æ¹æ¹è¿ä¸ªå¼5s ççææã
php-cgiè¿ç¨æ°ä¸å¤ç¨ãphpæ§è¡æ¶é´é¿ãæè
æ¯php-cgiè¿ç¨æ»æï¼é½ä¼åºç°502é误ãNginx 502 Bad Gatewayé误ç解å³åæ³2
ä»å¤©ï¼æçVPSé¢ç¹æ示Nginx 502 Bad Gatewayé误äºï¼éå¯äºVPS解å³ä¹åååºç°ï¼å¾ç¦ãæç¹æ³ä¸éï¼å两天ç½ç«è¾¾å°äº1290ç访é®éé½æ²¡æåºä»ä¹é®é¢ï¼æä¹è¿æ¬¡å°±åºç°äº502 Bad Gatewayï¼éé·åï¼ï¼ï¼å¨æç´¢äºå¾ä¹
ï¼ç»äºæ¾å°äºä¸å°ç¸å
³ççæ¡ï¼å¸æä¿®æ¹ä¹åä¸ä¼ååºç°è¿ä¸ªé误äºãåï¼æ¢ç¶å¨ç½ä¸æ¾äºé£ä¹ä¹
ççæ¡ï¼é£å½ç¶å¾ææç¨çä¸è¥¿è®°å½ä¸ï¼å
å¾æä¸æ¬¡åå»è°·æ~
ç±äºææ¯éç¨äºLNMPä¸é®å®è£
å
ï¼åºäºé®é¢è¯å®è¦å
å°å®æ¹è®ºåå»æç´¢ä¸äºï¼ç好ï¼å®æ¹æ个è¿æ ·ç置顶å¸ï¼å¤§å®¶å
ç§ç§ã
LNMPä¸é®å®è£
å
å®æ¹çï¼
第ä¸ç§åå ï¼ç®ålnmpä¸é®å®è£
å
æ¯è¾å¤çé®é¢å°±æ¯502 Bad Gatewayï¼å¤§é¨åæ
åµä¸åå æ¯å¨å®è£
phpåï¼èæ¬ä¸æäºlibå
å¯è½æ²¡æå®è£
ä¸ï¼é æphp没æç¼è¯å®è£
æåã解å³åæ³ï¼å¯ä»¥å°è¯æ ¹æ®lnmpä¸é®å®è£
å
ä¸çèæ¬æå¨å®è£
ä¸ä¸ï¼ççæ¯ä»ä¹é误导è´çã
第äºç§åå ï¼
å¨php.iniéï¼eacceleratoré
置项ä¸å®è¦æ¾å¨Zend Optimizeré
ç½®ä¹åï¼å¦åä¹å¯è½å¼èµ·502 Bad Gateway
第ä¸ç§åå ï¼
å¨å®è£
好使ç¨è¿ç¨ä¸åºç°502é®é¢ï¼ä¸è¬æ¯å 为é»è®¤php-cgiè¿ç¨æ¯5个ï¼å¯è½å 为phpcgiè¿ç¨ä¸å¤ç¨èé æ502ï¼éè¦ä¿®æ¹/usr/local/php/etc/php-fpm.conf å°å
¶ä¸çmax_childrenå¼éå½å¢å ã
第åç§åå ï¼
phpæ§è¡è¶
æ¶ï¼ä¿®æ¹/usr/local/php/etc/php.ini å°max_execution_time æ¹ä¸º300
第äºç§åå ï¼
ç£ç空é´ä¸è¶³ï¼å¦mysqlæ¥å¿å ç¨å¤§é空é´
第å
ç§åå ï¼
æ¥çphp-cgiè¿ç¨æ¯å¦å¨è¿è¡
ä¹æç½åç»åºäºå¦å¤ç解å³åæ³ï¼
Nginx 502 Bad Gatewayçå«ä¹æ¯è¯·æ±çPHP-CGIå·²ç»æ§è¡ï¼ä½æ¯ç±äºæç§åå ï¼ä¸è¬æ¯è¯»åèµæºçé®é¢ï¼æ²¡ææ§è¡å®æ¯è导è´PHP-CGIè¿ç¨ç»æ¢ï¼ä¸è¬æ¥è¯´Nginx 502 Bad Gatewayåphp-fpm.confç设置æå
³ã
php-fpm.confæ两个è³å
³éè¦çåæ°ï¼ä¸ä¸ªæ¯max_childrenï¼å¦ä¸ä¸ªæ¯request_terminate_timeoutï¼ä½æ¯è¿ä¸ªå¼ä¸æ¯éç¨çï¼èæ¯éè¦èªå·±è®¡ç®çãå¨å®è£
好使ç¨è¿ç¨ä¸åºç°502é®é¢ï¼ä¸è¬æ¯å 为é»è®¤php-cgiè¿ç¨æ¯5个ï¼å¯è½å 为phpcgiè¿ç¨ä¸å¤ç¨èé æ502ï¼éè¦ä¿®æ¹/usr/local/php/etc/php-fpm.conf å°å
¶ä¸çmax_childrenå¼éå½å¢å ã
计ç®çæ¹å¼å¦ä¸ï¼
å¦æä½ çæå¡å¨æ§è½è¶³å¤å¥½ï¼ä¸å®½å¸¦èµæºè¶³å¤å
足ï¼PHPèæ¬æ²¡æ系循ç¯æBUGçè¯ä½ å¯ä»¥ç´æ¥å° request_terminate_timeout设置æ0sã0sçå«ä¹æ¯è®©PHP-CGIä¸ç´æ§è¡ä¸å»è没ææ¶é´éå¶ãèå¦æä½ åä¸å°è¿ä¸ç¹ï¼ä¹å°± æ¯è¯´ä½ çPHP-CGIå¯è½åºç°æ个BUGï¼æè
ä½ ç宽带ä¸å¤å
足æè
å
¶ä»çåå 导è´ä½ çPHP-CGIåæ»é£ä¹å°±å»ºè®®ä½ ç» request_terminate_timeoutèµä¸ä¸ªå¼ï¼è¿ä¸ªå¼å¯ä»¥æ ¹æ®æå¡å¨çæ§è½è¿è¡è®¾å®ãä¸è¬æ¥è¯´æ§è½è¶å¥½ä½ å¯ä»¥è®¾ç½®è¶é«ï¼20åé-30å éé½å¯ä»¥ãèmax_childrenè¿ä¸ªå¼åæ¯æä¹è®¡ç®åºæ¥çå¢ï¼è¿ä¸ªå¼ååä¸æ¯è¶å¤§è¶å¥½ï¼php-cgiçè¿ç¨å¤äºå°±ä¼å¤ççå¾å¿«ï¼æéç请æ±å°±ä¼å¾å°ã 设置max_childrenä¹éè¦æ ¹æ®æå¡å¨çæ§è½è¿è¡è®¾å®ï¼ä¸è¬æ¥è¯´ä¸å°æå¡å¨æ£å¸¸æ
åµä¸æ¯ä¸ä¸ªphp-cgiæèè´¹çå
åå¨20Må·¦å³ã
æç
§å®æ¹ççæ¡ï¼ææ¥äºç¸å
³çå¯è½ï¼å¹¶ç»åäºç½åççæ¡ï¼å¾åºäºä¸é¢ç解å³åæ³ã
1ãæ¥çphp fastcgiçè¿ç¨æ°ï¼max_childrenå¼ï¼
代ç ï¼netstat -anpo | grep âphp-cgiâ | wc -l
5ï¼åå¦æ¾ç¤º5ï¼
2ãæ¥çå½åè¿ç¨
代ç ï¼topè§å¯fastcgiè¿ç¨æ°,åå¦ä½¿ç¨çè¿ç¨æ°çäºæé«äº5个ï¼è¯´æéè¦å¢å ï¼æ ¹æ®ä½ æºå¨å®é
ç¶åµèå®ï¼
3ãè°æ´/usr/local/php/etc/php-fpm.conf çç¸å
³è®¾ç½®
<value name=âmax_childrenâ>10</value><value name=ârequest_terminate_timeoutâ>60s</value>max_childrenæå¤10个è¿ç¨ï¼æç
§æ¯ä¸ªè¿ç¨20MBå
åï¼æå¤200MBãrequest_terminate_timeoutæ§è¡çæ¶é´ä¸º60ç§ï¼ä¹å°±æ¯1åéã
温馨提示:答案为网友推荐,仅供参考