#nginx
#nginx
Вопрос:
Я использую nginx, и у меня проблема с настройкой обратного прокси.
Мой nginx.conf установлен по умолчанию (в него не вносились никакие изменения), а моя конфигурация, доступная на сайте, является:
upstream backend_hosts {
server server1.example.com
server server2.example.com
}
server {
listen 80;
location / {
proxy_set_header Host $host;
proxy_pass http://backend_hosts;
}
}
и это не работает, он не передает заголовок узла. Когда я делаю что-то подобное, это работает:
...
proxy_set_header Host server1.exampple.com;
...
Я хотел бы сделать что-то вроде этого:
proxy_set_header Host $current_upstream_server_name;
Комментарии:
1. Какое значение вы хотите использовать?
server{1,2}.example.com
? Если да, пробовали ли вы$proxy_host
вместо$host
?2. Я хочу, чтобы он был установлен на тот, который выбран восходящим потоком, я пробовал $ proxy_host, и он также не работает.
3. Ага. Хорошо, не могли бы вы пояснить, как именно это «не работает»? Заголовок не установлен, пуст или что-то еще?
4. Ну, это работает только тогда, когда я пишу имя восходящего сервера напрямую, как я указал в своем посте, когда я установил заголовок в server1.example.com это работает, если я установлю для него значение $host или $ proxy_host, он вернет ошибку 404.
5. Хорошо, к сожалению, я не думаю, что есть чистое решение. Я попробовал вашу настройку, и для меня
$host
содержит исходное значение из запроса, в то время как$proxy_host
установлено значение"backend_hosts"
. Кроме того, я нашел аналогичный вопрос в ServerFault, который может (или не может) помочь: serverfault.com/questions/598202 /…
Ответ №1:
Мы также боролись с этой проблемой, и, хотя это не полный ответ, я считаю, что это может помочь будущим пользователям перейти на эту страницу.
Можно записать IP-адрес выбранного восходящего сервера, обратившись к переменной восходящего потока $upstream_http_name
.
http {
upstream backend {
server server1.example.com;
server server2.example.com;
}
server {
location / {
proxy_set_header Host $upstream_http_name;
proxy_pass http://backend;
}
}
}
Если, как в нашем приложении, получение IP приемлемо, то вышеуказанная конфигурация передаст эту информацию в заголовок узла прокси-запроса.
Полный список переменных, предоставляемых восходящим модулем, можно найти здесь
Комментарии:
1. По ссылке написано: $upstream_http_name сохраняет поля заголовка ответа сервера.
2. Да, это не работает. После проверки журналов значение
upstream_http_name
по какой-то причине всегда пустое.