首页 > 解决方案 > 带有 envsubst 引号问题的 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

BASIC_AUTH_ENABLED在 docker compose 中设置 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. 如果我使用 just "Private",那么它可以工作。我想念什么?

更新 1

默认配置:

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

标签: dockernginx

解决方案


我怀疑这是一个引用问题。这是在黑暗中拍摄的:

Nginx 的配置行需要一个字符串参数,这就是你使用"Private". 替换后,配置文件中的行将如下所示:

auth_basic Private;

一切都好,一个论据。

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

auth_basic Private site;

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

export BASIC_AUTH_ENABLED='"Private site"';

这应该导致:

auth_basic "Private site";

推荐阅读