記錄一次nginx502/504問題解決過程


最近自己在阿里雲購買有段時間的服務器,一訪問就出現nginx 504 Gateway Time-out。

想起以前是可以訪問的,細想最近改動的配置應該不會涉及到這塊啊。

就網上各種百度谷歌,最后終於找到解決辦法,這里記錄一下。

 

Nginx 504 Gateway Time-out的含義是所請求的網關沒有請求到,簡單來說就是沒有請求到可以執行的PHP-CGI。

 

nginx.conf配置如下:

1 location ~ \.php$ {
2     root html;
3     fastcgi_pass 127.0.0.1:9000;
4     fastcgi_index index.php;
5    fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
6    include fastcgi_params;
7 }

查看80端口使用情況,一切正常:

再看9000端口,顯示沒有被占用,說明nginx配置沒起作用:

 

 從網上查詢得知,Nginx和PHP-FPM的進程間通信有兩種方式,一種是TCP,一種是UNIX Domain Socket,而我當前用的是第一種。

其中TCP是IP加端口,可以跨服務器.而UNIX Domain Socket不經過網絡,只能用於Nginx跟PHP-FPM都在同一服務器的場景.用哪種取決於你的PHP-FPM配置:
方式1:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0.0.1:9000;
方式2:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock;
其中php-fpm.sock是一個文件,由php-fpm生成

UNIX Domain Socket可用於兩個沒有親緣關系的進程,是目前廣泛使用的IPC機制,比如X Window服務器和GUI程序之間就是通過UNIX Domain Socket通訊的.這種通信方式是發生在系統內核里而不會在網絡里傳播.UNIX Domain Socket和長連接都能避免頻繁創建TCP短連接而導致TIME_WAIT連接過多的問題.對於進程間通訊的兩個程序,UNIX Domain Socket的流程不會走到TCP那層,直接以文件形式,以stream socket通訊.如果是TCP Socket,則需要走到IP層,對於非同一台服務器上,TCP Socket走的就更多了。

UNIX Domain Socket:
Nginx <=> socket <=> PHP-FPM
TCP Socket(本地回環):
Nginx <=> socket <=> TCP/IP <=> socket <=> PHP-FPM
TCP Socket(Nginx和PHP-FPM位於不同服務器):
Nginx <=> socket <=> TCP/IP <=> 物理層 <=> 路由器 <=> 物理層 <=> TCP/IP <=> socket <=> PHP-FPM 

再看php-fpm.conf中配置,果然也是在監聽9000端口:

listen = 127.0.0.1:9000

 

現在要做的是更改nginx.conf的配置,並新增fastcig_buffers更新request到來時nginx設置的緩沖區大小:

        location ~  \.php$
        {
                root html;
                #fastcgi_pass 127.0.0.1:9000;
                fastcgi_pass unix:/tmp/php-fpm.sock;
                fastcgi_index index.php;
                fastcgi_buffers      4 128K;
                fastcgi_buffer_size  128K;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

同時將php-fpm.conf中配置修改:

;listen = 127.0.0.1:9000
listen = /tmp/php-fpm.sock

分別重啟nginx和php-fpm后,輸入地址回車,久違的echo輸出終於出現:

配置更改調試主要參考一下鏈接:

https://blog.csdn.net/ucmir183/article/details/80240112

http://blog.51cto.com/13447608/2166462

https://www.cnblogs.com/php-linux/p/5962561.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM