Как правильно проксировать переменные $https и $scheme
Константин Осипов
k.osipov.msk at gmail.com
Thu Aug 28 10:57:34 UTC 2014
Здравствуйте!
Я не нашёл полного ответа на свой вопрос, по этому я задам его здесь.
Суть проблемы с которой я столкнулся:
Есть балансер на основе nginx, который проксирует http и https соединения
на backend сервера (то же nginx).
Вне зависимости от того пришёл ли на балансер http или https запрос я
проксирую его на бэкэнд по http.
Всё работает, но на бэкэндах я не могу определить, какой запрос пришёл на
балансер http или https. Переменная $https всегда пустая, а $scheme всегда
имеет занчение "http".
Соответственно мне нужно как то проксировать переменные $https и $scheme.
Я делаю это так:
На балансере:
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
# тут проксируем переменную $scheme
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}
На бэкэнде:
В секцию http добавляю:
map $http_x_forwarded_proto $https {
default '';
https on;
}
map $http_x_forwarded_proto $scheme {
default http;
https https;
}
Но это не работает:
nginx: [emerg] the duplicate "https" variable in
/usr/local/etc/nginx/nginx.conf:39
Не работает видимо по тому что нельзя изменять переменные $https и $scheme.
Можно было бы сделать так:
map $http_x_forwarded_proto $fastcgi_https {
default '';
https on;
}
map $http_x_forwarded_proto $fastcgi_scheme {
default http;
https https;
}
Но я не хотел бы использовать не стандартные переменные потому что ниже в
секции location я использую переменные $https и $scheme в множестве правил
с rewrite. Не стандартные переменные создадут неудобства в случае если
конфигурация изменится.
Подскажите пожалуйста как правильно решить мою задачу?
Спасибо.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20140828/165af3a7/attachment.html>
Подробная информация о списке рассылки nginx-ru