gpt4 book ai didi

tomcat - 转发 Tomcat 请求

转载 作者:行者123 更新时间:2023-11-28 23:38:10 28 4
gpt4 key购买 nike

我有一个在 nginx 中混合运行 PHP 和 Tomcat 的域。这是它的样子。我在这个站点上有一个域 example.com 我安装了 Wordpress。这完全没有问题。现在我想要的是,当您导航到 example.com/backend 时,它会被转发到 Tomcat。

现在我仍然有一个默认安装,我安装的每个新 webapp 都需要放在/tomcatinstallationfolder/webapps 中。我希望能够将这些应用程序放在我网站的文档根目录中的后端目录中。我需要如何配置 Tomcat 才能完成此操作?

这是转发请求到Tomcat的配置。同样,这是二进制包的默认安装。

server {
listen 80 default_server;
listen 443 ssl;
server_name www.example.com example.com;
root /var/www;
index index.php index.html index.htm;

ssl_certificate certificates/example.com.crt;
ssl_certificate_key certificates/example.com.key;

include error_pages;
include php_config;

location /backend {
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Server $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwar$
proxy_pass http://localhost:8080/;
}


}

最佳答案

这里有很多事情要回应。

通常,将 Tomcat 和反向代理用于提供内容的位置重叠是个坏主意。因此,如果您的“后端”目录是 /var/www/backend 那么我强烈建议将 /backend 目录移动到其他地方,例如 /var/tomcat/网络应用程序。这样做的原因是安全性。除非您的配置完全正确,否则您最终可能会得到反向代理提供它不应该提供的内容,例如 JSP 的源代码或 web.xml 的内容。

接下来,您将更改代理中应用程序的内容路径。这将导致各种微妙的问题。我的意思是,对 example.com/backend/myapp 的请求将被路由到 localhost:8080/myapp。在反向代理中,上下文路径是 /backend/myapp,但在 Tomcat 中,上下文路径是 /myapp。像这样更改上下文路径会破坏各种各样的事情,包括重定向、链接但在应用程序中是动态的、cookie 路径,以命名首先想到的几个。您可以在反向代理中解决这些问题,但这是一个巨大的痛苦。保持上下文路径相同会好得多。

考虑到上述情况,我建议您使用以下设置:

  1. 创建/var/tomcat/webapps
  2. 将主机的 appBase(在 server.xml 中)配置为 /var/tomcat/webapps
  3. 将您的 WAR 文件和目录部署到 /var/tomcat/webapps
  4. 将您的 WAR 命名为 backend#app1.war、backend#app2.war 等。
  5. 修改您的 nginx 配置以使用 proxy_pass http://localhost:8080/backend

以这种方式命名您的 WAR 文件将为它们提供/backend/app1、/backend/app2 等上下文路径,因此 Tomcat 使用的上下文路径与客户端使用的路径相匹配,从而避免了与更改上下文路径相关的所有问题.

关于tomcat - 转发 Tomcat 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22658318/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com