Я пытаюсь бежать давай поговорим внутри докера за nginx, действующим как обратный прокси, так что Let-chat будет доступен в / chat через HTTP.
Раньше при использовании nginx в качестве обратного прокси внутри докера для другого контейнера докеров я устанавливал resolver 127.0.0.11 valid=300s;
чтобы nginx использовал DNS-сервер докеров и установил proxy_pass
в качестве переменной, чтобы контейнер nginx мог запускаться без необходимости подготовки исходной веб-службы. пример.
Тем не мение, Давай-чат, кажется, нужен proxy_redirect default;
какая конфигурация nginx не позволяет в сочетании с переменной proxy_pass.
Кто-нибудь знает способ обойти это, чтобы получить желаемый эффект? Я пробовал несколько перенаправлений вручную, но безуспешно. Моя соответствующая конфигурация nginx ниже.
# use docker's nameserver for changing container IPs
resolver 127.0.0.11 valid=300s;
resolver_timeout 5s;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /chat/ {
# I would like this part to work
#set $chat_backend http://chat_server:8080/;
#proxy_pass $chat_backend;
# But I can only get it to work like this
proxy_pass http://chat_server:8080/;
proxy_redirect / /chat/;
proxy_redirect default; # this line errors when setting a variable to proxy_pass
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
Спасибо.
Из руководство, следующие утверждения эквивалентны:
location /chat/ {
proxy_pass http://chat_server:8080/;
proxy_redirect default;
}
location /chat/ {
proxy_pass http://chat_server:8080/;
proxy_redirect http://chat_server:8080/ /chat/;
}
proxy_redirect default
не работает, если значение proxy_pass
не является буквальной строкой, однако proxy_redirect
сам по себе также может быть построен из переменных.
Итак, это решение может сработать для вас:
location /chat/ {
set $chat_backend http://chat_server:8080/;
proxy_pass $chat_backend;
proxy_redirect / /chat/;
proxy_redirect $chat_backend /chat/;
...
}