在AWS Application Load Balancer或Network Load Balancer上启用Websocket Wss

时间:2018-08-09 21:05:21

标签: amazon-web-services nginx websocket amazon-ecs aws-load-balancer

我花了数小时试图提出一个解决方案,并用nginx阅读了很多Web套接字解决方案,但还是没有运气

我有一个用Docker容器化的websocket应用程序,并使用ecs在ec2实例上运行。我的websocket需要能够在需要时自动缩放。

我已经测试了与Classic elb的连接性,并且一切正常,但是它不支持websocket协议。

下至ALB和NLB

ALB仅允许HTTP和HTTPS协议并支持websocket,但我不确定如何实现通过WSS协议访问我的websocket,而且目标组健康检查失败。

NLB运作良好,因为它允许使用TCP协议,但是唯一的问题是它不会终止SSL。

唯一的解决方案是在EC2上安装SSL证书,并将nginx反向代理设置到docker容器。但是我对此并不感到高兴,因为我没有使用Nginx的经验,我可能没有正确的配置。但我仍然无法通过wss连接到websocket。欢迎任何帮助

我的主要目标是通过wss连接到websocket。

worker_processes 1;

events { worker_connections 1024; }

http {

sendfile on;

upstream docker-nginx {
    server nginx:443;
    ssl_certificate /etc/ssl/private/example.chained.crt;
    ssl_certificate_key /etc/ssl/private/example.key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
}

upstream localhost {
    server apache:443;
}

server {
    listen 443;

    location / {
        proxy_pass         http://localhost;
        proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
    }
}

server {
    listen 443;

    location / {
        proxy_pass         http://example.com;
        proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
    }
  }

}

1 个答案:

答案 0 :(得分:-3)

此问题已通过使用ALB解决。