我使用nginx作为反向代理,我有一台服务器作为API和Websocket服务器。为了使用WebScoket,我需要指定一些标题:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
但是,我有一些API请求错误,为了解决它,我必须使用:
proxy_set_header Connection keep-alive;
但是,上面的一行打破了websocket连接。所以,我可以在几个地方修复它:
location / {
proxy_pass http://0.0.0.0:5000;
proxy_http_version 1.1;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /someWebSocketUrl{
proxy_pass http://0.0.0.0:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /anotherWebSocketUrl{
proxy_pass http://0.0.0.0:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /oneMoreWebSocketUrl{
proxy_pass http://0.0.0.0:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
我不喜欢我必须为每个网络套接字网址分别设置位置。是否有可能简化它?类似的东西:
location allWebSocketUrls_or_wss:// {
...
}
答案 0 :(得分:0)
只需用于所有陈述:
A
对于任何以“/ websocketUrl *”开头的位置。或者使用正则表达式:
location /websocketUrl {
...
}
如果您需要准确的网址。甚至更简单:
location ~ /(some|another|oneMore)?websocketUrl[1-3]*$ {
...
}
用于任何“websocketUrl”。我认为,最好将特殊目录用于所有套接字,但这种方式也可以使用/
但是如果你有相同的选项,请尝试禁用标题:
location ~ /.*websocketUrl.*$ {
...
}