Nginx和Tomcat - 指向子目录的子域

时间:2015-06-11 01:04:55

标签: tomcat nginx url-rewriting rewrite reverse-proxy

我的应用程序 example.com 具有以下配置:

  1. Nginx作为反向代理,用于将流量从端口80重定向到:
  2. Tomcat 7,我部署了我的JSF应用程序,端口8080
  3. 我的xhtml文件大多位于ROOT文件夹中:/ usr / local / tomcat7 / webapps / ROOT
  4. 但我在一个单独的文件夹“论坛”中有一些文件:/ usr / local / tomcat7 / webapps / ROOT / forum
  5. 这是我的默认nginx配置:

    server {
        server_name  www.example.com;
        return 301 $scheme://example.com$request_uri;
    }
    server {
      listen          80;
      server_name     example.com.br;
      root            /usr/local/tomcat7/webapps/ROOT;
      location / {
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8080/;
      }
    }
    

    因此,要访问论坛页面,我必须转到 example.com/forum/forum.xhtml (forum.xhtml是索引)

    现在,我正在尝试在nginx中设置一个子域 forum.example.com ,它将指向论坛文件夹,保留网址。也就是说,我不希望在URL中看到sufix“/ forum /”。我希望论坛文件夹的行为与 root 相同。因此,如果用户尝试 forum.example.com/anotherPageFromROOT.xhtml ,他将无法做到。

    这是我到目前为止所做的:

    server {
     listen          80;
     server_name     forum.example.com;
    
     location / {
           proxy_set_header X-Forwarded-Host $host;
           proxy_set_header X-Forwarded-Server $host;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_pass http://127.0.0.1:8080/;
           rewrite ^/$ /forum/forum.xhtml break;    
     }
    }
    

    问题:

    1. 如果我在“论坛”文件夹中点击链接(POST请求)到文件“topic.xhtml”,则该网址将为 forum.example.com/forum/topic.xhtml 而不是我想要的 forum.example.com/topic.xhtml
    2. 用户可以正常访问 forum.example.com/anotherPageFromROOT.xhtml
    3. 有人可以帮助我做我应该做的事吗?谢谢!

      编辑: 我认为第一个问题的根本原因是JSF为我的action生成的h:form。它始终使用/forum/生成。

1 个答案:

答案 0 :(得分:0)

问题#1是这里房间里的大象。你不能(afaik)告诉Tomcat从非ROOT文件夹中提供页面,就好像它们在ROOT文件夹中一样(即,没有在生成的URL中添加文件夹名称)。 path设置元素有一个Context属性,但从个人经验来看,更改它(门户组件部署中的错误,使用双重资源的portlet部署两次,等等)并不是一个好主意。 / p>

如果Tomcat有这样的设置(告诉文件夹中的portlet生成根URL),那么尝试使用它,否则你唯一的选择就是在根文件夹中设置另一个带有正确文件的Tomcat,这样生成的URL将没有文件夹前缀。

一旦解决了这个问题,你就可以继续讨论问题#2。如果您使用ROOT文件夹中的论坛文件设置不同的Tomcat,问题就会消失;否则,让我们知道你做了什么。