我有一个域名,其中包含在nginx中运行的PHP和Tomcat的混合。这是它的外观。 我在这个网站上有一个域 example.com 我有一个Wordpress安装。这根本不是问题。 现在我想要的是当你导航到 example.com/backend 它被转发到Tomcat时。
现在我仍然有默认安装,我安装的每个新webapp都需要放在/ tomcatinstallationfolder / webapps中。我希望能够将这些应用程序放在我站点的docroot中的后端目录中。我如何配置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/;
}
}
答案 0 :(得分:0)
这里有很多回应。
通常,重叠Tomcat和反向代理用于提供内容的位置是一个坏主意。因此,如果您的"后端"目录是/var/www/backend
,我强烈建议将/backend
目录移到其他地方,例如/var/tomcat/webapps
。原因是安全性。除非您完全正确地获得配置,否则您最终可以使用反向代理服务它不应该包含的内容,例如JSP的源代码或web.xml的内容。
接下来,您将更改代理中应用程序的内容路径。这将导致各种微妙的问题。我的意思是对example.com/backend/myapp的请求将被路由到localhost:8080 / myapp。在反向代理处,上下文路径为/backend/myapp
,但在Tomcat中,上下文路径为/myapp
。像这样改变上下文路径会破坏各种各样的事情,包括重定向,链接但是在应用程序中动态,cookie路径来命名前几个想到的。您可以在反向代理中解决这些问题,但这是一个巨大的痛苦。保持上下文路径相同会好得多。
考虑到上述情况,我建议您使用以下设置:
/var/tomcat/webapps
/var/tomcat/webapps
/var/tomcat/webapps
proxy_pass http://localhost:8080/backend
以这种方式命名WAR文件将为它们提供/ backend / app1,/ backend / app2等的上下文路径,因此Tomcat使用的contenxt路径与客户端使用的路径匹配,避免了与更改上下文路径相关的所有问题