返回xml過長時被nginx截斷的解決辦法
問題描述:
通過網頁獲取資料,資料格式為xml。當xml比較短時,可以正常獲取資料。但是xml長度過長時不能正常獲取資料,通過觀察返回資料的源**,發現xml被截斷了。
伺服器環境:centos 6.5,nginx 1.0.15,php 5.3.3
解決方法:
對比發現,使用apache代替nginx的時候可以正常獲取長的xml資料。確定問題出現在nginx的配置上。
檢視ngnix日誌(yum安裝預設目錄:/var/log/nginx/)發現問題所在。
問題出現在此時nginx臨時向/var/lib/nginx/tmp/目錄下寫入了臨時資料,而執行nginx的使用者沒有該目錄的寫入許可權。
解決該許可權問題後問題解決。
另外php.ini nginx 對請求大小的配置也可能有影響,http協議中使用content-length這個頭來告知資料的長度。
過php請求介面時發現介面的內容輸出沒有完整的返回整個資料,早上只修改了nginx api_metrics外掛程式裡的計算response大小的**,觀察日誌發現一條:
該目錄無法被nginx的nobody賬戶訪問,那就設定許可權:
sudo chown -r nobody:nobody /usr/local/nginx/proxy_temp/
重新整理瀏覽器,一切正常。
出現這個問題的原因是nginx裡對於小的反向**請求是使用記憶體作中轉,對於稍微大一點的,是使用檔案系統來做中轉。
然後之前除錯nginx外掛程式的時候,為了方便訪問日誌等資料就在root下除錯的,部分子目錄被nginx刪除後重建,owner變了,所以正式的nginx反而不能訪問了。
ps:要先用命令查一下50上的臨時資料夾在那個地方,對應的許可權是什麼 ,不同環境的路徑是不一樣的
xml過長時被nginx截斷
通過網頁獲取資料,資料格式為xml。當xml比較短時,可以正常獲取資料。但是xml長度過長時不能正常獲取資料,通過觀察返回資料的源 發現xml被截斷了。對比發現,使用apache代替nginx的時候可以正常獲取長的xml資料。確定問題出現在nginx的配置上。檢視ngnix日誌 yum安裝預設目錄 ...
PHP返回內容過長時被nginx截斷的解決辦法
檢視了html源 發現html源 被截斷了。因此,導致網頁內容顯示不全。之後的整個分析過程繞了一大圈,即是tcpdump,又是用tcpflow進行網路包分析。最後,還是從nginx的錯誤日誌中發現了端倪。在nginx的錯誤日誌中發現如下資訊 2016 03 29 06 08 10 crit 7042...
PHP返回內容過長時被nginx截斷的解決辦法
檢視了html源 發現html源 被截斷了。因此,導致網頁內容顯示不全。之後的整個分析過程繞了一大圈,即是tcpdump,又是用tcpflow進行網路包分析。最後,還是從nginx的錯誤日誌中發現了端倪。在nginx的錯誤日誌中發現如下資訊 2016 03 29 06 08 10 crit 7042...