2016-02-17 42 views
2

我希望你們都能幫助我一點。我花了大約7個小時試圖找到答案,並嘗試了很多東西。PHP/MySQL文件/數據庫同步的神祕503錯誤

我有一個PHP腳本,用於在兩臺服務器之間同步文件/數據庫數據。在你們問之前,這個過程對於這個項目是必要的,並且必須保持原樣。

該腳本基本上查找目錄中過去72小時內發生更改的所有文件,並將它們SFTP到另一個服務器,替換所需的任何文件。然後,它創建後備數據庫的副本,刪除某些表/行,更改其他數據並導出.sql文件。然後將這個.sql文件SFTP到其他服務器,並在第二臺服務器上的一個文件上調用一個include文件,該文件導入.sql文件,用更新的數據替換現有的數據庫。

所有這一切工作的...

的問題是,無論什麼樣的變化我對Apache的配置腳本總是30秒後給了我一個503錯誤,每次(30.02秒和30.04之間,以確切地說)。但是,PHP腳本將繼續運行,並在約60-61秒內成功完成所有操作,包括寫入日誌文件。 Apache日誌中沒有任何內容引用任何類型的錯誤。

我檢查了所有使用的.conf文件,沒有提到30秒的超時。在我的httpd.conf我已經添加了這些行:

TimeOut 300 
ProxyTimeOut 300 
KeepAlive On 
KeepAliveTimeout 60 

我也對PHP腳本的max_execution_time和memory_limit的設置爲120和2048M,相應的,以確保在測試過程中排除這一可能性。

頁面應該向用戶顯示一條成功消息,並報告更改/更新的內容。然而,503錯誤,我無法做到這一點。所以我期望擺脫這種503限​​制,以便它可以正確顯示最終的同步結果。我也不是熟悉Apache的配置是誠實的,所以任何幫助/想法是什麼會導致這/看看會是很多讚賞!

在此先感謝!

回答

1

嘗試很多很多的事情後,我能找出具體原因是什麼。原來這是由代理超時造成的。 Here is a link to the answer that explained what to add to the vhost conf file.

總之,這裏是未來遊客的答案:

httpd的最新版本,並mod_proxy_fcgi你可以簡單地添加 超時=到ProxyPassMatch行的結尾,例如:

ProxyPassMatch ^/(.+\.php.*)$ fcgi://127.0.0.1:9000/<docroot>/$1 timeout=1800 

對於舊版本,這是一個有點複雜, 如:

<Proxy fcgi://127.0.0.1:9000> 
    ProxySet timeout=1800 
</Proxy> 
ProxyPassMatch ^/(.+\.php.*)$ fcgi://127.0.0.1:9000/<docroot>/$1 
+0

感謝您的分享 –