Клейкі сеанси з проксі-сервером Nginx


10

У мене є програма, яка працює на двох різних екземплярах AWS, і я хотів би включити "липкі" або "стійкі" сеанси на основі IP, щоб я міг певним чином скористатися технологіями веб-сокетів.

У мене є дві різні установки, які передбачають використання ip_hashдля ввімкнення цих липких сеансів.

У першій установці процеси програми виконуються в тому ж екземплярі, що і конфігурація Nginx. Це працює , сесії наполегливі, як і очікувалося.

upstream my_app {
    ip_hash;
    # local servers
    server 127.0.0.1:3001 weight=100 max_fails=5 fail_timeout=300;
    server 127.0.0.1:3002 weight=100 max_fails=5 fail_timeout=300;
    keepalive 8;
}

У другій установці я вказую на зовнішні екземпляри і намагаюся досягти такого ж ефекту. Ця налаштування не працює . Іншими словами, сеанси все ще збалансовані.

upstream my_app {
    ip_hash;
    # external servers
    server 111.11.11.11:3001 weight=100 max_fails=5 fail_timeout=300;
    server 222.22.22.22:3002 weight=100 max_fails=5 fail_timeout=300;
    keepalive 8;
}

Чи ip_hashправильно я користуюся ? Як я можу включити "липкі" сеанси на основі ip для зовнішніх серверів?


У вашому Nginx встановлено "ngx_http_upstream_module"? Я не знаю, включений він за замовчуванням чи ні. "nginx -V" зазвичай виводить модулі, з якими він побудований. Шахта (побудована з джерела) не згадує про це
Тім

Відповіді:


7

Мій сервер був поза балансуванням завантаження AWS, тому мені потрібно було передати правильні заголовки вгору за течією, щоб це завжди відображало IP-адресу клієнта. Наступна конфігурація виправила мою проблему (див. Коментований рядок):

upstream my_app {
    ip_hash;
    server 111.11.11.11:3001 weight=100 max_fails=5 fail_timeout=300;
    server 222.22.22.22:3002 weight=100 max_fails=5 fail_timeout=300;
    keepalive 8;
}

server {
    server_name my-app.com;

    location / {
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_set_header X-Real_IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        # This is necessary to pass the correct IP to be hashed
        real_ip_header X-Real-IP;

        proxy_pass http://my_app/;
        proxy_redirect off;
    }
}

7

Згідно з документацією Nginx, підтримка Sticky для сеансів доступна лише для їх дорогої версії Plus. Я досліджував альтернативи, і чим ближче я це стара форка, яка не сумісна з Nginx 1.5+ https://github.com/lusis/nginx-sticky-module

Я також спробував створити модуль LUA, але немає гаків API для вибору однорангових, лише для перерахунку та блокування.

Балансування завантаження Nginx Plus

Оновлення

Я знайшов ще один чудовий модуль, див. Https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src


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