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

68bkxrlz  于 2023-08-03  发布在  Nginx
关注(0)|答案(2)|浏览(106)

我使用NGINX作为反向代理。
我有3个环境**(开发、QA、生产)**
考虑一下,develop的IP地址是1.2.3.4,qa是4.3.2.1,production是3.4.1.2
我已经配置了nginx.conf文件如下,它在开发环境下工作得很好。
在构建这些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 repository。
它将被提升到其他环境的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;
        }
 }

}

kpbwa7wx

kpbwa7wx1#

关于answer
1.您可以使用模板配置(例如:/etc/nginx/conf.d/nginx.template),它包含了所有你希望在dev、qa和prod之间改变的值的变量名。举例来说:

upstream licenseportal {
  server ${NGINX_HOST}:${NGINX_PORT};
}

字符串
1.然后为所有环境运行 * 相同 * 镜像,在运行镜像时使用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

lg40wkob

lg40wkob2#

你可以在主http块中使用通过map声明的变量:

http {
  ...
  map "" $env {
    default dev;
  }
  ...
}

字符串
然后你可以合并if语句:

server {
  ...
  if ($env = "dev") {
    // do something
  }
}


Source:在Nginx位置规则中使用变量

相关问题