猿问

Nginx:WebSocket 通配符位置

我在 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 专家,所以请耐心等待 =)。


慕勒3428872
浏览 164回答 1
1回答

蓝山帝景

在https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms查看文章您没有使用 any&nbsp;location_match,因此匹配是前缀匹配。使用~作为位置匹配修饰符把它解释为一个正则表达式。该行location /ws应该匹配每个以 开头的查询/ws。
随时随地看视频慕课网APP

相关分类

Go
我要回答