В настоящее время в моем файле конфигурации nginx есть следующее определение прохода прокси:
location /pass/ {
proxy_pass http://localhost:9999/pass/;
proxy_redirect off;
proxy_set_header Host $host;
}
Это работает, как ожидалось - запросы / pass перенаправляются в приложение, работающее на порту 9999.
Теперь я хочу сделать динамическую часть переадресации портов следующим образом:
location /pass/<input> {
{a $port variable here that is evaluated via a script (php?)}
proxy_pass http://localhost:$port/pass/;
proxy_redirect off;
proxy_set_header Host $host;
}
Запросы к / pass / ABCD1234 следует пересылать на порт 9898, а запросы к / pass / ABCD5678 следует пересылать на порт 9797.
Обратите внимание, что поток является динамическим - поэтому сопоставление от ABCD1234 к 9898 должно происходить с помощью какого-то сценария (возможно, PHP?), И на основе вывода сценария (порта) proxy_pass должен перенаправить запрос на этот порт.
Пожалуйста, помогите в этом отношении.
ОБНОВИТЬ :
Вместо того, чтобы получать порт proxy_pass из ввода URI, я хотел бы получить это с помощью файла cookie. Итак, вот обновленный блок кода:
location /pass/ {
add_header X-debug-message $host always;
add_header X-debug-message $cookie_sdmport;
set $proxyurl http://127.0.0.1:$cookie_theport/pass/;
add_header X-debug-message $proxyurl;
proxy_pass $proxyurl;
proxy_redirect off;
proxy_set_header Host $host;
}
С помощью этого кода выполняется повторное перенаправление 301 в браузер. В тот момент, когда я снова переключаюсь на статический порт, он снова работает! странный! $ Proxyurl в сообщении X-debug выглядит в браузере правильно. Итак, интересно, почему proxy_pass делает 301!
ОБНОВЛЕНИЕ 2:
Наконец, пересылка работает со следующей настройкой:
set $targetIP 127.0.0.1;
set $targetPort $cookie_passport;
proxy_pass http://$targetIP:$targetPort$request_uri;
Не уверен, почему решение, представленное выше, продолжает вращаться с 301 - я думаю, что nginx не любит смешивать динамические и статические части в параметре proxy_pass
Спасибо.