0
点赞
收藏
分享

微信扫一扫

nginx配置wss协议

素的盐 2024-10-09 阅读 20

在nginx中配置WebSocket的wss协议,包括需求背景、步骤和关键配置。由于小程序连接WebSocket必须使用wss协议,需要在服务器上部署项目并开通SSL证书。

为了配置Nginx以支持WebSocket的安全连接(WSS),需要在Nginx配置文件中设置SSL证书,并启用wss模块。以下是一个配置示例:

确保已经有了SSL证书和私钥文件。

在Nginx配置文件中,设置server块以监听443端口(HTTPS默认端口),并启用SSL。

启用ssl模块,并设置SSL证书路径。

启用http_wss_module模块,以便能够处理WebSocket的安全连接。

# 以下属性中,以ssl开头的属性表示与证书配置有关。
server {
    # 配置HTTPS的默认访问端口为443。
    # 如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
    # 如果使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
    listen 443 ssl;
    # 填写证书绑定的域名
    server_name your_domain.com;
 
    # 填写证书文件名称
    ssl_certificate /path/to/your/certificate.pem;
    # 填写证书私钥文件名称  
    ssl_certificate_key /path/to/your/private.key;

    ssl_session_timeout 5m;
    #表示使用的加密套件的类型
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    #表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

    ssl_prefer_server_ciphers on;
    access_log  logs/xxxxxx.net.access.log  main;
 
    location /ws {
        proxy_pass http://your_backend;
        proxy_http_version 1.1;
 
	# ws 协议专用头
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
 
        # 设置代理头部以传递真实IP
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

确保替换your_domain.com、证书路径和后端服务器地址为实际配置。

重载Nginx配置以应用更改:

sudo nginx -s reload

现在,Nginx应该已经配置好支持WebSocket的安全连接了。

:Nginx 自从 1.3 版本就开始支持 WebSocket 了,并且可以为 WebSocket 应用程序做反向代理和负载均衡。

WebSocket 和 HTTP 协议不同,但是 WebSocket 中的握手和 HTTP 中的握手兼容,它使用 HTTP 中的 Upgrade 协议头将连接从 HTTP 升级到 WebSocket,当客户端发过来一个 Connection: Upgrade 请求头时,Nginx 是不知道的,所以,当 Nginx 代理服务器拦截到一个客户端发来的 Upgrade 请求时,需要显式来设置 Connection 、 Upgrade 头信息,并使用 101(交换协议)返回响应,在客户端和代理服务器、后端服务器之间建立隧道来支持 WebSocket。

当然,还需要注意一下,WebSockets 仍然受到 Nginx 缺省为60秒的 proxy_read_timeout 的影响。这意味着,如果你有一个程序使用了 WebSockets,但又可能超过60秒不发送任何数据的话,那你要么需要增加超时时间,要么实现一个 ping 的消息以保持联系。使用 ping 的解决方法有额外的好处,可以发现连接是否被意外关闭。

举报

相关推荐

0 条评论