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

Docker镜像中环境特定静态文件处理:多域名Nginx配置问题咨询

解决Nginx多环境虚拟主机域名动态配置问题

方法1:使用envsubst在容器启动时替换环境变量

这是最直接的方案,无需修改Nginx核心逻辑,通过容器启动脚本完成配置文件的变量替换,完美避免为每个环境构建专属镜像。

步骤1:调整Dockerfile

将原nginx.conf改为模板文件(如nginx.conf.template),并在启动命令中加入变量替换逻辑:

FROM nginx
# 复制配置模板
COPY nginx.conf.template /etc/nginx/nginx.conf.template
# 替换指定环境变量后启动Nginx
CMD ["/bin/sh", "-c", "envsubst '${WEBAPP_DOMAIN} ${API_DOMAIN}' < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf && nginx -g 'daemon off;'"]

步骤2:修改配置模板(nginx.conf.template)

把固定域名替换为环境变量占位符:

http {
  server {
    listen 80;
    server_name ${WEBAPP_DOMAIN};

    # ... 其他原有配置
  }

  server {
    listen 80;
    server_name ${API_DOMAIN};

    # ... 其他原有配置
  }
}

步骤3:启动容器时传入环境变量

通过-e参数传入对应环境的域名即可:

docker run -d -p 80:80 \
  -e WEBAPP_DOMAIN=www-dev.example.org \
  -e API_DOMAIN=api-dev.example.org \
  your-nginx-image:latest

方法2:结合Nginxmap指令实现动态变量映射(进阶)

如果需要在配置的更多位置复用环境变量,可以用Nginx的map指令配合环境变量暴露功能,实现更灵活的配置。

步骤1:调整Dockerfile

和方法1一致,保留模板文件与启动替换逻辑:

FROM nginx
COPY nginx.conf.template /etc/nginx/nginx.conf.template
CMD ["/bin/sh", "-c", "envsubst '${WEBAPP_DOMAIN} ${API_DOMAIN}' < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf && nginx -g 'daemon off;'"]

步骤2:修改配置模板(nginx.conf.template)

先在http块外声明要暴露的环境变量,再用map将环境变量转为Nginx可识别的内部变量:

# 暴露环境变量给Nginx进程
env WEBAPP_DOMAIN;
env API_DOMAIN;

http {
  # 映射环境变量为Nginx内部变量
  map "" $webapp_domain {
    default $WEBAPP_DOMAIN;
  }
  map "" $api_domain {
    default $API_DOMAIN;
  }

  server {
    listen 80;
    server_name $webapp_domain;

    # ... 其他原有配置
  }

  server {
    listen 80;
    server_name $api_domain;

    # ... 其他原有配置
  }
}

这种方式的优势在于,$webapp_domain和$api_domain可以在配置的其他位置复用,比如日志路径、反向代理地址等。

关键注意事项

  • 使用envsubst时,必须明确指定要替换的变量(如${WEBAPP_DOMAIN} ${API_DOMAIN}),避免误替换Nginx自带的内置变量(如$host)。
  • 若存在大量环境变量,可将变量列表写入单独文件,或使用envsubst '$${!*}'批量替换所有环境变量,但需注意与Nginx内置变量的冲突风险。
  • 集群环境(如Kubernetes)中,可通过ConfigMap/Secret管理这些域名变量,无需修改镜像即可完成环境切换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:39:52