nginx配置前端請求轉發到指定的后端ip

nginx conf配置

配置把“前端靜態文件”和“后端接口”統一收在 同一個 server{} 里,通過 兩條 location 做分流,其中 /api 這條 location 用到了一點“小技巧”把路徑裁掉后再轉發。下面按執行順序逐句拆解,告訴你“請求是怎么被轉發到 127.0.0.1:8081 的”。


  1. 全局上下文
worker_processes  1;          # 只啟 1 個 worker 進程(單核開發機夠用)
events { worker_connections 1024; }  # 每個 worker 同時維持 1024 條連接
http { … }                    # 下面所有指令都屬于 http 層

  1. 監聽端口與主機名
server {listen       8080;        # 瀏覽器訪問 http://localhost:8080server_name  localhost;…
}

  1. 前端靜態資源定位
location / {root   html/hmdp;         # 把 “/” 映射到 $NGINX_HOME/html/hmdpindex  index.html index.htm;
}
  • 請求 http://localhost:8080/ → nginx 在 html/hmdp/index.html 找文件并返回。
  • 所有 JS/CSS/圖片只要路徑不以 /api 開頭,都走這條規則。

  1. 后端接口轉發(核心)
location /api { … }

當 URI 以 /api 開頭時,進入該上下文,下面每一步都決定了“如何轉發”。

4.1 剝離前綴

rewrite /api(/.*) $1 break;
  • 正則把 /api/user/login 捕獲成 /user/login 并存入 $1
  • break 表示不再重新搜索 location,在當前 location 內繼續執行。
    結果:nginx 內部把 URI 改成 /user/login,但瀏覽器地址欄仍是 /api/user/login

4.2 設置代理協議版本

proxy_http_version 1.1;

開啟 HTTP/1.1,才能使用長連接(keep-alive),減少反復握手。

4.3 打開請求頭透傳

proxy_pass_request_headers on;

默認就是 on,寫在這里為了顯式強調:瀏覽器發來的所有頭(Cookie、Authorization…)都會原樣送到后端。

4.4 指定上游地址

proxy_pass http://127.0.0.1:8081;
  • 把已經 rewrite 過的 /user/login 直接發給本機 8081 端口。
  • 如果這里寫成 http://backend 就會走下面定義的 upstream 負載均衡,但作者注釋掉了。

4.5 失敗重試

proxy_next_upstream error timeout;

只有寫 proxy_pass http://backend 且 upstream 里有多臺機器時,這條才會觸發“換下一臺重試”。目前只有一臺,寫不寫效果一樣。

4.6 keep-alive 連接池

keepalive_timeout   30s;
keepalive_requests  1000;

告訴 nginx“與后端 8081 保持長連接,最多復用 1000 次或 30 s 超時再關閉”,減少 TCP 三次握手開銷。


  1. upstream 塊(備用)
upstream backend {server 127.0.0.1:8081 max_fails=5 fail_timeout=10s weight=1;
}
  • 目前只有一臺,實際沒用到。
  • 如果想水平擴容,再寫一行 server 127.0.0.1:8082 …,然后把 proxy_pass http://127.0.0.1:8081 改成 proxy_pass http://backend 即可自動輪詢+故障摘除。

  1. 錯誤頁
error_page 500 502 503 504 /50x.html;
location = /50x.html { root html; }

后端 8081 掛掉或返回 50x 時,nginx 會把 html/50x.html 的內容返回給瀏覽器,避免裸錯。


  1. 請求完整生命周期舉例
    瀏覽器輸入:
    http://localhost:8080/api/user/login

  2. nginx 監聽 8080,收到 GET /api/user/login

  3. 匹配 location /api → 進入該上下文

  4. rewrite 把 URI 改成 /user/login

  5. proxy_pass http://127.0.0.1:8081 → 發請求 GET /user/login 給后端

  6. 后端返回 JSON → nginx 原樣返給瀏覽器(因為 default_type application/json 只是響應頭兜底,實際后端返回什么 Content-Type 就按什么走)


一句話總結
先 rewrite 去掉 /api 前綴,再用 proxy_pass 把剩余路徑轉發到 127.0.0.1:8081,同時開啟 HTTP1.1 長連接和失敗重試機制”——這就是該配置實現“前端請求轉發給后端”的全部秘密。

不用在 IDEA 里把“127.0.0.1:8081”寫死到代碼里;

IDEA 只負責把 Spring Boot(或你用的框架)啟動在 8081 端口即可,剩下的由 Nginx 來“敲門”。


  1. IDEA 側該做什么
  • 保證項目 application.yml / application.properties 里端口是 8081:
    server:port: 8081
    
  • 直接點 ?? RunDebug,讓服務在 8081 端口處于 LISTEN 狀態。

  1. 驗證端口是否已開啟
# macOS / Linux
lsof -i:8081
# Windows
netstat -ano | findstr 8081

看到 LISTEN 就說明 IDEA 已經把后端程序跑起來了,Nginx 隨時可以把 /api 請求轉發過來。


  1. 什么時候才需要在 IDEA 里配“外部地址”
  • 本地調試前端頁面,但想讓前端直接調 IDEA 里的后端(不走 Nginx),
    才在前端 .envvite.config 里寫:

    VITE_API_BASE = 'http://127.0.0.1:8081'
    

    這只是開發階段的瀏覽器→后端直連,與 Nginx 無關。

  • 一旦用 Nginx 做反向代理,前端就統一訪問 http://localhost:8080/api/...
    由 Nginx 轉發到 IDEA 的 8081,代碼/IDEA 側無需再感知 127.0.0.1:8081


一句話總結
IDEA 只要把項目跑在 8081 端口就行,不需要也不推薦把“127.0.0.1:8081”硬編碼到后端代碼里;Nginx 自己會來“敲門”。

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

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

相關文章

HTML 各種標簽的使用說明書

HTML 各種標簽的使用說明書 1. HTML 簡介 HTML(HyperText Markup Language,超文本標記語言)是用于創建網頁的標準標記語言。它使用一系列標簽來描述網頁的結構和內容,這些標簽被瀏覽器解釋并渲染成用戶看到的網頁。HTML是構建We…

從關鍵詞到語義理解:小陌引擎如何重構AI搜索優化邏輯?

引言:AI搜索時代的范式轉變在傳統互聯網時代,SEO(搜索引擎優化)是企業數字營銷的核心策略,通過關鍵詞密度、外鏈建設等技術手段提升網頁在搜索引擎結果頁(SERP)中的排名。然而,隨著生…

ADE explorer遇到XVFB服務器的問題

遇到這個報錯,是因為服務器沒有安裝xvfb的原因。yum install Xvfb即可解決問題。

期權的套利怎么理解?

期權套利是利用期權價格之間的不合理偏差,通過構建對沖組合獲取無風險利潤的策略。其核心邏輯基于“無套利定價原則”——若存在價格偏差,市場力量會迅速修正,套利者通過反向操作鎖定利潤。期權的套利怎么理解?一、主要套利類型與…

RabbitMQ 重試機制 和 TTL

目錄 1. 重試機制 1.1 簡介 1.2 配置文件 1.3 消費者確認機制為 auto 時 1.4 消費者確認機制為 manual 時 2. TTL 2.1 設置消息的過期時間 2.2 設置隊列的過期時間 2.3 給過期隊列中消息設置過期時間 1. 重試機制 1.1 簡介 在消息傳遞過程中, 可能會遇到各種問題, …

四、FVP啟動linux

目錄 1 實驗目的及環境 1.1 實驗目的 1.2 實驗環境 1.2.1 拉取代碼 1.2.2搭建交叉編譯環境 2 相關鏡像編譯 2.1 TF-A鏡像編譯 2.2 U-Boot鏡像編譯 2.3 Linux Kernel鏡像編譯 2.4 構建跟文件系統 3 啟動linux內核 3.1 啟動腳本構建 3.2 啟動Linux內核 1 實驗目的及環境 1.1 實驗…

淺聊一下微服務的服務保護

在微服務架構里,服務間調用關系錯綜復雜,一個服務出問題很可能引發連鎖反應,也就是 “雪崩”。今天就帶大家從零開始學習 Sentinel,這款阿里開源的微服務保護工具,幫你解決雪崩難題,做好流量控制、隔離降級…

ECharts Gallery:Apache官方數據可視化模板庫,助你快速制作交互圖表并實現深度定制

你有沒有過這種時候?手里攥著一堆 Excel 數據,想做個直觀的圖表給同事看,用 Excel 自帶的圖表吧,樣式丑不說,稍微復雜點的交互(比如點擊柱子顯示詳情)根本做不了;想自己用代碼寫吧&a…

[數據結構——lesson3.單鏈表]

目錄 引言 學習目標: 1.什么是鏈表 2.鏈表的分類 2.1 單向鏈表和雙向鏈表 (1)單向鏈表 (2)雙向鏈表 2.2 帶頭結點鏈表和不帶頭結點鏈表 (1)帶頭結點鏈表 (2)不帶頭結點鏈表 2.3 循環鏈表和不循環鏈表 (1)循環鏈表 (2)非循環鏈表 3.鏈表的實…

從零深入理解嵌入式OTA升級:Bootloader、IAP與升級流程全解析

引言(Opening)想象一下,你開發的一款智能水杯、一個環境監測設備或者一臺共享充電寶,已經部署到了成千上萬的用戶手中。突然,你發現了一個軟件bug,或者需要增加一個酷炫的新功能。你不可能派人跑到每個設備…

【Ansible】實施 Ansible Playbook知識點

1.清單概念與靜態清單文件是什么?答:Ansible 清單是被管理主機的列表,用于明確Ansible的管理范圍,分為靜態清單和動態清單。靜態清單是通過手動編輯的文本文件來定義被管主機,文件格式可以是INI格式或YAML格式。在INI格…

【Linux】vim工具篇

目錄一、vim的多模式1.1 命令模式1.1.1 光標移動1.1.2 復制及撤銷1.1.3 剪切及刪除1.1.4 替換1.1.5 批量化注釋/去注釋1.2 底行模式二、vim的配置個人主頁<—請點擊 Linux專欄<—請點擊 一、vim的多模式 vim是一款功能強大的文本編輯器&#xff0c;它編輯代碼主要圍繞命…

Spark 核心原理:RDD, DataFrame, DataSet 的深度解析

Apache Spark 是一個強大的分布式計算系統&#xff0c;以其內存計算、速度快、易用性強等特點&#xff0c;在大數據處理領域占據重要地位。理解 Spark 的核心原理&#xff0c;特別是其三種核心抽象——RDD, DataFrame, DataSet——對于高效地使用 Spark 至關重要。本文將深入解…

Docker 命令行的使用

1.Docker 命令列表[roothost1 ~]# docker Usage: docker [OPTIONS] COMMANDA self-sufficient runtime for containersCommon Commands:run Create and run a new container from an imageexec Execute a command in a running containerps List cont…

Redis Stream:輕量級消息隊列深度解析

&#x1f4e8; Redis Stream&#xff1a;輕量級消息隊列深度解析 文章目錄&#x1f4e8; Redis Stream&#xff1a;輕量級消息隊列深度解析&#x1f9e0; 一、Stream 數據結構解析&#x1f4a1; Stream 核心概念&#x1f4cb; Stream 底層結構? 二、消息生產與消費&#x1f68…

Android studio的adb和終端的adb互相搶占端口

在Android Studio調試時&#xff0c;有時候也需要借助終端的adb命令&#xff0c;他們互相搶占端 口&#xff0c;導致調試麻煩解決如下&#xff1a;① 終端adb的版本是&#xff1a;1.0.39路徑是:/usr/lib/android-sdk/platform-tools/adb② Android Studio使用的adb來源于Androi…

GEO服務商推薦:移山科技以劃時代高精尖技術引領AI搜索優化新紀元

引言&#xff1a;AI搜索生態重塑與GEO優化戰略地位躍升AI技術對信息檢索范式的顛覆GEO優化在企業增長中的核心作用第一章&#xff1a;AI搜索新紀元的企業營銷挑戰與機遇生成式AI成為用戶主要信息入口的行業趨勢企業在AI搜索中的“答案主權”爭奪戰GEO優化服務商的核心能力模型&…

Android SystemServer 系列專題【AttentionManagerService】

AttentionManagerService是framework中用來實現屏幕感知的一個系統級服務&#xff0c;他繼承于systemserver。我們可以通過dumpsys attention來獲取他的一些信息。如下針對屏幕感知的功能的引入來針對這個服務進行一個介紹。1、屏幕感知Settings UI實現屏幕感知的功能在A14上面…

nginx 反向代理使用變量的坑

nginx采用反向代理的時候使用變量的坑 正常情況&#xff1a; location ~ ^/prod-api(?<rest>/.*)?$ {# 假設 $mes_backend 形如: http://127.0.0.1:16889proxy_pass $mes_backend$rest$is_args$args;proxy_http_version 1.1;proxy_set_header Host $host;…

Origin繪制徑向條形圖|科研論文圖表教程

數據排列格式截圖&#xff0c;請查看每張圖↘右下角水印 目錄 數據排列格式截圖&#xff0c;請查看每張圖↘右下角水印 本 期 導 讀 No.1 理解圖形 1 定義 2 特點 3 適用場景 No.2 畫圖教程 1 導入數據&#xff0c;繪制圖形 2 設置繪圖細節 本 期 導 讀 徑…