nginx 配置 websocket 支持

本文需要先自行了解的两个知识点:

  • nginx 配置文件 map 的使用方法
    这个百度搜索关键字 “nginx map” 就有很多答案和示例

  • http 协议头中的 ConnectionUpgrade 的作用
    Connection: Upgrade ,这个头部是给 proxy 看的。
    Upgrade: websocket,表示浏览器想要升级到WebSocket协议(也会有其他的比如升级为 http2 等)。这个头部是给最终处理请求的程序看的。
    如果只有 Upgrade: websocket,而没有 Connection: Upgrade,则 proxy 不知道要升级为 websocket,会默认视为普通HTTP请求。

然后就是关于修改 nginx 配置文件的示例了,如下示例配置文件是被 nginx 主配置文件 include 的:

upstream nexus.shanhy.com {
  server 192.168.111.64:8081;
}
upstream harbor.shanhy.com {
  server 192.168.111.64:843;
}

# connection_upgrade
map $http_upgrade $connection_upgrade {
    default Upgrade;
    '' $http_connection;
}
    
server {
    listen 80;
    server_name  *.shanhy.com;
    
    # 设置请求实体的大小限制
    client_max_body_size 50m;
    
    location / {
        proxy_pass  http://$host;
   }
}

server {
    listen 443 ssl;
    server_name  *.shanhy.com;
    ssl_certificate /etc/letsencrypt/shanhy.com/cert.pem;  # 指定证书的位置,绝对路径
    ssl_certificate_key /etc/letsencrypt/shanhy.com/key.pem;  # 绝对路径,同上
    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_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        
        proxy_pass  https://$host;
   }

}

其中为了支持 websocket,修改前和修改后的配置区别如下:

# connection_upgrade
map $http_upgrade $connection_upgrade {
    default Upgrade;
    '' $http_connection; # http_upgrade 为空的时候,使用原来传递的 http_connection 值
}

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

其他配置代码只是示例附带的,与支持 websocket 无关。


(END)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

catoop

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值