配置之前需要知道ws协议和wss协议的区别

一、WS 和 WSS 的区别

WebSocket 协议是 html5 的一种通信协议,可以使客户端和服务端双向数据传输更加简单快捷,并且在 TCP 连接进行一次握手后,就可以持久性连接,同时允许服务端对客户端推送数据。

WS 协议和 WSS 协议均是 WebSocket 协议的 SCHEM。也是统⼀的资源标志符。WS是非安全的,没有证书;WSS是安全的,需要SSL证书。

WS 一般默认是 80 端口,而 WSS 默认是 443 端口,大多数网站用的就是 80 和 433 端口。

http 协议下使用 WS,在 https 协议下使用 WSS。

WebSocket协议的特点:

建立在 TCP 协议之上,服务端实现容易;

与 HTTP 协议有良好的兼容性,握手时不容易被屏蔽,可以通过各种 HTTP 代理服务器;

数据轻量,实时通讯;

可以发送文本和二进制数据;

不限制同源,客户端可以与任意服务器端进行通讯。

二、Nginx 下配置 WS

WS 配置

server {
     listen 8001;

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

在这里插入图片描述

但是在测试的话会有单独的路径,刚开始我的配置是这个样子:

location /ws/ {
			proxy_pass http://127.0.0.1:9007;
			proxy_http_version 1.1;
			proxy_set_header Upgrade $http_upgrade;
			proxy_set_header Connection "Upgrade";
		 }

访问socket的时候的路径为:
在这里插入图片描述

前端连接的时候:
在这里插入图片描述
但是一直报错:
在这里插入图片描述

我在想,访问/ws的时候将请求代理到127.0.0.1:9007
,那 /ws/webSocket就应该转发到127.0.0.1:9007/ws/webSocket

突然发现,多了个前缀有木有,我在服务器路径为:/webSocket

修改:在这里插入图片描述

在这里插入图片描述

第二天在帖子上看到一句话:

rewrite ^/api/(.*)$ /$1 break;

这句话的含义就是:

rewrite “^/api/(.)$” /$1 break,路径重写:
“^/api/(.
)$”:匹配路径的正则表达式,用了分组语法,把/api/以后的所有部分当做1组
/$1:重写的目标路径,这里用$1引用前面正则表达式匹配到的分组(组编号从1开始),即/api/后面的所有。这样新的路径就是除去/api/以外的所有,就达到了去除/api前缀的目的
break:指令,常用的有2个,分别是:last、break
last:重写路径结束后,将得到的路径重新进行一次路径匹配
break:重写路径结束后,不再重新匹配路径。

= : 用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
~ : 用于表示 uri 包含正则表达式,并且区分大小写。
~* : 用于表示 uri 包含正则表达式,并且不区分大小写。
^~ : 用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。

配置这句话就可以去掉路径:

location /ws/ {
     rewrite ^/ws/(.*)$ /$1 break;
     proxy_pass http://1.116.37.17:9007;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "Upgrade";
  }

服务区只使用/webSocket就可以了

三、Nginx 下配置 WSS

WSS 配置

server {
     listen 443 ssl;
     server_name im-wss-api.xxx.xxx;
     ssl_certificate ../cert/server.crt;
     ssl_certificate_key ../cert/server.key;
     ssl_session_timeout 5m;
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
     ssl_prefer_server_ciphers on;

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

我使用的是ws协议,配置完成之后:
在这里插入图片描述
连接成功!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐