我在Go服务前面使用了一个nginx实例。
我当前的配置:
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专家,所以忍受我=)。
[编辑]
我现在就开始工作了。我不确定它是否可以始终set_header升级/连接,即使它不是websocket请求,但我的Go服务不提供****,所以它适用于我=]
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 / { <--- Catches anything, even without wildcard ?!
proxy_pass http://localhost:8443;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
server {
listen 443 ssl;
server_name *.mydomain.com;
return 444;
}
答案 0 :(得分:1)
查看Javadoc
上的文章您没有使用任何location_match
,因此匹配是前缀匹配。
使用~
作为位置匹配修饰符,将其解释为正则表达式。
第location /ws
行应该与以/ws
开头的每个查询匹配。