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 тощо. Що б ви не намагалися зробити, ви, мабуть, дивитесь на це неправильно.
Флорін Асавеае

і клієнт, і середній сервер - це я.
Мухаммед Умер

Відповіді:


6

Вам потрібно встановити заголовок на вхідну змінну хоста, як це зафіксовано тут :

proxy_set_header Host $host;

This variable is equal to line Host in *the header of request* or nameщо означає, що говорить клієнт / браузер, саме той вибирається.
Мухаммед Умер

Це те, що ти хотів би зробити, правильно? Клієнт запитує ресурс / віртуальний хост у вашого проксі, і вам потрібно обслуговувати віртуальний хост. Віртуальний хост, який обслуговується, вибирається клієнтом / боржником.
Джефф Вонг

сервер не вибирає жодного віртуального хоста
Мухаммед Умер

1
Щось на зразок цього? Створіть два рівні супроводу та встановіть хост із жорстким кодом до кінцевої точки на другому шарі serverfault.com/a/622782/287634
Джефф Вонг

я погано дивлюся, але я думаю, що я вже бачив, оскільки я підтримав деякі речі там
Мухаммед Умер

0

Відповіді на це питання пояснюють таку поведінку та пропонують обхідні шляхи .

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.