我的应用程序 example.com 具有以下配置:
- Nginx 作为反向代理,将流量从端口 80 重定向到:
- 我部署 JSF 应用程序的 Tomcat 7,端口 8080
- 我的 xhtml 文件主要在 ROOT 文件夹中:/usr/local/tomcat7/webapps/ROOT
- 但是我在单独的文件夹“forum”中有一些文件:/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 中看到后缀“/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;
}
}
问题:
- 如果我单击“论坛”文件夹中文件“topic.xhtml”的链接(POST 请求),则 URL 将为 forum.example.com/forum/topic.xhtml而不是我想要的 forum.example.com/topic.xhtml。
- 用户能够正常访问forum.example.com/anotherPageFromROOT.xhtml
有人能帮我看看我应该做什么吗?谢谢!
编辑:
我认为第一个问题的根本原因是 JSF 为我的 h:form
生成的 action
。它始终由 /forum/
生成。
最佳答案
问题 #1 是房间里的大象。您不能(afaik)告诉 Tomcat 从非 ROOT 文件夹提供页面,就好像它们在 ROOT 文件夹中一样(即,不在生成的 URL 中添加文件夹名称)。 Context
设置元素有一个 path
属性,但根据个人经验,更改它并不是一个好主意(portlet 部署错误,portlet 部署两次,资源使用双倍,等等)。
如果 Tomcat 有这样的设置(告诉一个文件夹中的 portlet 生成根 url)然后尝试使用它,否则你唯一的选择是在根文件夹中使用正确的文件设置另一个 Tomcat,这样生成的 URL不会有文件夹前缀。
解决此问题后,您可以继续解决问题 #2。如果您使用 ROOT 文件夹中的论坛文件设置不同的 Tomcat,问题就会消失;否则让我们知道你做了什么。
关于tomcat - Nginx 和 Tomcat - 子域指向子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30769891/