SignalR在Nginx反向代理设置

@果酱  August 16, 2023

SignalR在Nginx反向代理前后端分离项目中,需要单独匹配路由。

配置如下

http {
    sendfile on;
 
    upstream app_servers {
        # 不写http,在转发处写
        server x.x.x.x:5050;
    }
 
    server {
        listen 80;
 
        location /app {
            proxy_pass         http://app_servers;
            proxy_http_version 1.1;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection keep-alive;
            proxy_cache_bypass $http_upgrade;
        }
        # SignalR路由
        location /app/notifications {
            proxy_pass         http://app_servers/notifications;
            proxy_http_version 1.1;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection "upgrade";
            proxy_cache_bypass $http_upgrade;
        }
    }
}

需求注意点:

  • upstream中定义host,如时写了http协议,那么在proxy_pass中就不要再写http,两处写一处,否则重定义报错
  • Nginx路由规则默认是大小写敏感

    =表示精确匹配
    ^~表示url以某个常规字符串开头,理解为匹配url路径即可,nginx不对url做编码,因此请求为/static/20%/aa,可以被规则 ^$ /static/ /aa 匹配到
    ~区分大小写的正则匹配
    ~*不区分大小写的正则匹配
    !~ !~*区分大小写不匹配及不区分大小写不匹配的正则
    /通用匹配,任何请求都会匹配到

Ref

nginx 配置路由不区分大小写-腾讯云开发者社区-腾讯云 (tencent.com)

nginx详解之语法规则 - 七in秦 - 博客园 (cnblogs.com)


添加新评论