如何为多个环境创建单个NGINX.conf文件

时间:2018-08-20 05:56:51

标签: docker nginx nginx-reverse-proxy nginx-config

我使用NGINX作为反向代理。

我有3个环境(开发,质量检查,生产)

考虑, develop的IP地址为1.2.3.4,qa为4.3.2.1,生产版本为3.4.1.2

我已经按如下所示配置了nginx.conf文件,并且在 develop 环境下,该文件运行得很好。

在构建这些docker-image的过程中,我明确提到了应该在哪个配置上构建镜像,如下所示:

cd conf/clustered-develop/;sudo docker build -t jcibts-swmdtr-dev.jci.com/nginx:1 --build-arg PORT=8765 --build-arg ENVIRONMENT=clustered-develop .

要求是docker-image应该仅构建1,然后将其推送到Docker Trusted存储库。

它将被提升到其他环境的Docker可信存储库,而无需再次构建映像。

我的问题是我应该怎么做才能在所有环境下使用这些单个conf。

就像ip替换为localhost或ip替换为127.0.0.1(我都尝试过但都无法正常工作)

worker_processes 4;

events { worker_connections 1024; }
http {

    sendfile on;

    upstream consumer-portal {

        server 1.2.3.4:9006;

    }

    upstream licenseportal {

        server 1.2.3.4:9006;

    }

server {
        listen 8765;

        location /consumer-portal/ {
            proxy_pass         http://consumer-portal/;
            proxy_redirect     off;
            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-Host $server_name;
        }

        location /licenseportal/ {
            proxy_pass         http://licenseportal/;
            proxy_redirect     off;
            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-Host $server_name;
        }
 }


}

1 个答案:

答案 0 :(得分:3)

根据出色的answer

  1. 您可以使用模板配置(例如/etc/nginx/conf.d/nginx.template)来一次构建图像​​ ,该模板包含希望在dev和qa之间更改的所有值的变量名。和产品。例如:

    upstream licenseportal {
      server ${NGINX_HOST}:${NGINX_PORT};
    }
    
  2. 然后在所有环境下运行 same 图像,在运行图像时使用envsubst通过使用值替换模板中的变量来创建新的nginx.conf特定于环境:

    # For Develop
    docker run -d \
      -e NGINX_HOST='1.2.3.4' \
      -e NGINX_PORT='9006' \
      -p 9006:9006 \
      jcibts-swmdtr-dev.jci.com/nginx:1 \
      /bin/bash -c "envsubst < /etc/nginx/conf.d/nginx.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
    
    # For Production
    docker run -d \
      -e NGINX_HOST='4.3.2.1' \
      -e NGINX_PORT='9006' \
      -p 9006:9006 \
      jcibts-swmdtr-dev.jci.com/nginx:1 \
      /bin/bash -c "envsubst < /etc/nginx/conf.d/nginx.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
    

注意:要使其正常工作-envsubst必须作为映像的一部分安装。即RUN apt-get -y update && apt-get -y install gettext