nginx代理前端請求的實現(xiàn)示例
一,項目配置
我在 ip 為 192.168.31.177 的機器上使用 vue3 開發(fā)前端項目,項目中使用 axios 調(diào)用后端接口。
這是 axios 的配置:
import axios from 'axios';
const request = axios.create({
baseURL: 'http://192.168.31.177:8001',
// 設(shè)置請求頭
headers: {},
// 設(shè)置超時時間
timeout: 2000,
});
// 請求攔截器
request.interceptors.request.use(
config => {
// 在發(fā)送請求之前做些什么
return config;
},
error => {
// 對請求錯誤做些什么
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)出錯'))
}
},
function (error) {
// 對響應(yīng)錯誤做點什么
// 比如:根據(jù)響應(yīng)狀態(tài)碼,做不同的響應(yīng)處理
console.log(error)
return Promise.reject(error)
}
)
export default request
這是頁面中的請求:
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 的機器上啟動 expressjs 開發(fā)的后端項目 192.168.31.45:3000:
app.get('/api/getNumbers', (req, res) => {
// 生成兩個隨機數(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 將前端的請求代理到后端,下面將介紹 nginx 需要怎樣配置以及具體原理。
二,配置 nginx
前端項目運行在 192.168.31.177(開發(fā)機器),后端運行在 192.168.31.45:3000,Nginx 需要配置為反向代理,將前端請求轉(zhuǎn)發(fā)到后端。
在開發(fā)機器(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請求
location /api {
proxy_pass http://192.168.31.45:3000; # 后端項目運行的地址
# 可選:如果后端接口路徑不包含/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 # 檢查配置語法 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 # 啟動nginx G:\nginx-1.24.0>nginx -s reload # 不停止,重新加載
- 打開【任務(wù)管理器——進(jìn)程,搜索 nginx,可以看到兩個進(jìn)程,說明 nginx 正確啟動。
啟動前端項目,訪問 http://192.168.31.177:5173/。打開頁面后調(diào)用接口,獲取到接口數(shù)據(jù)。

三,Nginx 代理原理

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

