Nginx 代理配置導致瀏覽器應用網頁頁面加載失敗的分析與解決

Nginx 代理配置導致應用頁面加載失敗的分析與解決

前期部署信息:

部署DM數據庫DEM時,配置了nginx代理,conf配置內容如下:

    charset utf-8;client_max_body_size 128M;listen 4567;server_name 192.168.1.156;root /opt/h5/;index index.html;location /tomcat {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 隱藏 /tomcat 路徑rewrite ^/tomcat(.*)$ $1 break;}

問題現象

我遇到了一個問題:直接訪問http://192.168.1.156:8080/dem/是正常的,但是訪問 http://192.168.1.156:4567/tomcat/dem/ 時,頁面卻無法正常顯示,表現為一個不停轉圈的加載狀態,無法進入登錄界面。

在這里插入圖片描述
或者報錯“獲取系統屬性失敗!加密響應失敗!”

分析原因

經過多次排查和測試,我發現問題主要出在 Nginx 的代理配置上,可能的原因包括以下幾點:

  1. 資源路徑不一致
    應用中的 JavaScript、CSS 等靜態資源可能使用了相對路徑或絕對路徑。在代理過程中,如果 Nginx 沒有正確映射這些路徑,瀏覽器會無法加載資源,導致頁面卡在加載狀態。

  2. 路徑重寫配置問題
    我嘗試使用 rewrite 指令隱藏代理路徑(如 /tomcat),但與 proxy_pass 結合使用時,可能會導致請求 URL 被錯誤解析,后端應用接收到的路徑與預期不符,從而引發加載失敗。

  3. 代理轉發未完全適配應用需求
    如果應用內部的 AJAX 請求或其他邏輯依賴特定的 URL 路徑,而 Nginx 的代理配置沒有正確處理這些請求,可能會導致功能異常。

處理方法

經過反復調整,我最終通過以下兩種 Nginx 配置方案成功解決了問題:

方法一:精確代理到 /dem/ 路徑

server {charset utf-8;client_max_body_size 128M;listen 4567; # 監聽 4567 端口,便于局域網訪問server_name 192.168.1.156;root /opt/h5/;index index.html;location /dem/ {                                #修改了這一行proxy_pass http://127.0.0.1:8080/dem/;               #修改了這一行proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 嘗試隱藏 /tomcat 路徑(可選,未完全生效時可移除)rewrite ^/tomcat(.*)$ $1 break;}
}
  • 配置說明
    • 通過 location /dem/ 將請求直接代理到 http://127.0.0.1:8080/dem/,保持路徑一致性。
    • 添加了基本的代理頭信息(如 HostX-Real-IP 等),確保后端能正確識別請求來源。
    • rewrite 指令用于隱藏 /tomcat 路徑,但測試發現它對最終成功訪問并非必要,可根據需求保留或移除。

方法二:代理根路徑到 Tomcat

server {listen 7890;server_name 192.168.1.156;location / {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}
  • 配置說明
    • 將所有請求代理到 http://127.0.0.1:8080/,適用于 Tomcat 應用部署在根路徑下的場景。
    • 這種方式簡單直接,減少了路徑匹配的復雜性,適合不需要額外路徑前綴的情況。

結果

經過以上配置調整,我成功實現了目標:

  • 方法一:訪問 http://192.168.1.156:4567/dem/,頁面正常加載并跳轉到登錄界面。
  • 方法二:訪問 http://192.168.1.156:7890/dem/,同樣可以正常訪問應用,頁面加載和功能運行無異常。

兩種方法都解決了頁面加載失敗的問題,具體選擇取決于你的應用部署方式和訪問需求。

總結

通過這次排查和解決,我總結了以下幾點經驗,供其他開發者參考:

  1. 保持路徑一致性
    在配置 proxy_pass 時,確保前端請求的路徑與后端應用的實際路徑一致,避免因路徑不匹配導致資源加載失敗。

  2. 謹慎使用路徑重寫
    rewrite 雖然可以隱藏代理路徑,但與 proxy_pass 結合使用時容易出錯。如果不需要復雜的路徑轉換,建議直接使用簡單代理。

  3. 調試技巧
    在排查類似問題時,可以通過瀏覽器開發者工具(F12)檢查網絡請求,查看資源加載是否失敗,或查看 Nginx 的 error_log 日志定位問題。

希望這篇文章能幫助到遇到類似問題的朋友!如果有其他疑問,歡迎在評論區交流。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72116.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72116.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72116.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows 11【1001問】查看Windows 11 版本的18種方法

隨著技術的飛速發展,操作系統作為連接硬件與軟件的核心橋梁,其版本管理和更新變得尤為重要。對于用戶而言,了解自己設備上運行的具體Windows 11版本不僅有助于優化系統性能,還能確保安全性和兼容性。然而,不同場景和需…

企業jsapi_ticket,java舉例

在企業微信開發中,使用 Java 獲取 jsapi_ticket 并生成簽名的步驟如下。以下是完整的 Java 示例代碼。 1. 獲取 jsapi_ticket 的流程 獲取 access_token。 使用 access_token 獲取 jsapi_ticket。 使用 jsapi_ticket 生成簽名(signature)。…

【Godot4.3】自定義簡易菜單欄節點ETDMenuBar

概述 Godot中的菜單創建是一個復雜的災難性工作,往往無從下手,我也是不止一次嘗試簡化菜單的創建。 從自己去年的發明“簡易樹形數據”用于簡化Tree控件獲得靈感,于是嘗試編寫了用于表示菜單數據的EasyMenuData類,以及對應的純文…

大數據與金融科技:革新金融行業的動力引擎

大數據與金融科技:革新金融行業的動力引擎 在今天的金融行業,大數據與金融科技的結合正在以驚人的速度推動著金融服務的創新與變革。通過精準的數據分析與智能化決策,金融機構能夠更高效地進行風險管理、客戶服務、資產管理等一系列關鍵操作…

二、IDE集成DeepSeek保姆級教學(使用篇)

各位看官老爺好,如果還沒有安裝DeepSeek請查閱前一篇 一、IDE集成DeepSeek保姆級教學(安裝篇) 一、DeepSeek在CodeGPT中使用教學 1.1、Edit Code 編輯代碼 選中代碼片段 —> 右鍵 —> CodeGPT —> Edit Code, 輸入自然語言可編輯代碼,點擊S…

Rohm發布TOLL封裝650V GaN HEMT,引領汽車用GaN器件大規模生產新浪潮

Rohm震撼發布TOLL封裝650V GaN HEMT,引領汽車用GaN器件大規模生產新浪潮。在創新的TOLL(TO LeadLess)封裝技術的懷抱中,Rohm精心孕育出650V GaN HEMT這一瑰寶,此技術正如一股強勁東風,日益吹拂于高功率處理…

Spring Boot 3.x 基于 Redis 實現郵箱驗證碼認證

文章目錄 依賴配置開啟 QQ 郵箱 SMTP 服務配置文件代碼實現驗證碼服務郵件服務接口實現執行流程 依賴配置 <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr…

PHP的學習

PHP的基礎前提【HTML、CSS】 第一步先進行VS cood的下載&#xff1a;Visual Studio Code - Code Editing. Redefined 【選擇適合自己的電腦的版本eg:我就是64位的win】

XML 編輯器:全面指南與最佳實踐

XML 編輯器:全面指南與最佳實踐 引言 XML(可擴展標記語言)編輯器是處理XML文件的關鍵工具,對于開發人員、系統管理員以及任何需要處理XML數據的人來說至關重要。本文將全面介紹XML編輯器的概念、功能、選擇標準以及最佳實踐,旨在幫助讀者了解如何選擇和使用合適的XML編輯…

《Effective Objective-C》閱讀筆記(下)

目錄 內存管理 理解引用計數 引用計數工作原理 自動釋放池 保留環 以ARC簡化引用計數 使用ARC時必須遵循的方法命名規則 變量的內存管理語義 ARC如何清理實例變量 在dealloc方法中只釋放引用并解除監聽 編寫“異常安全代碼”時留意內存管理問題 以弱引用避免保留環 …

ORM Bee V2.5.2.x 發布,支持 CQRS; sql 性能分析;更新 MongoDB ORM分片

Bee, 一個具有分片功能的 ORM 框架. Bee Hibernate/MyBatis plus Sharding JDBC Jpa Spring data GraphQL App ORM (Android, 鴻蒙) 小巧玲瓏&#xff01;僅 940K, 還不到 1M, 但卻是功能強大&#xff01; V2.5.2 (2025?LTS 版) 開發中... **2.5.2.1 新年 ** 支持 Mong…

springboot之HTML與圖片生成

背景 后臺需要根據字段動態生成HTML&#xff0c;并生成圖片&#xff0c;發送郵件到給定郵箱 依賴 <!-- freemarker模板引擎--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifa…

《從0到1:用Python在鴻蒙系統開發安防圖像分類AI功能》

在人工智能與移動應用深度融合的當下,類目標簽AI功能成為眾多行業提升效率和用戶體驗的關鍵技術。本文聚焦于HarmonyOS NEXT API 12及以上版本,以圖像分類在智能家居安防領域的應用為例,為開發者詳細闡述如何利用Python開發類目標簽AI功能,助力鴻蒙技術在該領域的創新應用。…

【AD】3-10 原理圖PDF導出

文件—智能PDF 多頁原理圖導出 導出設置時選擇工程&#xff0c;可自行選擇導出一頁或多頁原理圖&#xff0c;一般PCB不用導出

【deepseek第一課】從0到1介紹 采用ollama安裝deepseek私有化部署,并實現頁面可視化

【deepseek第一課】從0到1介紹 采用ollama安裝deepseek私有化部署,并實現頁面可視化 1. ollama安裝1.1 linux安裝1.2 windows安裝2. deepSeek支持的7種蒸餾模型2.1 蒸餾模型介紹2.2 7種模型特點2.3 安裝deepseek-r1:14b模型3. openwebui圖形化頁面安裝4. java連接大模型的三…

【在線用戶監控】在線用戶查詢、強退用戶

文章目錄 在線用戶監控在線用戶監控API(RestController)當前在線會話在線用戶查詢強退用戶知識擴展: JwtJwtTokenUtil生成jwt解析token登錄授權的實現:json web token + redis + springboot在線用戶監控 在線用戶監控API(RestController) @RestController @Tag(name = &qu…

超詳細,多圖文介紹redis集群方式并搭建redis偽集群

超詳細&#xff0c;多圖文介紹redis集群方式并搭建redis偽集群 超多圖文&#xff0c;對新手友好度極好。敲命令的過程中&#xff0c;難免會敲錯&#xff0c;但為了截好一張合適的圖&#xff0c;一旦出現一點問題&#xff0c;為了好的演示效果&#xff0c;就要從頭開始敲。且看且…

Hue Load Balance配置

個人博客地址&#xff1a;Hue Load Balance配置 | 一張假鈔的真實世界 直接上配置&#xff1a; server {server_name 192.168.72.31;listen 8001;charset utf-8;proxy_connect_timeout 600s;proxy_read_timeout 600s;proxy_send_timeout 600s;location / {proxy_set_header H…

992. K 個不同整數的子數組

目錄 一、題目二、思路2.1 解題思路2.2 代碼嘗試2.3 疑難問題 三、解法四、收獲4.1 心得4.2 舉一反三 一、題目 二、思路 2.1 解題思路 2.2 代碼嘗試 class Solution { public:int subarraysWithKDistinct(vector<int>& nums, int k) {//需要有數據結構來存儲數組…

領域驅動設計:事件溯源架構簡介

概述 事件溯源架構通常由3種應用設計模式組成,分別是:事件驅動(Event Driven),事件溯源(Event Source)、CQRS(讀寫分離)。這三種應用設計模式常見于領域驅動設計(DDD)中,但它們本身是一種應用設計的思想,不僅僅局限于DDD,每一種模式都可以單獨拿出來使用。 E…