有一个 myapp 应用程序(Spring Boot 1.4.1)和一个对应的 myapp.war。War 已部署到 Tomcat 8.5.9,应用程序可通过http://127.0.0.1:8080/myapp/
. 我希望应用程序可以通过http://127.0.0.1:8081/
. 为此,配置是用 Nginx 编写的:
server {
listen 127.0.0.1:8081;
location / {
proxy_pass http://127.0.0.1:8080/myapp/;
}
}
该页面可用,但代码中的重定向:
ModelAndView response = ...
response.setViewName("redirect:/hello/");
他们无论如何坚持myapp
,也就是说,重定向转到页面127.0.0.1:8081/myapp/hello/
。
Thymeleaf 模板引擎的情况类似。@{/hello/} 之类的链接被转换为 /myapp/hello。有了他,拐杖@{~/hello/}就能解决问题。但问题出在其他地方。
最简单的方法不是与重写链接作斗争,而是将应用程序部署为
ROOT.war
(当然,如果有这样的机会)以便它立即响应http://127.0.0.1:8080/
.如果您同时需要在一个 tomcat 上为不同的域提出多个应用程序,那么您需要在 tomcat 中创建多个主机(每个域分别一个),并且在 nginx 中不要忘记将所需的标头传输
Host
到 tomcat(proxy_set_header Host $host;
,例如)。