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