适用于 Spring 和 Angular 应用的 Nginx 和 Tomcat

适用于 Spring 和 Angular 应用的 Nginx 和 Tomcat

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

现在我正在尝试使用该应用程序映射我的域。

当我调用我的域时,从 Angular 到 Spring 的 API 调用不会执行。
由于它们位于同一台服务器上,因此我使用 localhost 来从 angular 到 spring 调用 API。
这在我的服务器浏览器本身上运行良好,但在其他地方却无法运行,这对我来说很清楚为什么它无法运行。

但我并不完全清楚该如何解决这个问题。

API 调用 这是我的 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 配置:

 <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_passhttp://mydomain:8080/myapp& http://localhost:8080/myapp但仍然没有成功。

非常感谢您对这两个问题的指点。
我在这里提供任何信息。

答案1

Angular您的应用用于调用 API 的URL应该是可配置的或自动检测的。因此,您可以使用:

  1. JavaScript 全局变量地点对象或
  2. 服务器端也有类似的对象,例如HttpServletRequest#getRequestURL(),您必须将其发送到 Angular 应用程序(例如在<script>标签中)。

使用服务器的 IP 地址是可以接受的,但更好的解决方案是使用指向该地址的域名。

您的 Tomcat 安装可能有一个ROOT应用程序,它会重定向到 Tomcat Manager 应用程序。如果您不使用它,则应该清空它(删除所有文件,保留目录)。

相关内容