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

二、問題場景
- 前端:Vue3 項目,運行在 80 端口
- 后端:.NET8 WebAPI,運行在 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 錯誤。
三、開發(fā)環(huán)境配置(Vite)
在 vite.config.ts 中的配置如下:
export default defineConfig({
server: {
proxy: {
'^/[Uu]pload': {
target: 'http://localhost:5005',
changeOrigin: true,
}
}
}
})
這個配置實現(xiàn)了:
- 匹配所有以
/upload或/Upload開頭的請求 - 轉發(fā)到后端服務
http://localhost:5005 changeOrigin: true處理跨域問題
四、生產(chǎn)環(huán)境配置(Nginx)
4.1 初始錯誤配置
我最初嘗試的 Nginx 配置:
location /upload {
proxy_pass http://localhost:5005/upload;
}
這個配置會導致路徑重復拼接,訪問 http://domain.com/upload/xxx.jpg 實際會轉發(fā)到 http://localhost:5005/upload/upload/xxx.jpg,顯然不正確。
4.2 正確配置方案
經(jīng)過研究和實踐,正確的 Nginx 配置應該是:
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后綴 - 這樣會保留原始請求路徑
- 直接指向后端地址,不加
proxy_set_header:- 傳遞必要的請求頭信息
- 確保后端能獲取到真實的客戶端信息
4.4 高級配置選項
- 路徑重寫
如果后端接口路徑與前端的路徑不一致,可以使用rewrite規(guī)則:
location ~* ^/upload {
rewrite ^/upload/(.*) /api/upload/$1 break;
proxy_pass http://localhost:5005;
}
- 負載均衡
如果后端有多臺服務器:
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
- 檢查后端服務是否真的存在該文件
- 確認
Nginx的轉發(fā)路徑是否正確 - 查看
Nginx錯誤日志:tail -f /var/log/nginx/error.log
- 權限問題
確保Nginx有權限訪問后端服務:
chmod -R 755 /path/to/upload chown -R www-data:www-data /path/to/upload
- 緩存問題
強制刷新瀏覽器緩存:Ctrl + F5
六、開發(fā)環(huán)境 vs 生產(chǎn)環(huán)境對比
| 功能 開發(fā)環(huán)境(Vite) | 生產(chǎn)環(huán)境(Nginx) |
|---|---|
| 匹配規(guī)則 | ^/[Uu]pload(正則) |
| 目標地址 | env.VITE_API_URL |
| 路徑修改 | 自動 |
| 跨域處理 | changeOrigin: true |
| 性能優(yōu)化 | 無 |
七、總結
通過本文的配置,我們實現(xiàn)了:
- 開發(fā)環(huán)境和生產(chǎn)環(huán)境一致的代理行為
- 不區(qū)分大小寫的路徑匹配
- 完整的請求頭傳遞
- 靈活的路徑重寫能力
關鍵點在于理解 Nginx 的 proxy_pass 行為:
- 當
proxy_pass包含URI時,會替換location匹配的部分 - 當
proxy_pass不包含URI時,會保留原始請求路徑
希望這篇指南能幫助你順利解決前后端分離項目中的反向代理問題。
以上就是Vue3本地環(huán)境Vite與生產(chǎn)環(huán)境Nginx反向代理配置方法匯總的詳細內(nèi)容,更多關于Vue3 Vite與Nginx反向代理配置的資料請關注腳本之家其它相關文章!
相關文章
Vue項目打包、合并及壓縮優(yōu)化網(wǎng)頁響應速度
網(wǎng)站頁面的響應速度與用戶體驗息息相關,直接影響到用戶是否愿意繼續(xù)訪問你的網(wǎng)站,所以這篇文章主要給大家介紹了關于Vue項目打包、合并及壓縮優(yōu)化網(wǎng)頁響應速度的相關資料,需要的朋友可以參考下2021-07-07
基于前端VUE+ElementUI實現(xiàn)table行上移或下移功能(支持跨頁移動)
有時候需要前端實現(xiàn)上移和下移功能,下面這篇文章主要給大家介紹了關于如何基于前端VUE+ElementUI實現(xiàn)table行上移或下移(支持跨頁移動)的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-07-07
打通前后端構建一個Vue+Express的開發(fā)環(huán)境
這篇文章主要介紹了打通前后端構建一個Vue+Express的開發(fā)環(huán)境,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07
npm無法加載文件:因為在此系統(tǒng)上禁止運行腳本的解決辦法
這篇文章主要介紹了npm無法加載文件:因為在此系統(tǒng)上禁止運行腳本問題的解決辦法,文中通過代碼以及圖文介紹的非常詳細,需要的朋友可以參考下2025-01-01
vue3父子同信的雙向數(shù)據(jù)的項目實現(xiàn)
我們知道的是,父傳子的通信,和子傳父的通信,那如何實現(xiàn)父子相互通信的呢,本文就來詳細的介紹一下,感興趣的可以了解一下2023-08-08

