一、背景
線上提供的一個根據查詢條件返回json數據的查詢接口,解析該接口返回的json數據報錯,錯誤信息如下:
net.sf.json.JSONException: Unterminated string at character 24106 of
單獨curl該接口後發現該接口返回的json數據不完整,被截斷了。
二、問題解決
Google nginx 返回的json不全,嘗試以下兩步可解決該問題。
1、調整Nginx緩存
server {
...
proxy_buffers 16 1024k;
proxy_buffer_size 1024k;
...
}
調整緩存後,大部分返回長json被截斷的問題被解決,但仍偶爾報錯,原因仍然爲返回的json被截斷。
2、修改Nginx數據緩存目錄權限
嘗試第一種方式後,仍偶爾報錯,此時查看Nginx error.log日誌發現有如下內容:
2019/04/08 13:26:25 [crit] 17724#0: *31140934 open() "/home/admin/your_nginx_cache_folder/data/uwsgi_temp/9/00/0000000009" failed (13: Permission denied) while reading upstream, client: your_client_ip, server: localhost, request: "POST your_api HTTP/1.1", upstream: "uwsgi://127.0.0.1:8000", host: "your_service_ip:8080"
原來原因如下:
nginx對於小的反向代理請求是使用內存作中轉,對於稍微大一點的,是使用臨時文件系統來做中轉,但是使用文件系統來中轉的時候沒有權限。
此時修改中轉用文件目錄的權限即可,對於爲何Nginx沒有讀取緩存文件目錄的權限,可能是某次啓動Nginx使用的用戶不對導致的。
至此,問題解決。
解決此問題也說明了查看日誌的重要性,如果沒有查看到Nginx的報錯日誌,該問題也不會得到根本解決。