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


Nginx作为反向代理,将流量从端口80重定向到:
我在其中部署JSF应用程序的Tomcat 7端口8080
我的xhtml文件主要位于ROOT文件夹中:/ usr / local / tomcat7 / webapps / ROOT
但是我在单独的文件夹“论坛”中有一些文件:/ usr / local / tomcat7 / webapps / ROOT / forum


这是我的默认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。也就是说,我永远都不想在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;
 }
}


问题:


如果我也在“论坛”文件夹中单击指向“ topic.xhtml”文件的链接(POST请求),则URL将是forum.example.com/forum/topic.xhtml而不是forum.example.com/topic。我想要的xhtml。
用户可以正常访问forum.example.com/anotherPageFromROOT.xhtml


有人可以帮我做什么吗?谢谢!

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

最佳答案

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

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

解决此问题后,您可以继续进行问题2。如果您用ROOT文件夹中的论坛文件设置了另一个Tomcat,则问题将消失。否则,请告诉我们您的工作。

关于tomcat - Nginx和Tomcat-指向子目录的子域,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30769891/

10-11 06:20