我的应用程序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/