Nginx: как установить заголовок хоста для выбранного сервера (балансировка нагрузки)

10

У меня есть сайт, который работает как балансировщик нагрузки. Сайт А.

У меня есть другие сайты, которые могут иметь только один домен. Так что, если я просто перенаправить их, он говорит, что имя хоста не найдено.

Так что, если я вручную установлю заголовок на что-то, появится только этот сайт.

Как я могу установить proxy_set_header Host xxxxвыбранный адрес сервера. Таким образом, каждый запрос на перенаправление будет иметь различный и соответствующий заголовок узла.

Это не будет проблемой, если мои другие 2 сайта могут работать на основе URL, а не заголовка узла.

worker_processes  1;

error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;
error_log  logs/error.log  debug;

pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    upstream myapp1 {
        #server localhost:3333;
        server www.asd.com:80;
    }

    server {
        listen 80;

        location / {
            proxy_set_header Host            $upstream_addr;  // should become somehow www.asd.com right now this code doesn't work
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass http://myapp1;
        }
    }
}
Мухаммед Умер
источник
$server_addrпочему-то 127.0.0.1 почему ??
Мухаммед Умер
я хочу заголовок узла будет www.asd.com когда сервер www.asd.com:80выбран
Мухаммад УМЕР
или если есть способ написать if(server1) than host = a; ,if(server2) than host = b;
Мухаммед Умер
1
Дело в том, что соответствующий заголовок хоста должен быть, по моему мнению, тем, что вы получаете от клиента. Если клиент запрашивает www.asd.com, то именно таким должен быть заголовок хоста. Это поможет правильно генерировать абсолютные URL-адреса в бэкэнде, когда это необходимо, устанавливать правильные домены для файлов cookie и т. Д. Что бы вы ни пытались сделать, вы, вероятно, смотрите на это неправильно.
Florin Asăvoaie
и клиент, и средний сервер - это я.
Мухаммед Умер

Ответы:

6

Вам необходимо установить заголовок для входящей переменной хоста, как описано здесь :

proxy_set_header Host $host;
Джефф Вонг
источник
This variable is equal to line Host in *the header of request* or nameэто означает, что будет выбран клиент / браузер.
Мухаммед Умер
Это то, что вы хотели бы сделать, правильно? Клиент запрашивает ресурс / виртуальный хост у вашего прокси, и вам нужно обслуживать виртуальный хост. Виртуальный хост для обслуживания выбирается клиентом / пользователем.
Джефф Вонг
Виртуальный хост не выбирается сервером наугад
Мухаммед Умер
1
Что-то вроде этого? Создайте два уровня прокси и задайте жесткий
Джефф Вонг,
я посмотрю, но я думаю, что уже видел, так как там проголосовал за некоторые вещи
Мухаммед Умер
0

Ответы на этот вопрос объясняют это поведение и предлагают обходные пути .

По сути, заголовок фиксируется задолго до того, как выбран восходящий. Если вы не можете заставить все восходящие потоки отвечать на один заголовок Host :, вы должны исправить восходящий поток одновременно с тем, как вы установили заголовок.

GreenReaper
источник