оператор if в директиве nginx conf location выдает ошибку при вычислении переменной среды

#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.