@balyko

Как заменить поддомена в заголовке http в nginx?

Нужно заменить проксируемые заголовок для gunicor'a, которые ему передает nginx. Допустим, я запрашиваю имя dev.example.com, а gunicorn'у передается просто example.com. Просто убрать поддомен у меня получилось следующим образом:

location / {
                        proxy_pass http://unix:/var/run/gunicorn/gunicorn.sock;
                        proxy_redirect off;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header X-Forwarded-Proto $scheme;
                        proxy_set_header Host example.com;
                }


Однако мне нужно, чтобы и поддомены тоже передавались, например hello.dev.example.com отдавалось gunicorn'у как hello.example.com. Подскажите, пожалуйста, как это сделать.
  • Вопрос задан
  • 295 просмотров
Решения вопроса 2
daager
@daager
Попробуйте так:
server{
	...
	server_name ~^(?<pre_host>.+)\.dev\.example\.com$;
}

location / {
	...
	proxy_set_header Host $pre_host.example.com;
}


Финалочка:7e9e4613ed.png
Ответ написан
@balyko Автор вопроса
Готовый конфиг выглядит следующим образом:
server {
        listen 80;
        server_name ~^(?<pre_host>[a-z\.]+)dev\.example.com dev.example.com;
        set $fake_http_host "${pre_host}example.com";
                location / {
                        proxy_pass http://unix:/var/run/gunicorn/gunicorn.sock;
                        proxy_redirect off;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header X-Forwarded-Proto $scheme;
                        proxy_set_header Host $fake_http_host;
                        error_log /var/log/nginx/ginucorn.log debug; # для отслеживание, что передается gunicorn'у
                }
        }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы