<div dir="ltr"><span style="font-family:arial,sans-serif;font-size:13px">Здравствуйте!</span><div style="font-family:arial,sans-serif;font-size:13px">Я не нашёл полного ответа на свой вопрос, по этому я задам его здесь.</div>
<div style="font-family:arial,sans-serif;font-size:13px"><br><div>Суть проблемы с которой я столкнулся:</div><div>Есть балансер на основе nginx, который проксирует http и https соединения на backend сервера (то же nginx).</div>
<div><br></div><div>Вне зависимости от того пришёл ли на балансер http или https запрос я проксирую его на бэкэнд по http.</div><div><br></div><div>Всё работает, но на бэкэндах я не могу определить, какой запрос пришёл на балансер http или https. Переменная $https всегда пустая, а $scheme всегда имеет занчение "http".</div>
<div><br></div><div>Соответственно мне нужно как то проксировать переменные $https и $scheme.</div><div><br></div><div>Я делаю это так:</div><div>На балансере:</div><div><div>        location / {</div><div>                proxy_pass <a href="http://127.0.0.1:8080/" target="_blank">http://127.0.0.1:8080</a>;</div>
<div>                proxy_set_header Host $host;</div><div>                proxy_set_header X-Real-IP $remote_addr;</div><div>                proxy_set_header X-Forwarded-For $remote_addr;</div><div>                # тут проксируем переменную $scheme</div>
<div>                proxy_set_header X-Forwarded-Proto $scheme;</div><div><br></div><div>                proxy_connect_timeout 120;</div><div>                proxy_send_timeout    120;</div><div>                proxy_read_timeout    180;</div>
<div>        }</div></div><div><br></div><div>На бэкэнде:</div><div>В секцию http добавляю:</div><div><div>    map $http_x_forwarded_proto $https {</div><div>        default '';</div><div>        https on;</div><div>
    }</div><div><br></div><div>    map $http_x_forwarded_proto $scheme {</div><div>        default http;</div><div>        https https;</div><div>    }</div></div><div><br></div><div>Но это не работает:</div><div>nginx: [emerg] the duplicate "https" variable in /usr/local/etc/nginx/nginx.conf:39<br>
</div><div><br></div><div>Не работает видимо по тому что нельзя изменять переменные $https и $scheme.</div><div><br></div><div>Можно было бы сделать так:</div><div><div>    map $http_x_forwarded_proto $fastcgi_https {</div>
<div>        default '';</div><div>        https on;</div><div>    }</div><div><br></div><div>    map $http_x_forwarded_proto $fastcgi_scheme {</div><div>        default http;</div><div>        https https;</div><div>
    }</div></div><div><br></div><div>Но я не хотел бы использовать не стандартные переменные потому что ниже в секции location я использую переменные $https и $scheme в множестве правил с rewrite. Не стандартные переменные создадут неудобства в случае если конфигурация изменится.</div>
<div><br></div><div>Подскажите пожалуйста как правильно решить мою задачу?</div><div>Спасибо.</div></div></div>