Các phiên dính với proxy Nginx


10

Tôi có một ứng dụng chạy trên hai phiên bản AWS khác nhau và tôi muốn kích hoạt các phiên "dính" hoặc "liên tục" dựa trên IP để tôi có thể tận dụng các công nghệ ổ cắm web theo cách cụ thể.

Tôi có hai thiết lập khác nhau mà cả hai đều sử dụng ip_hashđể kích hoạt các phiên dính này.

Trong thiết lập đầu tiên, các quy trình ứng dụng đang chạy trên cùng phiên bản với cấu hình Nginx. Điều này đang làm việc , các phiên là liên tục như mong đợi.

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;
}

Trong thiết lập thứ hai, tôi chỉ vào các trường hợp bên ngoài và cố gắng đạt được hiệu quả tương tự. Thiết lập này không hoạt động . Nói cách khác, các phiên vẫn đang được cân bằng tải.

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;
}

Tôi có đang sử dụng ip_hashđúng không? Làm cách nào tôi có thể kích hoạt các phiên dựa trên ip "dính" cho các máy chủ bên ngoài?


Nginx của bạn đã cài đặt "ngx_http_upstream_module" chưa? Tôi không biết nếu nó được bao gồm theo mặc định hay không. "nginx -V" thường xuất ra các mô-đun được xây dựng với. Của tôi (được xây dựng từ nguồn) không đề cập đến nó
Tim

Câu trả lời:


7

Máy chủ của tôi đứng sau cân bằng tải AWS, vì vậy tôi cần chuyển các tiêu đề chính xác để ngược dòng để nó luôn phản ánh IP của máy khách. Cấu hình sau đã khắc phục sự cố của tôi (xem dòng nhận xét):

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

Theo tài liệu Nginx Hỗ trợ phiên dính chỉ có sẵn cho phiên bản Plus đắt tiền của họ. Tôi đã nghiên cứu các lựa chọn thay thế và gần hơn nữa là chiếc nĩa cũ này không tương thích với Nginx 1.5+ https://github.com/lusis/nginx-sticky-module

Tôi cũng đã cố gắng xây dựng một mô-đun LUA nhưng không có móc API để lựa chọn ngang hàng, chỉ để liệt kê và chặn.

Cân bằng tải Nginx Plus

Cập nhật

Tôi đã tìm thấy một mô-đun tuyệt vời khác, xem https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src


Bạn có thể liên kết đến tài liệu này?
James Shewey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.