API请求的Nginx位置和所有websockets请求的一个位置

时间:2017-09-06 04:14:33

标签: nginx

我使用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:// {
  ...
}

1 个答案:

答案 0 :(得分:0)

只需用于所有陈述:

A

对于任何以“/ websocketUrl *”开头的位置。或者使用正则表达式:

location /websocketUrl {
    ...
}

如果您需要准确的网址。甚至更简单:

location ~ /(some|another|oneMore)?websocketUrl[1-3]*$ {
    ...
}

用于任何“websocketUrl”。我认为,最好将特殊目录用于所有套接字,但这种方式也可以使用/

但是如果你有相同的选项,请尝试禁用标题:

location ~ /.*websocketUrl.*$ {
    ...
}