tomcat - Nginx 和 Tomcat - 子域指向子目录

标签 tomcat nginx url-rewriting reverse-proxy

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

  1. Nginx 作为反向代理,将流量从端口 80 重定向到:
  2. 我部署 JSF 应用程序的 Tomcat 7,端口 8080
  3. 我的 xhtml 文件主要在 ROOT 文件夹中:/usr/local/tomcat7/webapps/ROOT
  4. 但是我在单独的文件夹“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;    
 }
}

问题:

  1. 如果我单击“论坛”文件夹中文件“topic.xhtml”的链接(POST 请求),则 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 有这样的设置(告诉一个文件夹中的 portlet 生成根 url)然后尝试使用它,否则你唯一的选择是在根文件夹中使用正确的文件设置另一个 Tomcat,这样生成的 URL不会有文件夹前缀。

解决此问题后,您可以继续解决问题 #2。如果您使用 ROOT 文件夹中的论坛文件设置不同的 Tomcat,问题就会消失;否则让我们知道你做了什么。

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

相关文章:

tomcat - 如何配置 tomcat 7 为每个应用程序使用不同的 css/js 文件

php - docker nginx 502错误的网关

angular - Angular 应用的 Nginx 反向代理

PHP库存管理注册

javascript - 使用 jQuery 在单击时更改当前 URL

java - tomcat中的Spring警告输出 "Failed to create a session"

tomcat - 分析 Tomcat 中 Web 应用程序的覆盖率

java - 从 Netbeans 11.2 启动 tomcat9 失败

nginx - 流浪的: config. vm.provision不允许我将文件复制到etc/nginx/conf.d吗?

codeigniter - 如何从 url codeigniter 中删除参数