Nginx将每个请求转发给apache tomcat

时间:2014-03-19 09:41:08

标签: tomcat dynamic nginx subdomain instance

所以我有一个基本的设置。我有一个名为domain.com的主域名。在它下面是3个子域。 sub1.domain.com,sub2.domain.com和sub3.domain.com。现在我想将每个请求转发给tomcat,但是我有一个vhost设置,子域是动态的。因此,当我将请求转发到tomcat时,sub1.domain.com可以从sub2.domain.com访问应用程序,因为它们都运行在同一个tomcat实例上。是否可以动态传递此信息。即,当我添加一个新的子域名时,它会自动与其他tomcat实例分开,并且能够获得自己的tomcat实例吗?

这是我的nginx.conf:

server {
    listen          80;
    server_name     *.domain.com;
    root            /var/www/$host;
    index           index.php index.html index.htm;

    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_forwarded_for;
            proxy_pass http://localhost:8080;
    }

   if (-e /var/www/$host/ssl/$host) {
            rewrite ^ https://$host$request_uri? permanent;
    }

}

我还有一个https服务器块,但目前并不重要。在第二个注释中,当我尝试访问后端时,我得到404,我该怎么做才能解决这个问题?那么当我去sub1.domain.com/backend时,我得到了tomcat接口?

我对我的nginx.conf文件进行了一些更改,我摆脱了Tomcat 404页面,我可以看到Tomcat正在工作......很好。我可以阅读文字,但就是这样。没有图形界面没有图片只是文字和链接。这就是我的配置文件的样子。

#DOMAIN.COM

upstream backend {
        server          localhost:8080;
}

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

    ssl_certificate certificates/klant.nl.crt;
    ssl_certificate_key certificates/klant.nl.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_forwarded_for;
            proxy_pass http://backend/;
    }
}

我知道出了什么问题......感觉非常愚蠢。我应该导航到domain.com/backend/而不是domain.com/backend。

1 个答案:

答案 0 :(得分:0)

如果Tomcat不关心目标主机名,则将所有域的所有请求映射到Tomcat,并在Tomcat集中使用单个<Host>作为{{1}的defaultHost }}

这是Tomcat默认配置的方式:<Engine>主机,它是引擎的默认主机。部署到该主机的任何Web应用程序(默认情况下都在localhost中)将响应任何进入的请求,无论HTTP webapps/标头的内容是什么,它通常选择将处理该虚拟主机的虚拟主机请求。