WebSocket协议之NGINX代理转发无法建立连接问题处理

WebScoket协议如需要通过nginx代理,需要location 节点增加以下节点即可正常建立连接

  #需要配置以下节点
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

server {
        listen 81;
        listen 553;
        server_name  *.domain.com;
        ssl_certificate ssl/*.domain.com.pem;
        ssl_certificate_key ssl/*.domain.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers on;
        location / {
        proxy_pass http://192.168.28.224:702;
    #需要配置以下节点
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
                  }
}

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

一个是启用HTTP 1.1,因为Nginx对HTTP的反向代理,默认使用HTTP 1.0连接到后端,那样没法保持长连接,后端作出HTTP响应后,连接就被掐断了,所以启用HTTP 1.1以支持长连接。
Upgrade 和 Connection,为什么要让Nginx加这个请求头,对于WebSocket协议,客户端不是已经加了Upgrade和Connection请求头了吗?那是因为根据HTTP协议规范,Upgrade和Connection属于hop-by-hop请求头,Nginx作为中间的代理,按照规范不能直接转发hop-by-hop header ,所以需要我们手工强制设定。

参考地址:https://blog.csdn.net/CharlesSimonyi/article/details/90122916

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 反向代理是一种常见的服务器配置方式,它允许服务器将请求转发给不同的服务器进行处理。而Websocket是一种用于实现客户端与服务器之间实时通信的协议。在Nginx中配置反向代理Websocket,可以实现将Websocket请求转发给后端服务器进行处理。 下面是一个反向代理Websocket的配置实例: 1. 首先,在Nginx的配置文件中添加一个代理服务器的配置块。可以在Nginx配置文件(通常是/etc/nginx/nginx.conf)中的http块内添加如下代码块: ``` server { listen 80; server_name your-domain.com; location / { proxy_pass http://backend-server; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ``` 2. 在上述代码中,我们定义了一个简单的HTTP服务器,并将请求转发给名为`backend-server`的后端服务器。你可以根据实际情况替换为后端服务器的IP地址或域名。 3. `proxy_http_version 1.1;`这一行代码用于指定使用HTTP/1.1协议进行通信。而`proxy_set_header Upgrade $http_upgrade;`和`proxy_set_header Connection "upgrade";`这两行代码则用于设置HTTP头部,以便在进行Websocket协议升级时,能够正确处理升级请求。 4. 最后,保存配置文件,并重新加载Nginx配置,使其生效。可以使用命令`sudo nginx -t`来检查配置文件是否正确,然后使用`sudo service nginx reload`重新加载Nginx配置。 通过上述配置,当客户端请求Websocket连接时,Nginx会将其转发给后端服务器进行处理。这样,我们就可以实现在Nginx上配置反向代理Websocket的功能。 ### 回答2: 反向代理websocket的配置实例在nginx中可以通过使用proxy_pass和proxy_http_version指令来实现。 首先,我们需要在nginx的配置文件中打开http和http_realip_module模块: ``` http { ... include mime.types; default_type application/octet-stream; ... real_ip_header X-Forwarded-For; set_real_ip_from 0.0.0.0/0; } ``` 然后,我们需要配置一个server来处理WebSocket的请求: ``` server { listen 80; server_name example.com; location /ws { proxy_pass http://backend_server; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ``` 在上面的配置中,我们通过proxy_pass将请求代理到后端服务器。需要将backend_server替换为实际的后端服务器地址。 通过设置proxy_http_version为1.1,我们确保nginx能够正确处理WebSocket请求。 然后,通过设置proxy_set_header Upgrade $http_upgrade和proxy_set_header Connection "upgrade",我们告诉nginx将请求升级为WebSocket连接。 最后,保存并重新加载nginx配置文件,使配置生效。 通过以上配置,nginx将会将所有发送到http://example.com/ws的WebSocket请求转发到后端服务器,并确保WebSocket连接能够正确建立。 这样,我们就完成了nginx反向代理WebSocket的配置实例。 ### 回答3: 反向代理可以使得Nginx能够处理WebSocket的流量,并将其转发到实际处理请求的后端服务器。下面是一个反向代理WebSocket的配置实例: 1. 在Nginx的配置文件中,找到http块,并添加以下配置: ``` map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream backend { server 127.0.0.1:8080; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } } ``` 在该配置中,我们创建了一个名为`backend`的后端服务器组,其中该组只有一个服务器`127.0.0.1:8080`。`backend`可以根据实际情况进行修改。 2. 在`location /`块中,我们使用`proxy_pass`指令将所有流量转发到`backend`后端服务器组。为了支持WebSocket,我们还需要设置升级HTTP协议的相关HTTP头字段。`proxy_http_version`指令设置使用HTTP/1.1协议,`proxy_set_header`指令设置`Upgrade`和`Connection`这两个HTTP头字段的值,用来启用和维持WebSocket连接。 3. 保存并退出配置文件,然后重新加载Nginx配置: ``` sudo systemctl reload nginx ``` 上述配置实例会将所有流量转发到`backend`后端服务器组,包括WebSocket请求。这样,Nginx就能支持WebSocket反向代理处理了。你可以根据实际需求进行相关配置调整,比如更改监听端口、设置SSL证书等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值