nginx代理前端請求的實(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è)置請求頭
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)錯誤做點(diǎn)什么
// 比如:根據(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 的機(jī)器上啟動 expressjs 開發(fā)的后端項(xiàng)目 192.168.31.45:3000:
app.get('/api/getNumbers', (req, res) => {
// 生成兩個隨機(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 將前端的請求代理到后端,下面將介紹 nginx 需要怎樣配置以及具體原理。
二,配置 nginx
前端項(xiàng)目運(yùn)行在 192.168.31.177(開發(fā)機(jī)器),后端運(yùn)行在 192.168.31.45:3000,Nginx 需要配置為反向代理,將前端請求轉(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請求
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 # 檢查配置語法 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 正確啟動。
啟動前端項(xiàng)目,訪問 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),實(shí)際由 Nginx 轉(zhuǎn)發(fā)到不同域的后端。
關(guān)鍵配置解釋
location /api:匹配所有以 /api 開頭的請求路徑。 proxy_pass:將匹配的請求轉(zhuǎn)發(fā)到后端服務(wù)器。 proxy_set_header:設(shè)置請求頭,確保后端能獲取客戶端的真實(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ā)配置。
驗(yàn)證配置是否生效:
- 在瀏覽器中訪問后端 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代理前端請求的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)nginx代理前端請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Nginx反向代理與proxy_cache緩存搭建CDN服務(wù)器的配置方法
linux下通過Nginx反向代理和proxy_cache緩存搭建CDN服務(wù)器加快Web訪問速度的配置方法2013-06-06
使用google-perftools優(yōu)化nginx在高并發(fā)時的性能的教程(完整版)
如果使用googler開發(fā)的google-perftools優(yōu)化Nginx和MySQL的內(nèi)存管理,性能將會有一定程度的提升。特別是對高并發(fā)下的服務(wù)器,效果更明顯2013-02-02
Nginx服務(wù)器抵御CC攻擊的相關(guān)配置講解
這篇文章主要介紹了Nginx服務(wù)器抵御CC攻擊的相關(guān)配置講解,CC攻擊原理與DDoS基本相似而且技術(shù)含量低,注意防范即可,需要的朋友可以參考下2016-01-01
Nginx內(nèi)網(wǎng)單機(jī)反向代理的實(shí)現(xiàn)
本文主要介紹了Nginx內(nèi)網(wǎng)單機(jī)反向代理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11

