我的 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
转发。
提前致谢
答案1
这就是我想出的答案
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/ 前缀一样。
答案2
您可以采取的另一种方法是为第二个 nextJs 应用程序添加基本路径,如此处
所述module.exports = {
basePath: '/admin',
之后你可以使用原来的 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;
}
}
小改动是用
/admin/
代替 /admin
。在第二种方法中,您将不需要 rewrite
块。对我来说,第二个解决方案被证明是最合适的