1. 概述
本文匯總使用 nginx 程式中常見報錯及解決方案。
2. 範例
2.1 permission denied
問題描述:
叢集環境,有線網路正常,無線網路登入頁面空白,但是節點可以正常登入。
日誌檔案如下圖所示:
原因分析:
nginx 無權限讀取資料流。
解決方案:
修改 nginx.conf ,將使用者組改成 root ,並且取消註釋。如下圖所示:
2.2 https protocol requires SSL
問題描述:
啟動時報錯:
nginx:[emerg]https protocol requires SSL support in /usr/nginx/conf/nginx.conf:39
原因分析:
nginx.conf 中配置了 https ,但 nginx 未配置 ssl 模組。
解決方案:
給 nginx 增加 ssl 模組,請參見 配置 SSL 憑證實現 HTTPS 存取
2.3 nginx 編譯缺乏依賴
問題描述:
報錯:SSL modules require the OpenSSL library
如下圖所示:
原因分析:
nginx 在編譯一些模組時,需要三個依賴庫:prce、zlib、openssl
解決方案:
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
2.4 nginx 入口存取平台空白
問題描述:
nginx 入口存取平台空白,日誌顯示寫快取檔案失敗,如下圖所示:
解決方案:
如果啟動 nginx 的使用者有對應目錄讀寫權限,則可能是磁碟空間不足引起,可用df -h指令查看。
nginx.conf 中關閉 acces.log ,避免日誌過大,把磁碟空間佔完。
2.5 叢集環境/伺服器經常出現卡慢
問題描述:
叢集環境,伺服器經常出現卡慢。
解決方案:
由於磁碟空間不足,nginx.conf 中關閉 acces.log ,避免日誌過大,把磁碟空間佔完。
2.6 nginx 配置外網後埠丟失
問題描述:
使用者做了 Web 叢集,現在做了外網映射,存取 URL 能登入到登入頁面,但是點選登入之後,映射的埠號不見了,跳轉之後就直接報 404 。
原因分析:
登入跳轉後,host 變動,導致埠丟失。
解決方案:
nginx 修改 head 的 host 欄位(proxy_set_header Host)為實際外部存取的地址,如下圖所示:
2.7 nginx 分塊請求異常
問題描述:
Linux 伺服器叢集,重新整理 frm 範本,會出現部分模組載入不出的情況,每次載入不出的模組都是隨機的。Dec.socket.connected傳回 true ,但是前端有關於 38888 和 38889 的報錯。
原因分析:
使用者 nginx.conf 預設是用的是http1.0,tcp 連結生命週期不夠,導致一些耗時較長的圖表請求逾時。
解決方案:
nginx 配置 http1.1 和 connection 頭置空,回应分塊請求。如下圖所示:
2.8 nginx 配置無法存取 css 和 js 等靜態資源
問題描述:
存取類似localhost:8080\WebReport\ReportServer,頁面空白,控制台報錯:Failed to load resource:the server responded with a status of 404(not Found)
原因分析:
nginx入口:http://localhost/reportService/WebReport/decision
Tomcat:http://ip:port/WebReport/decision
使用者在 nginx 在匹配/reportService轉發給後端 Tomcat 處理,而後端傳回資源請求時不帶/reportService,導致重定向到了 nginx 靜態資源路徑,存取報錯。
nginx配置:
解決方案:
方案一:nginx 層面
攔截/WebReport/decision,重定向為/reportService/WebReport/decision
需要注意以下兩點:
rewrite 是 301 重定向,return 是 307 重定向。
server_name 為 localhost 時,透過 127.0.0.1 存取,重定向後會有跨域報錯,ajax error。
方案二:Tomcat 層面
設定虛擬目錄,使得 tomcat url 變為:http://ip:port/reportService/WebReport/decision
具體步驟
(1)將工程移出webapp,避免重複載入;
(2)修改tomcat conf/server.xml,docbase為工程絕對路徑
(3)修改nginx.conf,去掉斜槓
注:帶斜槓時,是將/reportService/後面的請求轉發給後面。
2.9 範本掛載到決策平台不顯示
問題描述:
範本直接在設計器預覽是正常的;掛載到叢集地址,範本空白;掛載到叢集節點,範本正常展示。
原因分析:
外網有一個轉發工具,轉發到了設定在內網的 nginx ,然後透過代理到後台節點,內網存取也會經過 nginx 轉發,但是由於轉發工具的埠與 nginx 埠不一致,並且沒有把外網地址的 port 正確傳入,導致最後拿到的是 nginx 埠號,但是內網是直接經過 nginx 了,所以可以正常展示埠號
解決方案:
nginx 配置的埠監聽直接改成與外網埠號一致,這樣就避免了此類 port 不一致的情況。