nginx代理前端請(qǐng)求的實(shí)現(xiàn)示例
一,項(xiàng)目配置
我在 ip 為 192.168.31.177 的機(jī)器上使用 vue3 開發(fā)前端項(xiàng)目,項(xiàng)目中使用 axios 調(diào)用后端接口。
這是 axios 的配置:
import axios from 'axios';
const request = axios.create({
baseURL: 'http://192.168.31.177:8001',
// 設(shè)置請(qǐng)求頭
headers: {},
// 設(shè)置超時(shí)時(shí)間
timeout: 2000,
});
// 請(qǐng)求攔截器
request.interceptors.request.use(
config => {
// 在發(fā)送請(qǐng)求之前做些什么
return config;
},
error => {
// 對(duì)請(qǐng)求錯(cuò)誤做些什么
return Promise.reject(error);
}
);
// 響應(yīng)攔截器
request.interceptors.response.use(
response => {
if (response) {
// 響應(yīng)數(shù)據(jù)為二進(jìn)制流處理(數(shù)據(jù)導(dǎo)出)
if (response.data.data instanceof Blob) {
return response
}
const {code, msg} = response.data
if (code === 200) {
return Promise.resolve(response.data)
} else {
return Promise.resolve(response)
}
} else {
return Promise.reject(new Error('系統(tǒng)出錯(cuò)'))
}
},
function (error) {
// 對(duì)響應(yīng)錯(cuò)誤做點(diǎn)什么
// 比如:根據(jù)響應(yīng)狀態(tài)碼,做不同的響應(yīng)處理
console.log(error)
return Promise.reject(error)
}
)
export default request
這是頁(yè)面中的請(qǐng)求:
axios.get('/api/getNumbers')
.then(res => {
ElMessage({
message: res.msg,
type: 'success'
})
}).catch(err => {
ElMessage({
message: err,
type: 'error'
})
})
這是 package.json 中的配置:
"scripts": {
"dev": "vite --host 192.168.31.177",
"build": "vite build",
"preview": "vite preview"
}
然后在 ip 為 192.168.31.45 的機(jī)器上啟動(dòng) expressjs 開發(fā)的后端項(xiàng)目 192.168.31.45:3000:
app.get('/api/getNumbers', (req, res) => {
// 生成兩個(gè)隨機(jī)數(shù)
const number1 = Math.floor(Math.random() * 100);
const number2 = Math.floor(Math.random() * 100);
res.json({
code: 200,
msg: '成功!',
data: {
"a": number1,
"b": number2,
}
});
});
現(xiàn)在想使用 nginx 將前端的請(qǐng)求代理到后端,下面將介紹 nginx 需要怎樣配置以及具體原理。
二,配置 nginx
前端項(xiàng)目運(yùn)行在 192.168.31.177(開發(fā)機(jī)器),后端運(yùn)行在 192.168.31.45:3000,Nginx 需要配置為反向代理,將前端請(qǐng)求轉(zhuǎn)發(fā)到后端。
在開發(fā)機(jī)器(192.168.31.177)上 Nginx 的配置文件(nginx.conf):
http {
server {
listen 8001; # Nginx 監(jiān)聽的端口,前端 axios 中配置的 端口
server_name 192.168.31.177; # 前端 axios 中配置的 IP
location / {
try_files $uri $uri/ /index.html; # 支持Vue路由的history模式
}
# 代理后端API請(qǐng)求
location /api {
proxy_pass http://192.168.31.45:3000; # 后端項(xiàng)目運(yùn)行的地址
# 可選:如果后端接口路徑不包含/api,移除前綴
# rewrite ^/api/(.*) /$1 break;
# 添加必要的代理頭信息
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;
}
}
}
配置完成后執(zhí)行:
G:\nginx-1.24.0>nginx -t # 檢查配置語(yǔ)法 nginx: the configuration file G:\nginx-1.24.0/conf/nginx.conf syntax is ok nginx: configuration file G:\nginx-1.24.0/conf/nginx.conf test is successful G:\nginx-1.24.0>start nginx # 啟動(dòng)nginx G:\nginx-1.24.0>nginx -s reload # 不停止,重新加載
- 打開【任務(wù)管理器——進(jìn)程,搜索 nginx,可以看到兩個(gè)進(jìn)程,說(shuō)明 nginx 正確啟動(dòng)。
啟動(dòng)前端項(xiàng)目,訪問(wèn) http://192.168.31.177:5173/。打開頁(yè)面后調(diào)用接口,獲取到接口數(shù)據(jù)。

三,Nginx 代理原理

反向代理的作用:
請(qǐng)求轉(zhuǎn)發(fā):Nginx 監(jiān)聽前端請(qǐng)求(如 http://192.168.31.177:8080/api/getNumbers),并將匹配 /api 的請(qǐng)求轉(zhuǎn)發(fā)到后端服務(wù)器 http://192.163.109.134:3000。
隱藏后端細(xì)節(jié):前端無(wú)需知道后端地址,只需與 Nginx 通信。
解決跨域:瀏覽器認(rèn)為請(qǐng)求是同源的(都是 http://192.168.31.177:8080),實(shí)際由 Nginx 轉(zhuǎn)發(fā)到不同域的后端。
關(guān)鍵配置解釋
location /api:匹配所有以 /api 開頭的請(qǐng)求路徑。 proxy_pass:將匹配的請(qǐng)求轉(zhuǎn)發(fā)到后端服務(wù)器。 proxy_set_header:設(shè)置請(qǐng)求頭,確保后端能獲取客戶端的真實(shí) IP 和協(xié)議信息。 add_header:添加 CORS 響應(yīng)頭,顯式允許跨域(可選,如果代理已解決跨域,可能不需要)。
為什么這樣配置?
- 解決跨域問(wèn)題:瀏覽器默認(rèn)禁止跨域請(qǐng)求,但通過(guò) Nginx 代理:前端請(qǐng)求發(fā)送到 http://192.168.31.177:8080/api(同源)。Nginx 將請(qǐng)求轉(zhuǎn)發(fā)到 http://192.163.109.134:3000/api,后端響應(yīng)通過(guò) Nginx 返回前端。瀏覽器認(rèn)為請(qǐng)求是“同源”的,不會(huì)觸發(fā)跨域限制。
- 靈活的路由控制:可以按路徑(如 /api)或域名分發(fā)請(qǐng)求。
- 支持負(fù)載均衡、緩存等高級(jí)功能(開發(fā)階段可能不需要)。
- 統(tǒng)一入口:前端和后端通過(guò)同一個(gè)端口(如 8080)通信,簡(jiǎn)化開發(fā)配置。
驗(yàn)證配置是否生效:
- 在瀏覽器中訪問(wèn)后端 API http://192.163.109.134:3000/api/getNumbers,確保后端正常返回?cái)?shù)據(jù)。
- 通過(guò) Nginx 訪問(wèn) API http://192.168.31.177:8080/api/getNumbers,檢查是否返回相同數(shù)據(jù)。
- 檢查看 Nginx 的訪問(wèn)日志和錯(cuò)誤日志,確認(rèn)請(qǐng)求是否被正確轉(zhuǎn)發(fā)。
- Nginx 未啟動(dòng)或配置錯(cuò)誤問(wèn)題排查
status nginx 檢查服務(wù)狀態(tài)。 nginx -t 檢查配置語(yǔ)法。
到此這篇關(guān)于nginx代理前端請(qǐng)求的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)nginx代理前端請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
keepalived+lvs 對(duì)nginx做負(fù)載均衡和高可用的操作方法
這篇文章主要介紹了keepalived+lvs 對(duì)nginx做負(fù)載均衡和高可用的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12
Nginx通過(guò)header中的標(biāo)識(shí)進(jìn)行分發(fā)
本文主要介紹了Nginx通過(guò)header中的標(biāo)識(shí)進(jìn)行分發(fā),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Nginx Stream模塊詳細(xì)攻略(四層代理的藝術(shù)與實(shí)踐)
Nginx Stream模塊是1.9.0版本引入的,用于處理TCP/UDP流量,提供四層網(wǎng)絡(luò)代理功能,與HTTP模塊相比,Stream模塊工作在傳輸層,不解析應(yīng)用協(xié)議,本文給大家介紹Nginx Stream模塊完全指南:四層代理的藝術(shù)與實(shí)踐,感興趣的朋友一起看看吧2025-12-12
Nginx限制IP訪問(wèn)的實(shí)現(xiàn)示例
限制某些IP地址訪問(wèn)網(wǎng)站是一個(gè)常見的需求,本文主要介紹了Nginx限制IP訪問(wèn)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06
NGINX基于cookie針對(duì)同一域名進(jìn)行分流轉(zhuǎn)發(fā)
本文介紹了利用NGINX基于cookie進(jìn)行多環(huán)境分流的方法,通過(guò)在Docker中部署兩個(gè)后端NGINX容器,并在前端NGINX配置中設(shè)置map規(guī)則,根據(jù)cookie值將請(qǐng)求分發(fā)到不同后端,感興趣的可以了解一下2025-07-07
Nginx?Proxy?Manager配置Web?WAF應(yīng)用防火墻
Nginx?Proxy?Manager是一款功能強(qiáng)大的開源軟件,配置Web應(yīng)用防火墻,可以防止常見的web攻擊,本文就來(lái)介紹一下Nginx?Proxy?Manager配置Web?WAF應(yīng)用防火墻,感興趣的可以了解一下2025-02-02
在Nginx服務(wù)器上安裝SSL證書完成HTTPS請(qǐng)求的步驟詳解(springboot項(xiàng)目)
這篇文章主要介紹了在Nginx服務(wù)器上安裝SSL證書完成HTTPS請(qǐng)求(springboot項(xiàng)目),首先需要下載證書到本地接著在Nginx獨(dú)立服務(wù)器上安裝證書,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-04-04

