Django и nginx подключены через мостовую сеть.Как разобрать домен и передать его в proxy_pass?
Я работаю над приложением с несколькими арендаторами. У меня есть nginx в качестве rev-proxy. Когда арендатор регистрируется, я создаю образ docker и называю его в соответствии с его субдоменом. Назовем tenant1 t1 и tenant2 t2.
Так что t1.localhost.web to должен быть направлен на t1.web:8000, где t1 извлекается из url в nginx с помощью regex и конкатенируется в ".web:8000" и становится t1.web:8000 и устанавливается в proxy_pass в nginx.conf
Эти контейнеры dockers также имеют мостовую сеть, и с ними можно связаться по их именам. Так что если вы зашли в один из этих контейнеров, вы можете пинговать или скручивать друг друга по их именам, это работает, так что они доступны по именам
curl http://t1.web:8000 действительно работает, если вы "bash "ed в контейнер nginx
это мой файл конфигурации
events {
worker_connections 4096; ## Default: 1024
}
http {
# Redirect HTTP to HTTPS
server {
server_name ~^(?<subdomain>.+)\.app\.dev;
listen 80;
location / {
set $domainweb "http://$subdomain.web:8000";
proxy_pass $domainweb;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
для отладки я попытался исключить переменную субдомена и попробовал
location / {
set $domainweb "http://t1.web:8000";
proxy_pass $domainweb;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
это тоже не сработало, но когда я делаю
location / {
proxy_pass http://t1.web:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
Это сработало, значит, есть проблема с proxy_pass и регулярными выражениями, которую я не могу понять.
Любая помощь будет оценена по достоинству. Спасибо
Я нашел ответ
Вы должны заставить смотреть внутренний dns-сервер
в основном добавляя
resolver 127.0.0.11 ipv6=off;
under в скобке http решил мою проблему