转发Tomcat请求

时间:2014-03-26 10:37:17

标签: tomcat nginx

我有一个域名,其中包含在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/;
    }


}

1 个答案:

答案 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路径来命名前几个想到的。您可以在反向代理中解决这些问题,但这是一个巨大的痛苦。保持上下文路径相同会好得多。

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

  1. 创建/var/tomcat/webapps
  2. 将您主机的appBase(在server.xml中)配置为/var/tomcat/webapps
  3. 将WAR文件和目录部署到/var/tomcat/webapps
  4. 为您的WAR后端命名#app1.war,backend#app2.war等。
  5. 修改您的nginx配置以使用proxy_pass http://localhost:8080/backend
  6. 以这种方式命名WAR文件将为它们提供/ backend / app1,/ backend / app2等的上下文路径,因此Tomcat使用的contenxt路径与客户端使用的路径匹配,避免了与更改上下文路径相关的所有问题