Vue3 本地环境 Vite 与生产环境 Nginx 反向代理配置方法汇总【反向代理篇】

Vue3 本地环境 Vite 与生产环境 Nginx 反向代理配置方法汇总【反向代理篇】

文章目录


在这里插入图片描述

一、前言

在前后端分离架构中,前端访问后端资源(尤其是图片、文件等静态资源)的反向代理配置是一个常见且容易踩坑的问题。最近在开发一个 Vue3 + .NET8 的项目时,我就遇到了开发环境配置正常,但部署到生产环境后图片无法访问的问题。本文将详细记录这个问题的解决过程,并给出开发环境和生产环境的完整代理配置方案。

二、问题场景

  • 前端:Vue3 项目,运行在 80 端口
  • 后端:.NET8 WebAPI,运行在 5005 端口
  • 需求:前端通过 http://domain.com/upload/xxx.jpg 访问后端 http://domain.com:5005/upload/xxx.jpg 的图片资源

开发环境下使用 Vite 的代理配置工作正常,但部署到生产环境后出现 404 错误。

三、开发环境配置(Vite)

vite.config.ts 中的配置如下:

exportdefaultdefineConfig({ server:{ proxy:{'^/[Uu]pload':{ target:'http://localhost:5005', changeOrigin:true,}}}})

这个配置实现了:

  1. 匹配所有以 /upload/Upload 开头的请求
  2. 转发到后端服务 http://localhost:5005
  3. changeOrigin: true 处理跨域问题

四、生产环境配置(Nginx)

4.1 初始错误配置

我最初尝试的 Nginx 配置:

location /upload { proxy_pass http://localhost:5005/upload; } 

这个配置会导致路径重复拼接,访问 http://domain.com/upload/xxx.jpg 实际会转发到 http://localhost:5005/upload/upload/xxx.jpg,显然不正确。

4.2 正确配置方案

经过研究和实践,正确的 Nginx 配置应该是:

server { listen 80; server_name domain.com; # 前端静态资源 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 配置解析

  1. location ~* ^/upload
    • ~* 表示不区分大小写的正则匹配
    • 匹配所有 /upload/Upload 开头的请求
  2. proxy_pass
    • 直接指向后端地址,不加 /upload 后缀
    • 这样会保留原始请求路径
  3. proxy_set_header
    • 传递必要的请求头信息
    • 确保后端能获取到真实的客户端信息

4.4高级配置选项

  1. 路径重写
    如果后端接口路径与前端的路径不一致,可以使用 rewrite 规则:
location ~* ^/upload { rewrite ^/upload/(.*) /api/upload/$1 break; proxy_pass http://localhost:5005; } 
  1. 负载均衡
    如果后端有多台服务器:
upstream backend { server 192.168.1.101:5005; server 192.168.1.102:5005; } location ~* ^/upload { proxy_pass http://backend; } 
  1. 静态资源缓存
    对图片等静态资源启用缓存:
location ~* ^/upload { proxy_pass http://localhost:5005; proxy_cache my_cache; proxy_cache_valid 200 304 1h; proxy_cache_key "$scheme$request_uri"; } 

五、常见问题排查

  1. 404 Not Found
  • 检查后端服务是否真的存在该文件
  • 确认 Nginx 的转发路径是否正确
  • 查看 Nginx 错误日志:tail -f /var/log/nginx/error.log
  1. 权限问题
    确保 Nginx 有权限访问后端服务:
chmod -R 755 /path/to/upload chown -R www-data:www-data /path/to/upload 
  1. 缓存问题
    强制刷新浏览器缓存:Ctrl + F5

六、开发环境 vs 生产环境对比

功能 开发环境(Vite)生产环境(Nginx)
匹配规则^/[Uu]pload(正则)
目标地址env.VITE_API_URL
路径修改自动
跨域处理changeOrigin: true
性能优化

七、总结

通过本文的配置,我们实现了:

  1. 开发环境和生产环境一致的代理行为
  2. 不区分大小写的路径匹配
  3. 完整的请求头传递
  4. 灵活的路径重写能力

关键点在于理解 Nginxproxy_pass 行为:

  • proxy_pass 包含 URI 时,会替换 location 匹配的部分
  • proxy_pass 不包含 URI 时,会保留原始请求路径

希望这篇指南能帮助你顺利解决前后端分离项目中的反向代理问题。如果仍有疑问,欢迎在评论区留言讨论!

Read more

Flutter 组件 jerelo 适配鸿蒙 HarmonyOS 实战:JSON-RPC 2.0 通讯,构建高性能远程过程调用与边缘端分布式协同架构

Flutter 组件 jerelo 适配鸿蒙 HarmonyOS 实战:JSON-RPC 2.0 通讯,构建高性能远程过程调用与边缘端分布式协同架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 jerelo 适配鸿蒙 HarmonyOS 实战:JSON-RPC 2.0 通讯,构建高性能远程过程调用与边缘端分布式协同架构 前言 在鸿蒙(OpenHarmony)生态迈向工业 4.0、涉及海量边缘节点调度、分布式服务调用及跨端轻量级 RPC(Remote Procedure Call)互联的背景下,如何实现一套低开销、标准化且具备“方法导理”能力的通讯协议,已成为决定分布式系统协同效率的关键工程命题。在鸿蒙设备这类强调微内核架构与软总线高效吞吐的环境下,如果应用依然依赖沉重的 HTTP/REST 封装进行频繁的小报文交互,由于由于 HTTP 协议头的冗余性,极易由于由于“通讯开销过高”导致实时监控系统的响应滞后。 我们需要一种能够支持请求/响应对齐、具备通知(Notification)机制且符合

By Ne0inhk

Ubuntu 22.04上升级Node.js版本

在Ubuntu 22.04上升级Node.js版本有几种方法,推荐使用NVM(Node Version Manager),因为它可以让你轻松管理多个Node.js版本。 方法1: 使用NVM(推荐) 1. 安装NVM # 下载并安装NVMcurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh |bash# 或者使用wgetwget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh |bash 2. 重启终端或重新加载配置 source ~/.bashrc # 或者execbash 3. 验证NVM安装

By Ne0inhk
爬虫中Cookies模拟浏览器登录技术详解

爬虫中Cookies模拟浏览器登录技术详解

🌟 Hello,我是蒋星熠Jaxonic! 🌈 在浩瀚无垠的技术宇宙中,我是一名执着的星际旅人,用代码绘制探索的轨迹。 🚀 每一个算法都是我点燃的推进器,每一行代码都是我航行的星图。 🔭 每一次性能优化都是我的天文望远镜,每一次架构设计都是我的引力弹弓。 🎻 在数字世界的协奏曲中,我既是作曲家也是首席乐手。让我们携手,在二进制星河中谱写属于极客的壮丽诗篇! 摘要 作为一名在网络爬虫领域深耕多年的技术人,我无数次与网站的登录机制和反爬虫系统交锋过。记得在2019年做一个电商数据分析项目时,我曾经连续三天三夜与网站的验证码和会话过期机制斗智斗勇,最终通过Cookies持久化技术成功突破了限制。这段经历让我深刻认识到,掌握Cookies模拟浏览器登录技术对于构建稳定、高效的爬虫系统是多么关键。 在当今的网络环境中,大多数有价值的数据都被网站的登录墙保护着。而直接使用账号密码进行爬虫登录往往会面临诸多挑战:验证码、风控、IP限制等。这时候,Cookies模拟登录技术就成为了突破这些限制的关键武器。通过分析浏览器登录流程,提取和复用有效的Cookies,我们可以实现无需重复输入

By Ne0inhk
AI Agent 架构详解:感知-决策-执行的三位一体(基于最新研究论文)

AI Agent 架构详解:感知-决策-执行的三位一体(基于最新研究论文)

玄同 765 大语言模型 (LLM) 开发工程师 | 中国传媒大学 · 数字媒体技术(智能交互与游戏设计) ZEEKLOG · 个人主页 | GitHub · Follow 关于作者 * 深耕领域:大语言模型开发 / RAG 知识库 / AI Agent 落地 / 模型微调 * 技术栈:Python | RAG (LangChain / Dify + Milvus) | FastAPI + Docker * 工程能力:专注模型工程化部署、知识库构建与优化,擅长全流程解决方案 「让 AI 交互更智能,让技术落地更高效」 欢迎技术探讨与项目合作,解锁大模型与智能交互的无限可能! AI Agent 架构详解:感知-决策-执行的三位一体 从 ReAct 到 Plan-and-Execute,从单智能体到多智能体协作,AI Agent

By Ne0inhk