#docker #nginx
#docker #nginx
Вопрос:
Я пытаюсь поместить блок if в директиву location файла Nginx Conf. Я уже прочитал документ If is evil и следовал рекомендациям, чтобы поместить return в область действия блока if.
location ^~ /foo/bar/ {
if ( $ENVIRONMENT_VARIABLE = '' ) {
return 404;
}
proxy_pass $ENVIRONMENT_VARIABLE;
}
Приведенный выше оператор if сравнивает переменную среды, переданную через команду запуска docker, приведенную ниже.
docker run --rm -p 8081:80 -e ENVIRONMENT_VARIABLE=https://example.com/ nginx-image
Ожидаемый результат:
Если переменная среды не проходит / не установлена, то при обращении к /foo/bar будет выдано 404.
И если переменная среды передана / установлена, тогда — proxy_pass будет работать.
Фактический результат: [emerg] 1 # 1: недопустимое условиеhttps://example.com / в /etc/nginx/conf.d/default.conf:25
Может кто-нибудь, пожалуйста, помочь? Не могу понять, почему это выдает ошибку. Уже пробовал следующее, но получил ту же ошибку.
if ( $ENVIRONMENT_VARIABLE = "" )
if ( $ENVIRONMENT_VARIABLE ~ "^$" )
Комментарии:
1. не так сильно в конфигурации nginx, но IIRC
if
может использоваться только с внутренними переменными. Переменные среды разнесены в конфигурации nginx. Я не уверен на 100%, поскольку документация не очень понятна: nginx.org/en/docs/http/ngx_http_rewrite_module.html#if
Ответ №1:
Вычисление переменной среды не работает в файле nginx conf.Я попробовал другой подход и разделил файл conf на два файла и загрузил файл, который необходим, в зависимости от переменной среды. Переменная среды вычисляется в сценарии запуска docker.