gpt4 book ai didi

amazon-web-services - 如何为 WebSocket 协议(protocol)配置 AWS ELB 和 Nginx?

转载 作者:行者123 更新时间:2023-12-04 23:42:36 43 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

6年前关闭。




Improve this question




我在 AWS 中有 N 层架构 Web 应用程序。 HTTP请求流顺序如下:

  • Nginx-ELB (公共(public)ELB,代理 Nginx )
  • Nginx (公有子网中的 EC2 实例,监听 80 端口,代理到 AP-ELB )
  • AP-ELB (内部ELB,代理到 AP-Server )
  • AP服务器 (私有(private)子网中的 EC2 实例,监听端口 80)

  • 我想将 WebSocket 功能应用于此架构。
    如何配置两层 ELB 和 Nginx 后面?

    最佳答案

    为 ws://协议(protocol)使用另一个端口,因为 ELB 不允许在不同模式 (HTTP/TCP) 下监听相同的端口。例如:ws:// Nginx-ELB :8081/ws-端点

    这分为两部分解释。

    Nginx 部分

  • 在端口 80 上监听 HTTP,然后代理到 AP-ELB 80 端口。
  • 在端口 8081 上监听 WebSocket,然后代理到 AP-ELB 端口 8081。

  • 关于WebSocket代理,可以引用这个 configuration .

    像这样的配置示例:
    # Web
    server {
    listen 80;
    server_name localhost;

    charset utf-8;

    error_log /var/log/nginx/lnmnt/error.log error;
    access_log off;

    set $upstream_endpoint <ap_elb_domain_name>;

    more_set_headers 'Cache-Control: max-age=0, no-cache, no-store';
    location / {
    proxy_connect_timeout 75;
    proxy_send_timeout 300;
    proxy_read_timeout 300;
    send_timeout 300;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass $upstream_adm_endpoint;
    }
    }

    # WebSocket
    server {
    listen 8081 proxy_protocol;
    server_name localhost;
    error_log /var/log/nginx/lnmnt/websocket.error.log error;
    access_log off;
    real_ip_header proxy_protocol;

    set $upstream_ws_endpoint <ap_elb_domain_name>:8081;

    location / {
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass $upstream_ws_endpoint;
    }
    }

    ELB部分

    Nginx-ELB

    按照以下步骤创建端口转发:
  • 80 (HTTP) 转发到 80 (HTTP)
  • 8081 (TCP) 转发到 8081 (TCP)

  • 然后使用您的 AWS CLI 执行:
    aws elb create-load-balancer-policy \
    --load-balancer-name Nginx-ELB \
    --policy-name EnableProxyProtocol \
    --policy-type-name ProxyProtocolPolicyType \
    --policy-attributes AttributeName=ProxyProtocol,AttributeValue=True

    aws elb set-load-balancer-policies-for-backend-server \
    --load-balancer-name Nginx-ELB \
    --instance-port 8081 \
    --policy-names EnableProxyProtocol

    AP-ELB

    按照以下步骤创建端口转发:
  • 80 (HTTP) 转发到 80 (HTTP)
  • 8081 (TCP) 转发到 80 (TCP)

  • 不要为此 ELB 应用任何负载均衡器策略!

    这一段让我头疼了好几天。如果对两个 ELB 应用相同的策略,你永远不会得到正确的结果。

    现在,使用 AWS ELB 和 Nginx 享受您的 WebSocket。

    关于amazon-web-services - 如何为 WebSocket 协议(protocol)配置 AWS ELB 和 Nginx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33433768/

    43 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com