在AWS EC2负载均衡器上配置WebSocket抛出连接失败的问题

78次阅读
没有评论

问题描述

在使用AWS EC2负载均衡器配置WebSocket时遇到了连接失败的问题。他在Ubuntu 20.04(LAMP)堆栈上使用了Ratchet构建了一个WebSocket,并按照一篇文章和一个Stack Overflow问题的指导进行了配置。他已经完成了以下步骤:
1. 配置了安全组 – 入站规则 TCP 8080
2. 配置了负载均衡器
3. 创建了端口为8080的目标组(TCP)
4. 启用了粘性会话(1小时)
5. 在AWS证书管理器中配置了SSL证书
6. 配置了Apache
尽管一切都已经就位并且运行正常,但他仍然遇到了以下错误:

WebSocket connection to ‘wss://chat.domain.com:8080/’ failed:
他怀疑问题可能出在配置负载均衡器、安全组和目标组上。他希望得到帮助或建议。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据回答1的建议,您需要执行以下步骤来解决问题:
1. 确保防火墙已添加8080端口。
2. 创建一个新的目标组,用于8080端口。
3. 创建一个负载均衡器,将HTTP端口设置为8080,并指向目标组。
请按照以下步骤操作:
1. 登录到AWS控制台。
2. 导航到EC2服务。
3. 在左侧导航栏中,选择“负载均衡器”。
4. 点击“创建负载均衡器”按钮。
5. 在“选择负载均衡器类型”页面上,选择“应用程序负载均衡器”。
6. 在“配置负载均衡器”页面上,输入负载均衡器的名称,并选择一个可用区。
7. 在“监听器配置”部分,将HTTP端口设置为8080。
8. 在“目标组”部分,点击“新建目标组”按钮。
9. 在“新建目标组”页面上,输入目标组的名称,并选择8080端口。
10. 点击“下一步”按钮,然后点击“创建”按钮。
11. 在“注册目标”页面上,选择您的实例,并点击“添加到目标组”按钮。
12. 点击“下一步”按钮,然后点击“创建”按钮。
13. 在“安全组配置”页面上,选择您的安全组。
14. 点击“下一步”按钮,然后点击“创建”按钮。
15. 等待负载均衡器创建完成。
16. 一旦负载均衡器创建完成,您可以在负载均衡器的详细信息页面中找到负载均衡器的DNS名称。
17. 将您的WebSocket连接地址更改为wss://负载均衡器的DNS名称:8080/
这样,您应该能够成功连接到WebSocket服务器。

方案2

如果方案1无法解决问题,您可以尝试使用其他方法来配置WebSocket连接。
另一种方法是使用Nginx作为反向代理来配置WebSocket连接。以下是一个简单的Nginx配置示例:

server {
    listen 80;
    server_name chat.domain.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }
}

在这个示例中,我们将Nginx配置为监听80端口,并将所有请求代理到本地的8080端口。我们还设置了一些代理头,以确保WebSocket连接正常工作。
您需要将上述配置添加到您的Nginx配置文件中,并重新加载Nginx服务。然后,您可以尝试连接到ws://chat.domain.com,看看是否能够成功建立WebSocket连接。
请注意,您需要根据您的实际情况进行适当的配置更改。

总结

在配置AWS EC2负载均衡器上的WebSocket连接时,您可以尝试使用方案1中的方法来解决连接失败的问题。如果方案1无法解决问题,您可以尝试使用方案2中的方法来配置Nginx作为反向代理。希望这些解决方案能够帮助您成功建立WebSocket连接。如果您有任何进一步的问题或疑问,请随时提问。

正文完