我在 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
。
- 1 回答
- 0 关注
- 163 浏览
添加回答
举报
0/150
提交
取消