問題
最近請求一些接口,發現瀏覽器端拿到的JSON返回數據被截斷,前端無法解析。
分析
Java后端沒有報錯,一般就是反向代理的問題,Nginx配置有很大的嫌疑。
- 檢查nginx的error_log,發現確實nginx報錯:
2020/07/28 14:13:49 [crit] 113301#0: *45739 open() "/opt/work/nginx/proxy_temp/6/10/0000000106" failed (13: Permission denied) while reading upstream, client: x.x.x.y, server: x.x.x.x, request: "GET /api/some/address?startTime=1595312026524&endTime=1595916826524&timeUnit=5 HTTP/1.0", upstream: "http://x.x.x.x:8500/api/some/address?startTime=1595312026524&endTime=1595916826524&timeUnit=5", host: "api.slankka-inc.com", referrer: "http://api.slankka-inc.com/api/some/view"
查看目錄權限發現:
/opt/work/nginx
drwxrwxr-x 11 hue hue 4.0K Oct 31 2019 .
drwxrwxr-x 15 hue hue 4.0K Aug 2 2019 ..
drwx------ 2 nobody hue 4.0K Mar 21 2019 client_body_temp
drwxrwxr-x 2 hue hue 4.0K Jun 17 09:56 conf
drwx------ 2 nobody hue 4.0K Feb 19 2019 fastcgi_temp
drwxr-xr-x 2 hue hue 4.0K Feb 19 2019 html
drwxrwxr-x 2 hue hue 4.0K Feb 19 2019 logs
-rw-r--r-- 1 hue hue 6 Feb 19 2019 nginx.pid
drwx------ 12 nobody hue 4.0K Feb 20 2019 proxy_temp
drwxrwxr-x 2 hue hue 4.0K Feb 19 2019 sbin
drwx------ 2 nobody hue 4.0K Feb 19 2019 scgi_temp
drwx------ 2 nobody hue 4.0K Feb 19 2019 uwsgi_temp
proxy_temp目錄的owner是 nobody,啟動進程的用戶為hue。
- 這類問題應該比較常見,需要網上搜索查找原因
這里選取四篇文章
Nginx返回大長度的JSON數據被截斷 這篇是解決思路
返回值過長時被nginx截斷的解決辦法 這篇是Nginx沒有權限的具體原因
nginx進程屬主問題討論 這篇是用戶為nobody現象的分析
nginx的proxy_temp目錄權限為nobody nginx -t操作 這篇是根本原因
解決
- 將目錄屬主全部改為 hue。 執行:
chown -R hue:hue /opt/work/nginx
- root用戶下,慎用nginx -t