当托管两个 NextJs 应用程序时,第二个 nginx 路由不起作用

问题描述 投票:0回答:1

我的 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
转发。

提前致谢

nginx nginx-config portforwarding
1个回答
0
投票

答案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
块。对我来说,第二个解决方案被证明是最合适的

© www.soinside.com 2019 - 2024. All rights reserved.