2015-12-01 501 views
1

我知道,在/etc/php5/fpm/php.ini有一個叫default_socket_timeout設置這實際上終止那些還沒有被推到他們的特定時間內的響應連接。 我正在運行一個基於RabbitMQ的AJAX「偵聽器」,它打開一個連接並等待它收到響應,如果有的話,然後重新啓動。將default_socket_timeout設置爲無窮大?

的問題是,它可以不接收時間長的響應 - 有時甚至高達2小時。當發生這種情況時,聽衆因收到504 Gateway Timeout而死亡。我知道平均負載 - 這是一個內部系統,只有某個辦公室才能訪問 - 所以太多的套接字不會成爲問題。 有沒有辦法將default_socket_timeout設置爲「無限制」?我試過default_socket_timeout=0,但這只是將其恢復爲60秒的默認值。

+0

你試過'-1'?如果這不起作用,您也可以將其設置爲「(1 << 31)-1」(2147483647),超時時間爲68年。順便說一句,我在[fsockopen](http://php.net/manual/en/function.fsockopen.php)這裏讀到'default_socket_timeout'只適用於建立連接;讀/寫超時它建議使用[stream_set_timeout(http://php.net/manual/en/function.stream-set-timeout.php) – Kenney

+0

@Kenney謝謝,我發現,這個設置是不相關的我根本問題,看我的答案。不管怎麼說,還是要謝謝你! –

+1

啊,你解決了,太棒了! – Kenney

回答

1

原來我Gateway Timeout問題是不相關的default_socket_timeout可言。我最終把fastcgi_read_timeout 3000;放在我的nginx PHP位置塊中,並解決了這個問題。這是我的配置如何結束:

location ~ \.php$ { 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 
    fastcgi_pass unix:/var/run/php5-fpm.sock; 
    fastcgi_index index.php; 
    include fastcgi_params; 
    fastcgi_read_timeout 3000; 
} 

這讓我有一個長期運行的請求,不會在60秒後中斷。

3

爲了完整起見:

default_socket_timeout=-1 

禁用超時....