用于 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的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 keycloak 保护 angular/spring 应用程序?
CORS 起源问题 - Spring Boot 和 Angular 4
在 Docker 中部署 Spring Boot 和 Angular 应用程序时出现 CORS 错误
Angular 2 + CORS + 带有 Spring Security 的 Spring Boot Rest Controller