You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nginx与Vue.js应用中将环境变量注入process.env

解决Nginx运行时给前端JS注入环境变量的方案

首先得明确:浏览器端的JS里本来没有process.env(这是Node.js环境的变量),前端构建工具(比如Vue CLI)会在构建阶段把process.env.XXX替换成静态字符串,所以想在Nginx运行时动态修改,必须换思路——用占位符替换,而不是直接操作process.env。

为什么你之前的方法无效

  • fastcgi_param:是给PHP这类FastCGI后端程序传参的,和前端JS完全无关。
  • set/set_by_lua:设置的是Nginx内部变量,前端JS无法读取。
  • sub_filter:你之前替换的VUE_APP_API_URL2在构建后的JS里根本不存在,因为构建时process.env已经被替换成静态值了,自然找不到要替换的内容。

具体实现步骤

1. 前端代码预留占位符

修改你的auth.js,不要直接用process.env,而是用一个自定义的占位符(比如__VUE_APP_API_URL__):

// auth.js
const apiUrl = '__VUE_APP_API_URL__';
console.log('当前API地址:', apiUrl);
// 如果需要全局使用,可以挂载到window对象
window.VUE_APP_API_URL = apiUrl;

2. 配置Nginx的sub_filter模块

确保你的Nginx已经安装了ngx_http_sub_module(大部分官方镜像默认包含,若自行编译需加--with-http_sub_module参数)。

创建nginx.conf.template模板文件:

# 声明要读取的环境变量
env VUE_APP_API_URL;

server {
    listen 80;
    root /usr/share/nginx/html;

    location / {
        try_files $uri $uri/ /index.html;
        # 替换JS里的占位符为环境变量的值
        sub_filter '__VUE_APP_API_URL__' '$env_VUE_APP_API_URL';
        # 如果页面中有多个相同占位符,开启这个确保全部替换
        sub_filter_once off;
    }
}

3. Docker部署时传递环境变量

编写Dockerfile,用envsubst处理模板文件,启动Nginx时注入环境变量:

FROM nginx:alpine

# 复制前端构建产物到Nginx静态目录
COPY dist/ /usr/share/nginx/html/
# 复制Nginx配置模板
COPY nginx.conf.template /etc/nginx/nginx.conf.template

# 启动时替换模板中的变量,再启动Nginx
CMD ["/bin/sh", "-c", "envsubst '$VUE_APP_API_URL' < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf && nginx -g 'daemon off;'"]

4. 运行Docker容器时传递环境变量

启动容器时,用-e参数传入环境变量:

docker run -d -p 80:80 -e VUE_APP_API_URL="https://your-real-api.com" your-image-name

这样,Nginx启动时会把配置里的$env_VUE_APP_API_URL替换成你传入的真实值,然后通过sub_filter把JS里的占位符替换成这个值,前端就能拿到动态的环境变量了。

内容的提问来源于stack exchange,提问作者fixs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 00:00:08