Nginx 常見報錯及解決方案

1. 概述

本文匯總使用 nginx 程式中常見報錯及解決方案。

2. 範例

2.1 permission denied

問題描述:

叢集環境,有線網路正常,無線網路登入頁面空白,但是節點可以正常登入。

日誌檔案如下圖所示:

11.png

原因分析:

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

如下圖所示:

1603096371969177.png

原因分析:

nginx 在編譯一些模組時,需要三個依賴庫:prce、zlib、openssl

解決方案:


yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

2.4 nginx 入口存取平台空白

問題描述:

nginx 入口存取平台空白,日誌顯示寫快取檔案失敗,如下圖所示:

13.png

解決方案:

如果啟動 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)為實際外部存取的地址,如下圖所示:

14.png

2.7 nginx 分塊請求異常

問題描述:

Linux 伺服器叢集,重新整理 frm 範本,會出現部分模組載入不出的情況,每次載入不出的模組都是隨機的。Dec.socket.connected傳回 true ,但是前端有關於 38888 和 38889 的報錯。

原因分析:

使用者 nginx.conf 預設是用的是http1.0,tcp 連結生命週期不夠,導致一些耗時較長的圖表請求逾時。

解決方案:

nginx 配置 http1.1 和 connection 頭置空,回应分塊請求。如下圖所示:

15.png

2.8 nginx 配置無法存取 css 和 js 等靜態資源

問題描述:

存取類似localhost:8080\WebReport\ReportServer,頁面空白,控制台報錯:Failed to load resource:the server responded with a status of 404(not Found)

16.png

原因分析:

nginx入口:http://localhost/reportService/WebReport/decision

Tomcat:http://ip:port/WebReport/decision

使用者在 nginx 在匹配/reportService轉發給後端 Tomcat 處理,而後端傳回資源請求時不帶/reportService,導致重定向到了 nginx 靜態資源路徑,存取報錯。

nginx配置:

1603098476510572.png

18.png

解決方案:

方案一:nginx 層面

攔截/WebReport/decision,重定向為/reportService/WebReport/decision

需要注意以下兩點:

  • rewrite 是 301 重定向,return 是 307 重定向。

  • server_name 為 localhost 時,透過 127.0.0.1 存取,重定向後會有跨域報錯,ajax error。

19.png

方案二:Tomcat 層面

設定虛擬目錄,使得 tomcat url 變為:http://ip:port/reportService/WebReport/decision

具體步驟

(1)將工程移出webapp,避免重複載入;

(2)修改tomcat conf/server.xml,docbase為工程絕對路徑

20.png

(3)修改nginx.conf,去掉斜槓

注:帶斜槓時,是將/reportService/後面的請求轉發給後面。

21.png

2.9 範本掛載到決策平台不顯示

問題描述:

範本直接在設計器預覽是正常的;掛載到叢集地址,範本空白;掛載到叢集節點,範本正常展示。

原因分析:

外網有一個轉發工具,轉發到了設定在內網的 nginx ,然後透過代理到後台節點,內網存取也會經過 nginx 轉發,但是由於轉發工具的埠與 nginx 埠不一致,並且沒有把外網地址的 port 正確傳入,導致最後拿到的是 nginx 埠號,但是內網是直接經過 nginx 了,所以可以正常展示埠號

解決方案:

nginx 配置的埠監聽直接改成與外網埠號一致,這樣就避免了此類 port 不一致的情況。

附件列表


主題: 部署集成
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

8s后關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙

反饋已提交

網絡繁忙