我在服务器上部署了 Tomcat 容器中的 Spring boot 和 Angular 应用程序。它在本地主机上运行良好。
现在我正在尝试使用该应用程序映射我的域。
当我调用我的域时,从 Angular 到 Spring 的 API 调用不会执行。
由于它们位于同一台服务器上,因此我使用 localhost 来从 angular 到 spring 调用 API。
这在我的服务器浏览器本身上运行良好,但在其他地方却无法运行,这对我来说很清楚为什么它无法运行。
但我并不完全清楚该如何解决这个问题。
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_pass
了 http://mydomain:8080/myapp
& http://localhost:8080/myapp
但仍然没有成功。
非常感谢您对这两个问题的指点。
我在这里提供任何信息。
答案1
Angular
您的应用用于调用 API 的URL应该是可配置的或自动检测的。因此,您可以使用:
- JavaScript 全局变量地点对象或
- 服务器端也有类似的对象,例如HttpServletRequest#getRequestURL(),您必须将其发送到 Angular 应用程序(例如在
<script>
标签中)。
使用服务器的 IP 地址是可以接受的,但更好的解决方案是使用指向该地址的域名。
您的 Tomcat 安装可能有一个ROOT
应用程序,它会重定向到 Tomcat Manager 应用程序。如果您不使用它,则应该清空它(删除所有文件,保留目录)。
,