用于 Spring 和 Angular 应用程序的 Nginx 和 Tomcat

Posted

技术标签:

【中文标题】用于 Spring 和 Angular 应用程序的 Nginx 和 Tomcat【英文标题】:Nginx and Tomcat For Spring and Angular App 【发布时间】:2020-06-26 04:23:38 【问题描述】:

我在服务器上部署了 Tomcat 容器中的 Spring boot 和 Angular 应用程序。它在 localhost 上运行良好。

现在我正在尝试将我的域映射到应用程序。

当我调用我的域时,没有执行从 Angular 到 Spring 的 api 调用。由于它们在同一台服务器上,我使用 localhost 将 api 从 angular 调用到 spring。它适用于我的服务器浏览器本身,但不适用于其他地方,这对我来说很清楚为什么它不起作用。

但我不完全确定如何解决它。

这是我的 nginx 配置

   server 
        listen       80;
        server_name localhost mydomain mydomain;


        #access_log  logs/host.access.log  main;

        location 
            root   html;
         proxy_pass      http://mydomain:8080;
            index  index.html index.htm;
               
    
Tomcat configuration :

 <Host name="mydomain"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Alias>mydomain</Alias>
        <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />   
</Host>

我的问题是:

我应该在从 Angular 到 Spring 调用 API 时使用服务器 IP 吗?它会工作吗?

第二个问题是当我调用我的域时,它会重定向到 tomcat 管理器页面。我希望它转到 localhost:8080/myApp。 我尝试将 proxy_pass 设置为 http://mydomain:8080/myapp 和 http://localhost:8080/myapp,但仍然没有成功。

对于这两个问题的任何指针将不胜感激。有关任何信息,我都可以在这里找到。

谢谢

【问题讨论】:

【参考方案1】:

是的,您需要在调用 API 时使用服务器 IP。原因是当客户请求您的 Angular 网站时,代码会呈现在他的网站上。现在,当 Angular 网站启动 API 调用时,它会尝试访问 ip localhost,这意味着相对于客户端浏览器而言是本地的,而对于 Angular 网站而言,情况并非如此。

关于您的第二个问题,您想访问您的域并且需要通过根路径加载您的网站,对吗?

【讨论】:

您的第一部分 +1。我想如果用户点击 mydomain.com 那么它应该去 localhost:8080/web。但 Nginx 不接受 /web part only localhost:8080【参考方案2】:

如果你想在用户点击 'mydomain.com' 时重定向到 /web 映射,你可以在你的 nginx 中添加如下配置:

server 
    listen 8080;

    location / 
        proxy_pass mydomain.com/web;
     

这将监听 8080 端口并将所有请求定向/附加到 /web

【讨论】:

以上是关于用于 Spring 和 Angular 应用程序的 Nginx 和 Tomcat的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 和 Spring Kerberos

如何使用 keycloak 保护 angular/spring 应用程序?

CORS 起源问题 - Spring Boot 和 Angular 4

在 Docker 中部署 Spring Boot 和 Angular 应用程序时出现 CORS 错误

Angular 2 + CORS + 带有 Spring Security 的 Spring Boot Rest Controller

Spring - CORS 不适用于安全配置