为了账号安全,请及时绑定邮箱和手机立即绑定

Nginx:WebSocket 通配符位置

Nginx:WebSocket 通配符位置

Go
慕勒3428872 2021-12-13 18:37:51
我在 Go 服务前使用了一个 nginx 实例。我想将端口 80 上的任何内容重定向到 https。[完毕]/* 处的所有(非 websocket)https 请求都应转到https://localhost:8443/ * [完成]/ws/* 的所有 websocket https 请求都应该转到https://localhost:8443/ws/ * [missing]我目前的配置:ssl_certificate                 ...ssl_certificate_key             ...ssl_ciphers                     ...ssl_prefer_server_ciphers       on;server {        listen         80;        location / {                return 301 https://$host$request_uri;        }}server {        listen          443 ssl;        server_name     www.mydomain.com mydomain.com;        add_header Strict-Transport-Security "max-age=31536000";        location /ws {   <--- This only works for /ws but not /ws/app1            proxy_pass http://localhost:8443/ws;            proxy_http_version 1.1;            proxy_set_header Host $http_host;            proxy_set_header Upgrade $http_upgrade;            proxy_set_header Connection "upgrade";        }        location / {    <--- Catches anything, even without wildcard ?!                proxy_pass http://localhost:8443;        }}server {        listen 443 ssl;        server_name *.mydomain.com;        return 444;}为什么这是必要的?好吧,据我所知,您必须明确设置升级标头,所以我想您必须指定另一个位置。理想情况下,我只使用一个位置,但随后 websockets 被阻止(因为升级标头永远不会进入 Go 服务......)我不是 nginx 专家,所以请耐心等待 =)。
查看完整描述

1 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms查看文章

您没有使用 any location_match,因此匹配是前缀匹配。

使用~作为位置匹配修饰符把它解释为一个正则表达式。

该行location /ws应该匹配每个以 开头的查询/ws


查看完整回答
反对 回复 2021-12-13
  • 1 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信