Vue3本地環(huán)境Vite與生產(chǎn)環(huán)境Nginx反向代理配置的方法匯總
一、前言
在前后端分離架構(gòu)中,前端訪問后端資源(尤其是圖片、文件等靜態(tài)資源)的反向代理配置是一個(gè)常見且容易踩坑的問題。最近在開發(fā)一個(gè) Vue3 + .NET8 的項(xiàng)目時(shí),我就遇到了開發(fā)環(huán)境配置正常,但部署到生產(chǎn)環(huán)境后圖片無法訪問的問題。本文將詳細(xì)記錄這個(gè)問題的解決過程,并給出開發(fā)環(huán)境和生產(chǎn)環(huán)境的完整代理配置方案。

二、問題場景
- 前端:Vue3 項(xiàng)目,運(yùn)行在 80 端口
- 后端:.NET8 WebAPI,運(yùn)行在 5005 端口
- 需求:前端通過
http://domain.com/upload/xxx.jpg訪問后端http://domain.com:5005/upload/xxx.jpg的圖片資源
開發(fā)環(huán)境下使用 Vite 的代理配置工作正常,但部署到生產(chǎn)環(huán)境后出現(xiàn) 404 錯(cuò)誤。
三、開發(fā)環(huán)境配置(Vite)
在 vite.config.ts 中的配置如下:
export default defineConfig({
server: {
proxy: {
'^/[Uu]pload': {
target: 'http://localhost:5005',
changeOrigin: true,
}
}
}
})
這個(gè)配置實(shí)現(xiàn)了:
- 匹配所有以
/upload或/Upload開頭的請求 - 轉(zhuǎn)發(fā)到后端服務(wù)
http://localhost:5005 changeOrigin: true處理跨域問題
四、生產(chǎn)環(huán)境配置(Nginx)
4.1 初始錯(cuò)誤配置
我最初嘗試的 Nginx 配置:
location /upload {
proxy_pass http://localhost:5005/upload;
}
這個(gè)配置會(huì)導(dǎo)致路徑重復(fù)拼接,訪問 http://domain.com/upload/xxx.jpg 實(shí)際會(huì)轉(zhuǎn)發(fā)到 http://localhost:5005/upload/upload/xxx.jpg,顯然不正確。
4.2 正確配置方案
經(jīng)過研究和實(shí)踐,正確的 Nginx 配置應(yīng)該是:
server {
listen 80;
server_name domain.com;
# 前端靜態(tài)資源
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
}
# 代理上傳文件請求
location ~* ^/upload {
proxy_pass http://localhost:5005;
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;
}
}
4.3 配置解析
location ~* ^/upload:~*表示不區(qū)分大小寫的正則匹配- 匹配所有
/upload或/Upload開頭的請求
proxy_pass:- 直接指向后端地址,不加
/upload后綴 - 這樣會(huì)保留原始請求路徑
- 直接指向后端地址,不加
proxy_set_header:- 傳遞必要的請求頭信息
- 確保后端能獲取到真實(shí)的客戶端信息
4.4 高級配置選項(xiàng)
- 路徑重寫
如果后端接口路徑與前端的路徑不一致,可以使用rewrite規(guī)則:
location ~* ^/upload {
rewrite ^/upload/(.*) /api/upload/$1 break;
proxy_pass http://localhost:5005;
}
- 負(fù)載均衡
如果后端有多臺服務(wù)器:
upstream backend {
server 192.168.1.101:5005;
server 192.168.1.102:5005;
}
location ~* ^/upload {
proxy_pass http://backend;
}
- 靜態(tài)資源緩存
對圖片等靜態(tài)資源啟用緩存:
location ~* ^/upload {
proxy_pass http://localhost:5005;
proxy_cache my_cache;
proxy_cache_valid 200 304 1h;
proxy_cache_key "$scheme$request_uri";
}
五、常見問題排查
- 404 Not Found
- 檢查后端服務(wù)是否真的存在該文件
- 確認(rèn)
Nginx的轉(zhuǎn)發(fā)路徑是否正確 - 查看
Nginx錯(cuò)誤日志:tail -f /var/log/nginx/error.log
- 權(quán)限問題
確保Nginx有權(quán)限訪問后端服務(wù):
chmod -R 755 /path/to/upload chown -R www-data:www-data /path/to/upload
- 緩存問題
強(qiáng)制刷新瀏覽器緩存:Ctrl + F5
六、開發(fā)環(huán)境 vs 生產(chǎn)環(huán)境對比
| 功能 開發(fā)環(huán)境(Vite) | 生產(chǎn)環(huán)境(Nginx) |
|---|---|
| 匹配規(guī)則 | ^/[Uu]pload(正則) |
| 目標(biāo)地址 | env.VITE_API_URL |
| 路徑修改 | 自動(dòng) |
| 跨域處理 | changeOrigin: true |
| 性能優(yōu)化 | 無 |
七、總結(jié)
通過本文的配置,我們實(shí)現(xiàn)了:
- 開發(fā)環(huán)境和生產(chǎn)環(huán)境一致的代理行為
- 不區(qū)分大小寫的路徑匹配
- 完整的請求頭傳遞
- 靈活的路徑重寫能力
關(guān)鍵點(diǎn)在于理解 Nginx 的 proxy_pass 行為:
- 當(dāng)
proxy_pass包含URI時(shí),會(huì)替換location匹配的部分 - 當(dāng)
proxy_pass不包含URI時(shí),會(huì)保留原始請求路徑
希望這篇指南能幫助你順利解決前后端分離項(xiàng)目中的反向代理問題。
以上就是Vue3本地環(huán)境Vite與生產(chǎn)環(huán)境Nginx反向代理配置方法匯總的詳細(xì)內(nèi)容,更多關(guān)于Vue3 Vite與Nginx反向代理配置的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue實(shí)現(xiàn)實(shí)時(shí)更新sessionStorage數(shù)據(jù)的示例代碼
這篇文章主要為大家詳細(xì)介紹了Vue如何實(shí)現(xiàn)實(shí)時(shí)更新sessionStorage數(shù)據(jù),文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以參考一下2023-06-06
關(guān)于導(dǎo)入、配置Vuetify遇到的幾個(gè)問題
這篇文章主要介紹了關(guān)于導(dǎo)入、配置Vuetify遇到的幾個(gè)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
vue3+element?Plus實(shí)現(xiàn)表格前端分頁完整示例
這篇文章主要給大家介紹了關(guān)于vue3+element?Plus實(shí)現(xiàn)表格前端分頁的相關(guān)資料,雖然很多時(shí)候后端會(huì)把分頁,搜索,排序都做好,但是有些返回?cái)?shù)據(jù)并不多的頁面,或者其他原因不能后端分頁的通常會(huì)前端處理,需要的朋友可以參考下2023-08-08
vue項(xiàng)目中使用ts(typescript)入門教程
最近項(xiàng)目需要將原vue項(xiàng)目結(jié)合ts的使用進(jìn)行改造,本文從安裝到vue組件編寫進(jìn)行了說明,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Vue項(xiàng)目中添加鎖屏功能實(shí)現(xiàn)思路
這篇文章主要介紹了Vue項(xiàng)目中添加鎖屏功能的實(shí)現(xiàn)思路,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06
vue利用sync語法糖實(shí)現(xiàn)modal彈框的項(xiàng)目實(shí)踐
本文主要介紹了vue利用sync語法糖實(shí)現(xiàn)modal彈框的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
vue源碼解讀子節(jié)點(diǎn)優(yōu)化更新
這篇文章主要為大家介紹了vue源碼解讀子節(jié)點(diǎn)優(yōu)化更新示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08

