這個坑也搞了好久, 現記錄下.
1.首先要明確504錯誤是nginx配置問題,所以調試php等其他配置是木有用的.這樣目標已經縮小很多了.
2.其次, 明確這個nginx是做什麼, 一般有兩種:
a. 只是將請求代理轉發, 在配置我們能看到proxy_pass ip 字眼
b. 將請求通過fastcgi轉發給php-fpm, 在配置有fastcgi_pass ip:port 字眼
3. 最後,對於以上不同的分類對症配置:
兩種都是在nginx配置文件中的 http塊下增加如下:
a情況加上 : proxy_read_timeout 3600s;
b情況加上: fastcgi_read_timeout 3600s;
其實很多網上說a情況還要再加上 proxy_connect_timeout 3600s; proxy_send_timeout 3600s;配置
b情況要再加上fastcgi_connect_timeout 3600s; fastcgi_read_timeout 3600s; 配置
但是實質上最關鍵的是read_timeout參數, 其他兩個一般是不怎麼會超時, 可配可不配.
note: 有些情況一條請求鏈路上可能有多層nginx, 所以必定會a,b兩種情況都存在的情況,具體哪個nginx是哪種情況,對應的nginx配置認證看下就知道了.
做了如上配置後,nginx504錯誤是可以解決的, 但如果在以上問題解決完後,xdebug出現過了一段時間就會自動斷開並跳出調試的問題.因爲是nginx+php-fpm模式, 那麼這個問題只能是php的問題.這個是php的腳本執行超時限制. 如果你用的fpm模式, 那麼只要修改php-fpm的配置, 找到其中request_terminate_timeout字段設置一個較大的值, 或者設置爲0表示永不超時,fpm的默認值就是永不超時.然後重啓你pph-fpm以便生效修改的配置.