1. 概述
本文匯總使用 Nginx 程式中常見報錯及解決方案。
2. 範例
2.1 Cannot read property 'length' of undefined
問題描述:
當使用者不想要曝光自身伺服器的地址時,通常會使用 Nginx 反向代理伺服器,使用程式中出現請求報錯,如下圖所示:
原因分析:
該問題是由於 FineBI 預設請求埠號為 48888(單機)或者 48889(叢集),若 Nginx 中配置的埠號不為該埠,則無法將資訊轉發到正確的請求埠上,因此需要在 FineBI 中將資訊請求埠修改為與 nginx 中配置的一致。
解決方案:
1)連結 FineDB 資料庫,在資料庫表 fine_conf_entity 加一下欄位(或者改一下)WebSocketConfig.requestPort,將其修改為與 Nginx 中配置的埠一致即可。比如 Nginx 中的埠配置為 8089 ,則我們可修改WebSocketConfig.requestPort為 8089 ,如下圖所示:
2)修改完成後重啟 FineBI 即可。
2.2 permission denied
問題描述:
叢集環境,有線網路正常,無線網路登入頁面空白,但是節點可以正常登入。
日誌檔案如下圖所示:
原因分析:
Nginx 無權限讀取資料流。
解決方案:
修改 nginx.conf ,將使用者組改成 root ,並且取消註釋。如下圖所示:
2.3 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 模組,請參見 Tomcat配置SSL證件實現HTTPS存取
2.4 Nginx 編譯缺乏依賴
問題描述:
報錯:SSL modules require the OpenSSL library
如下圖所示:
原因分析:
Nginx 在編譯一些模組時,需要三個依賴庫:PCRE、zlib、OpenSSL
解決方案:
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
2.5 Nginx 入口存取平台空白
問題描述:
Nginx 入口存取平台空白,日誌顯示寫快取檔案失敗,如下圖所示:
解決方案:
如果啟動 Nginx 的使用者有對應目錄讀寫權限,則可能是磁碟空間不足引起,可用df -h指令查看。
nginx.conf 中關閉 acces.log ,避免日誌過大,把磁碟空間佔完。
2.6 叢集環境/伺服器經常出現卡慢
問題描述:
叢集環境,伺服器經常出現卡慢。
解決方案:
由於磁碟空間不足,nginx.conf 中關閉 acces.log ,避免日誌過大,把磁碟空間佔完。
2.7 Nginx 配置外網後埠丟失
問題描述:
使用者做了 Web 叢集,現在做了外網映射,存取 URL 能登入到登入頁面,但是點選登入之後,映射的埠號不見了,跳轉之後就直接報 404 。
原因分析:
登入跳轉後,host 變動,導致埠丟失。
解決方案:
Nginx 修改 head 的 host 欄位(proxy_set_header Host)為實際外部存取的地址,如下圖所示:
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 413 (Request Entity Too Large)
問題描述:
部署了叢集,使用 Nginx 進行負載均衡。擁有匯出權限的使用者全局匯出 Excel/Pdf 時提示匯出無權限,匯出失敗。透過 F12 查看前端報錯,發現報錯:413 (Request Entity Too Large) 。如下圖所示:
原因分析:
Nginx 中設定了預設檔案大小限制,若上傳的檔案超多這個預設設定的大小,就會被 Nginx 限制而無法上傳。
解決方案:
修改 Nginx 中檔案大小限制。
1)開啟 Nginx 配置檔案 nginx.conf,路徑一般是:%nginx%/nginx.conf
2)修改該檔案中的 client_max_body_size 對應值,該值對應 Nginx 允許最大上傳的大小,如下圖所示:
注:這個參數的作用為設定最大允許的用戶端請求主體大小,該值大小具體多少根據業務需求調整。
3)儲存後重啟 Nginx ,問題解決。