Nginx配置与envsubst引用问题

时间:2019-05-04 09:11:41

标签: docker nginx

Docker入口文件:

if
  [ ${BASIC_AUTH_ENABLED} = "true" ];
then
  export BASIC_AUTH_ENABLED="Private site";
else
  export BASIC_AUTH_ENABLED=off;
fi

envsubst '${BASIC_AUTH_ENABLED}' < /etc/nginx/conf.d/default.conf > /etc/nginx/conf.d/default.conf

我在docker compose中设置BASIC_AUTH_ENABLED var:

version: '2'
services:
  site:
    restart: always
    image: "199.99.9.99:5000/site:dev"
    ports:
      - 8287:80
    environment:
      - BASIC_AUTH_ENABLED=true

Nginx抱怨:nginx: [emerg] invalid number of arguments in "auth_basic" directive。如果我仅使用"Private",则可以使用。我想念什么?

更新1

default.conf:

location / {
  root /usr/share/nginx/html;
  auth_basic ${BASIC_AUTH_ENABLED};
  auth_basic_user_file /etc/nginx/.htpasswd;
  try_files $uri $uri/ /index.html;
}

1 个答案:

答案 0 :(得分:2)

我怀疑这是一个报价问题。这是黑暗中的镜头:

有问题的Nginx的配置行需要一个字符串参数,这就是使用"Private"时得到的结果。替换后,配置文件中的行将如下所示:

auth_basic Private;

一切顺利,一个论点。

如果您改用"Private site",则替换后将如下所示:

auth_basic Private site;

因此,基本上有两个字符串参数,因为没有引号。尝试使您的脚本适应如下所示:

export BASIC_AUTH_ENABLED='"Private site"';

这应该导致:

auth_basic "Private site";