Назад | Перейти на главную страницу

Переменная Nginx в проходе прокси не работает

Может proxy_pass работать с переменными? Я пытаюсь заставить работать следующую конфигурацию:

    http {
       ...

        map $http_user_agent $myvariable {
            default 'mobile';    

        }

       ...
    }

Конфигурация локации:

server {
    listen       80;

   ...

    location /site {        
            proxy_pass http://docker-site/site/$myvariable;
        }

   ...
}

Конфигурация работает, если я заменю proxy_pass на http://docker-site/site/mobile;

Дайте мне знать, если я на правильном пути.

Эти два случая не совпадают. Если вы используете переменную, это значение заменит весь URI.

В таком случае:

location /site { 
    proxy_pass http://docker-site/site/mobile;
}

URI /site/foo передается вверх по течению как /site/mobile/foo.

Чтобы использовать вашу переменную, вы можете использовать перезапись (см. этот документ подробнее):

location /site { 
    rewrite ^/site(.*)$ /site/$myvariable$1 break;
    proxy_pass http://docker-site;
}

Или расположение регулярного выражения:

location ~ ^/site(.*)$ {
    proxy_pass http://docker-site/site/$myvariable$1;
}

Порядок оценки блоков расположения регулярных выражений имеет значение. Видеть этот документ для подробностей.