Конфигурация Nginx с выдачей кавычек envsubst - PullRequest
1 голос
/ 04 мая 2019

Файл записи 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 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 Ответ

2 голосов
/ 04 мая 2019

Я подозреваю, что это проблема цитирования. Вот выстрел в темноте:

Для рассматриваемой строки конфигурации Nginx требуется один строковый аргумент, и это то, что он получает, когда вы используете "Private". После подстановки строка в файле конфигурации будет выглядеть так:

auth_basic Private;

Все хорошо, один аргумент.

Если вместо этого вы используете "Private site", после подстановки оно будет выглядеть так:

auth_basic Private site;

Итак, в основном есть два строковых аргумента, потому что нет кавычек. Попробуйте адаптировать свой скрипт к чему-то вроде этого:

export BASIC_AUTH_ENABLED='"Private site"';

Это должно привести к:

auth_basic "Private site";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...