我的 nginx 配置如下
server {
listen 80;
server_name host_server;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /admin/ {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
/
路由转发到端口3000,/admin
路由转发到端口3001。第一个路由似乎有效,但第二个路由不起作用。我注意到,当我切换两个转发规则(即 /
路由转发到端口 3001 和 /admin
路由转发到端口 3000)时,/admin
转发仍然不起作用,但另一个可以。
这证实了两个应用程序都没有问题,但 nginx 转发有问题。具体在/admin
转发。
提前致谢
这就是我想出的答案
server {
listen 80;
server_name host_server;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /admin/ {
rewrite ^/admin/(.*) /$1 break;
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
此处的更改是添加
rewrite
块。 rewrite 指令用于在将请求的 URI 传递到 proxy_pass 指令中指定的上游服务器之前去除 /admin/ 前缀。这允许后端服务器处理请求,就好像直接请求没有 /admin/ 前缀一样。