NGINX如何在同一端口上运行多个应用程序并使用不同的路由路径?

3

我有两个应用程序,app1是用ReactJS开发的,而app2是用AngularJS开发的,它们共享同一个登录会话。

 - Application 1
http://application-1:1234/
 - APplication 2
http://application-2:2345/

我的需求是两个应用程序之间拥有无缝导航,因为它们共享相同的登录凭据。

我已经创建了 NGINX 反向代理配置,

server {
    listen 8080;
    server_name http://global-ip:8080;
    location / {
        proxy_pass http://application-1:1234;
        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 /application-2 {
        proxy_pass http://application-2:2345;
        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;
     }

}

由于上述配置仅适用于默认根路径,其他/application-2无法重定向到指定路径。

非常感谢您的帮助。

谢谢 Praveen T


尝试在location /application-2/ {...}的应用程序2块中添加一个额外的斜杠(/)。 - Ted
嗨Ted,谢谢回复。我尝试了你的建议,但是出现了404错误。 - praveen2609
你能解释一下具体是哪部分出了问题吗? - felixmosh
根据上述nginx默认文件的配置,只有第一个默认根路径(即location /)有效。其他的/application-2不能重定向到指定的application-2链接。 - praveen2609
看起来你需要在这里再加一个斜杠,将proxy_pass http://application-2:2345;改为proxy_pass http://application-2:2345/;。如果可以的话,请回复一下兄弟。 - Ted
显示剩余3条评论
1个回答

4

作为一个快速的hack,可以尝试以下两种方法:

location /application-2/ {
    proxy_pass http://application-2:2345/;
    ...
}

或者
location /application-2/ {
    rewrite ^/application-2(.*) $1 break;
    proxy_pass http://application-2:2345;
    ...
}

但是最好根据你的URI前缀构建你的Angular应用程序,具体请参见这里的说明。然后您的原始配置就会按预期工作。


嘿,伊万,非常感谢啊,上面的方法没起作用,但是你提供的链接来改变 Angular 应用程序中的 URI 前缀确实起了作用。 - praveen2609
1
@praveen2609 嗯,无论如何,设置正确的base href是这种情况下最好的方法。 - Ivan Shatsky
是的,伊万,你说得对,设置正确的基本 href 是最好的方法。这真是帮了我大忙,因为我一直在苦苦寻找解决方案,但你给出的指引方式确实帮助了我。再次感谢你宝贵的建议,保持安全,待在家里。 - praveen2609
@praveen2609 所以你仍然保留原始的nginx配置,只是更改了基本href? - Ted
是的,Ted。保持配置不变,并根据上述评论更改了基本 href URL。 - praveen2609
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接