【发布时间】:2015-08-26 12:07:32
【问题描述】:
我的应用程序 example.com 有以下配置:
- Nginx 作为反向代理将流量从端口 80 重定向到:
- Tomcat 7,我在其中部署 JSF 应用程序,端口 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 中看到后缀“/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;
}
}
问题:
- 如果我点击链接(POST 请求)到文件“topic.xhtml”,也在“forum”文件夹中,URL 将是 forum.example.com/forum/topic.xhtml而不是我想要的 forum.example.com/topic.xhtml 。
- 用户可以正常访问forum.example.com/anotherPageFromROOT.xhtml
有人可以帮我解决我应该怎么做吗?谢谢!
编辑:
我认为第一个问题的根本原因是 JSF 为我的h:form 生成的action。它始终使用/forum/ 生成。
【问题讨论】:
-
proxy_pass url 以 /(斜杠)结尾 删除斜杠会发生什么?
-
嗨@itpp13,我没有发现任何区别,两个问题仍然存在
-
重写 /forum/([^/]+) /$1 break;
-
当以
/forum.xml访问时,您的应用会在返回的 html 中生成正确的链接吗? -
嗨@itpp13,我相信这正好相反。它将 URL 中包含
/forum/的任何内容重定向到 ROOT 文件夹,因此是我的索引页面。用这个覆盖我之前的重写,它将进入我的索引页面http://example.com。添加你的重写并保留我的,当我点击带有POST请求的链接时,在chrome控制台中我得到GET http://example.com/forum/ 404 (Not Found)。
标签: tomcat nginx url-rewriting rewrite reverse-proxy