Vue3项目在Nginx中配置代理后端IP

在 vite.config.js 中配置的 server.proxy 仅在 Vite 开发服务器 (即你运行 npm run dev 或 yarn dev 时)生效。当你将 Vue 3 项目打包(npm run build)并部署到 Nginx 后,这个配置文件不会被带进生产环境,Nginx 也完全不会读取 vite.config.js 文件。


1. 为什么无效?

  • Vite 的代理原理 :它基于 Node.js 的 http-proxy 库,在开发时启动了一个中间件服务。浏览器访问 http://localhost:3000/api,Vite 服务器接收请求后转发给 http://localhost:8060。
  • Nginx 的托管原理 :Nginx 直接托管 dist 目录下的静态文件(HTML/JS/CSS)。当浏览器请求 /api 时,请求直接打到 Nginx 监听的端口(如 80/443),Nginx 不会因为 Vite 的配置文件而自动代理。

2. 如何在 Nginx 中实现相同的代理效果?

你需要在 Nginx 的配置文件 (通常是 nginx.conf 或 /etc/nginx/conf.d/your-project.conf)中手动添加反向代理配置。

假设你的 Vue 应用部署在 /usr/share/nginx/html,后端接口在 http://localhost:8060,配置如下:

nginx 复制代码
server {
    listen 80;
    server_name your-domain.com; # 你的域名或 IP

    # 托管 Vue 静态文件
    location / {
        root /usr/share/nginx/html;
        try_files $uri $uri/ /index.html; # 解决 Vue Router 刷新 404 问题
    }

    # 代理 /api 请求(等效于 Vite 的 proxy 配置)
    location /api {
        proxy_pass http://localhost:8060; # 对应 target

        # 等效于 changeOrigin: true
        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;

        # 可选:如果你在 Vite 中配置了 rewrite,在这里对应修改
        # 例如 Vite 的 rewrite: (path) => path.replace(/^\/api/, '')
        # 则这里 proxy_pass 末尾加斜杠:proxy_pass http://localhost:8060/;
    }
}

配置完成后,执行 nginx -t 检查语法,然后 nginx -s reload 重载配置即可生效。


3. 特别提醒:跨域(CORS)

  • 在 Vite 开发环境中,代理绕过了浏览器的跨域限制。
  • 在 Nginx 生产环境 中,使用上述 proxy_pass 同样绕过了跨域(因为请求是 Nginx 服务端转发的),不需要在后端代码中额外开启 CORS,除非前端直接请求后端 IP 而非通过 Nginx。

4. 补充:vite preview 呢?

如果你运行 npm run preview(即 vite preview --port 3000),这个命令会启动一个生产预览服务器,此时 server.proxy 是生效的。但这仅用于本地预览,不适用于生产环境部署,且性能远不如 Nginx,不建议用这种方式替代 Nginx 对外提供服务。

总结 :生产环境务必把代理逻辑写在 Nginx 配置中,vite.config.js 里的 server 配置只属于开发环境。如果你对 Nginx 配置不熟悉,可以直接复制上面的 location /api 代码块使用。如果有路径重写等特殊需求,可以告诉我,我帮你调整配置。

相关推荐
春天花会开1311 小时前
内网 HTTPS 部署实战:私有 CA + Nginx 反向代理全流程复盘
运维·nginx·https
还是大剑师兰特5 天前
解决nginx错误:http://localhost:7000正常,http://localhost:7000/map 报错404
nginx·大剑师
xing-xing6 天前
Docker容器中Nginx站点根目录网页配置访问
nginx·docker
PC2005-cloud6 天前
Nginx 防盗链配置实战:用 referer 模块保护网站静态资源
nginx
PHP实战开发录6 天前
Nginx上传大文件为什么报413
nginx·php·开发
RuoyiOffice6 天前
2026最推荐基于SpringBoot+Vue3的项目管理经营一体化:从商机、合同、任务与工时走到回款和利润
spring boot·项目管理·vue3·crm·合同管理·ruoyi office·项目经营
Lsetea6 天前
Nginx报No required SSL certificate was sent:mTLS客户端证书排查
运维·nginx·https·ssl·openssl
RuoyiOffice7 天前
SpringBoot+Vue3 节日主题换肤实战:一条参数换全站配色,节后自动还原
spring boot·vue3·spring boot 3·vben admin·ruoyi office·节日主题·换肤方案
szephyr7 天前
HTTPS 证书申请与自动续期:acme.sh + Let‘s Encrypt 完整记录
nginx·https·acme.sh·证书续期
Lsetea8 天前
部署证书后提示“证书名称与输入不匹配”:Safari 报错的三层排查
nginx·https·safari·ssl证书·openssl