nginx配置前端請(qǐng)求轉(zhuǎn)發(fā)到指定的后端ip方式
nginx conf配置
配置把“前端靜態(tài)文件”和“后端接口”統(tǒng)一收在 同一個(gè) server{} 塊 里,通過 兩條 location 做分流,其中 /api 這條 location 用到了一點(diǎn)“小技巧”把路徑裁掉后再轉(zhuǎn)發(fā)。
下面按執(zhí)行順序逐句拆解,告訴你“請(qǐng)求是怎么被轉(zhuǎn)發(fā)到 127.0.0.1:8081 的”。
1、全局上下文
worker_processes 1; # 只啟 1 個(gè) worker 進(jìn)程(單核開發(fā)機(jī)夠用)
events { worker_connections 1024; } # 每個(gè) worker 同時(shí)維持 1024 條連接
http { … } # 下面所有指令都屬于 http 層
2、監(jiān)聽端口與主機(jī)名
server {
listen 8080; # 瀏覽器訪問 http://localhost:8080
server_name localhost;
…
}
3、前端靜態(tài)資源定位
location / {
root html/hmdp; # 把 “/” 映射到 $NGINX_HOME/html/hmdp
index index.html index.htm;
}
- 請(qǐng)求
http://localhost:8080/→ nginx 在html/hmdp/index.html找文件并返回。 - 所有 JS/CSS/圖片只要路徑不以
/api開頭,都走這條規(guī)則。
4、后端接口轉(zhuǎn)發(fā)(核心)
location /api { … }
當(dāng) URI 以 /api 開頭時(shí),進(jìn)入該上下文,下面每一步都決定了“如何轉(zhuǎn)發(fā)”。
4.1 剝離前綴
rewrite /api(/.*) $1 break;
- 正則把
/api/user/login捕獲成/user/login并存入$1。
break 表示不再重新搜索 location,在當(dāng)前 location 內(nèi)繼續(xù)執(zhí)行。
結(jié)果:nginx 內(nèi)部把 URI 改成 /user/login,但瀏覽器地址欄仍是 /api/user/login。
4.2 設(shè)置代理協(xié)議版本
proxy_http_version 1.1;
開啟 HTTP/1.1,才能使用長(zhǎng)連接(keep-alive),減少反復(fù)握手。
4.3 打開請(qǐng)求頭透?jìng)?/p>
proxy_pass_request_headers on;
默認(rèn)就是 on,寫在這里為了顯式強(qiáng)調(diào):瀏覽器發(fā)來的所有頭(Cookie、Authorization…)都會(huì)原樣送到后端。
4.4 指定上游地址
proxy_pass http://127.0.0.1:8081;
- 把已經(jīng) rewrite 過的
/user/login直接發(fā)給本機(jī) 8081 端口。 - 如果這里寫成
http://backend就會(huì)走下面定義的 upstream 負(fù)載均衡,但作者注釋掉了。
4.5 失敗重試
proxy_next_upstream error timeout;
只有寫 proxy_pass http://backend 且 upstream 里有多臺(tái)機(jī)器時(shí),這條才會(huì)觸發(fā)“換下一臺(tái)重試”。目前只有一臺(tái),寫不寫效果一樣。
4.6 keep-alive 連接池
keepalive_timeout 30s; keepalive_requests 1000;
告訴 nginx“與后端 8081 保持長(zhǎng)連接,最多復(fù)用 1000 次或 30 s 超時(shí)再關(guān)閉”,減少 TCP 三次握手開銷。
5、upstream 塊(備用)
upstream backend {
server 127.0.0.1:8081 max_fails=5 fail_timeout=10s weight=1;
}
- 目前只有一臺(tái),實(shí)際沒用到。
- 如果想水平擴(kuò)容,再寫一行
server 127.0.0.1:8082 …,然后把proxy_pass http://127.0.0.1:8081改成proxy_pass http://backend即可自動(dòng)輪詢+故障摘除。
6、錯(cuò)誤頁
error_page 500 502 503 504 /50x.html;
location = /50x.html { root html; }
后端 8081 掛掉或返回 50x 時(shí),nginx 會(huì)把 html/50x.html 的內(nèi)容返回給瀏覽器,避免裸錯(cuò)。
7、請(qǐng)求完整生命周期舉例
瀏覽器輸入:
http://localhost:8080/api/user/login
nginx 監(jiān)聽 8080,收到 GET /api/user/login
匹配 location /api → 進(jìn)入該上下文
rewrite 把 URI 改成 /user/login
proxy_pass http://127.0.0.1:8081 → 發(fā)請(qǐng)求 GET /user/login 給后端
后端返回 JSON → nginx 原樣返給瀏覽器(因?yàn)?default_type application/json 只是響應(yīng)頭兜底,實(shí)際后端返回什么 Content-Type 就按什么走)
一句話總結(jié):
“先 rewrite 去掉 /api 前綴,再用 proxy_pass 把剩余路徑轉(zhuǎn)發(fā)到 127.0.0.1:8081,同時(shí)開啟 HTTP1.1 長(zhǎng)連接和失敗重試機(jī)制”——這就是該配置實(shí)現(xiàn)“前端請(qǐng)求轉(zhuǎn)發(fā)給后端”的全部秘密。
不用在IDEA里把“127.0.0.1:8081”寫死到代碼里;
IDEA 只負(fù)責(zé)把 Spring Boot(或你用的框架)啟動(dòng)在 8081 端口即可,剩下的由 Nginx 來“敲門”。
1、IDEA 側(cè)該做什么
保證項(xiàng)目 application.yml / application.properties 里端口是 8081:
server: port: 8081
- 直接點(diǎn) ?? Run 或 Debug,讓服務(wù)在 8081 端口處于 LISTEN 狀態(tài)。
2、驗(yàn)證端口是否已開啟
# macOS / Linux lsof -i:8081 # Windows netstat -ano | findstr 8081
看到 LISTEN 就說明 IDEA 已經(jīng)把后端程序跑起來了,Nginx 隨時(shí)可以把 /api 請(qǐng)求轉(zhuǎn)發(fā)過來。
3、什么時(shí)候才需要在 IDEA 里配“外部地址”
你本地調(diào)試前端頁面,但想讓前端直接調(diào) IDEA 里的后端(不走 Nginx),
才在前端 .env 或 vite.config 里寫:
VITE_API_BASE = 'http://127.0.0.1:8081'
這只是開發(fā)階段的瀏覽器→后端直連,與 Nginx 無關(guān)。
一旦用 Nginx 做反向代理,前端就統(tǒng)一訪問 http://localhost:8080/api/...,由 Nginx 轉(zhuǎn)發(fā)到 IDEA 的 8081,代碼/IDEA 側(cè)無需再感知 127.0.0.1:8081。
一句話總結(jié):
IDEA 只要把項(xiàng)目跑在 8081 端口就行,不需要也不推薦把“127.0.0.1:8081”硬編碼到后端代碼里;Nginx 自己會(huì)來“敲門”。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
nginx 配置虛擬主機(jī),實(shí)現(xiàn)在一個(gè)服務(wù)器可以訪問多個(gè)網(wǎng)站的方法
下面小編就為大家分享一篇nginx 配置虛擬主機(jī),實(shí)現(xiàn)在一個(gè)服務(wù)器可以訪問多個(gè)網(wǎng)站的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12
nginx?http?499錯(cuò)誤碼詳解以及解決辦法
HTTP狀態(tài)碼出現(xiàn)499錯(cuò)誤有多種情況,499錯(cuò)誤是什么?這篇文章主要給大家介紹了關(guān)于nginx?http?499錯(cuò)誤碼以及解決辦法的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01
NGINX基于cookie針對(duì)同一域名進(jìn)行分流轉(zhuǎn)發(fā)
本文介紹了利用NGINX基于cookie進(jìn)行多環(huán)境分流的方法,通過在Docker中部署兩個(gè)后端NGINX容器,并在前端NGINX配置中設(shè)置map規(guī)則,根據(jù)cookie值將請(qǐng)求分發(fā)到不同后端,感興趣的可以了解一下2025-07-07
Nginx的流式響應(yīng)配置實(shí)現(xiàn)小結(jié)
nginx是一款自由的、開源的、高性能的HTTP服務(wù)器和反向代理服務(wù)器,本文主要介紹了Nginx的流式響應(yīng)配置實(shí)現(xiàn)小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
詳解nginx服務(wù)器http重定向到https的正確寫法
本篇文章主要介紹了nginx服務(wù)器http重定向到https的正確寫法 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
基于Nginx實(shí)現(xiàn)一個(gè)灰度上線系統(tǒng)的示例代碼
本文主要介紹了基于Nginx實(shí)現(xiàn)一個(gè)灰度上線系統(tǒng)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Nginx實(shí)現(xiàn)外網(wǎng)訪問內(nèi)網(wǎng)的步驟詳解
外網(wǎng)瀏覽器與內(nèi)網(wǎng)是不通的,但是外網(wǎng)與中間過渡服務(wù)器是通的,中間過渡服務(wù)器與內(nèi)網(wǎng)服務(wù)器是通的,這樣在外網(wǎng)訪問過渡服務(wù)器時(shí),過渡服務(wù)器再跳轉(zhuǎn)到后臺(tái)服務(wù)器,本文給大家介紹了Nginx外網(wǎng)訪問內(nèi)網(wǎng)如何實(shí)現(xiàn)步驟,需要的朋友可以參考下2023-10-10

