Nginx和Tomcat – 指向子目录的子域名

我有我的应用程序example.com的以下configuration:

  1. Nginx作为反向代理将stream量从端口80redirect到:
  2. Tomcat 7,我部署我的JSF应用程序,端口8080
  3. 我的xhtml文件大部分在ROOT文件夹中:/ usr / local / tomcat7 / webapps / ROOT
  4. 但是我在一个单独的文件夹“forum”中有一些文件:/ usr / local / tomcat7 / webapps / ROOT / forum

这是我的默认nginxconfiguration:

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 。 也就是说,我不希望在URL中看到sufix“/ forum /”。 我希望论坛文件夹的行为作为 。 所以,如果用户尝试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”,则URL将是forum.example.com/forum/topic.xhtml而不是forum.example.com/topic。 xhtml,因为我想要的。
  2. 用户可以正常访问forum.example.com/anotherPageFromROOT.xhtml

有人可以帮我做我应该做的吗? 谢谢!

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

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

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

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