Nginx - бесконечная перезагрузка при добавлении переменной в proxy_pass - PullRequest
3 голосов
/ 30 сентября 2019

Я работаю с Nginx в Docker и хочу назначить каждому пользователю свой порт.

Во-первых, ничего не добавляя, мой код работает нормально:

    location  /viewer/ {
        proxy_pass http://xx.xxx.xxx.xxx:18080/Road/;
    }

Переход к«/ viewer /» в URL будет прокси к порту 18080, как и ожидалось.

Но если я добавлю любую переменную к proxy_pass, например:

set $test 1;
proxy_pass http://xx.xxx.xxx.xxx:18080/Road/?$test;

, то, во-первых,статические файлы больше не загружаются, и мне нужно добавить такие строки:

    location ~ \.css {
       add_header  Content-Type    text/css;
    }
    location ~ \.js {
       add_header  Content-Type    application/x-javascript;
    }

После этого статические файлы снова работают, но страница начинает бесконечно перезагружаться.

До того, как я былдумая, что это потому, что я заменил порт переменной в proxy_pass, но, как я показал вам, это происходит, когда я добавляю туда любую переменную.

Как вы думаете, что я могу сделать неправильно? Спасибо за вашу помощь!

1 Ответ

2 голосов
/ 30 сентября 2019

Добавление переменной к proxy_pass меняет ее поведение. Вам потребуется создать весь URI.

В исходной конфигурации URI /viewer/foo преобразуется в /Road/foo перед передачей в восходящем направлении.

В новой конфигурации URI /viewer/foo преобразуется в /Road/?1, а хвост исходного URI теряется.

Возможно, вы добьетесь большего успеха при использовании rewrite...break для измененияURI.

Например:

location  /viewer/ {
    rewrite ^/viewer(.*)$ /road$1?something break;
    proxy_pass http://xx.xxx.xxx.xxx:18080;
}

Подробнее см. в этом документе .


В соответствии с вашим комментарием вы хотите изменитьпорт назначения.

Например:

location  /viewer/ {
    rewrite ^/viewer(.*)$ /road$1 break;
    proxy_pass http://xx.xxx.xxx.xxx:$myport;
}

Если вы указываете вышестоящий сервер по IP-адресу, оператор resolver не потребуется. Но если вы указываете upstream по имени, вам нужно будет определить resolver. См. этот документ для деталей.

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