2

我正在尝试在前端配置 NGINX 并在后端配置 Tomcat 以使其协同工作。

我用 2 个连接器配置了我的 Tomcat server.xml:

<Connector port="8443" protocol="HTTP/1.1" scheme="https" secure="true" proxyPort="443" proxyName="www.myhost.com" connectionTimeout="20000" URIEncoding="UTF-8" />


<Connector port="8080" protocol="HTTP/1.1" scheme="http" proxyPort="80" proxyName="www.myhost.com" connectionTimeout="20000" URIEncoding="UTF-8" />

当用户在http://www.myhost.comhttps://www.myhost.com上调用我的网站时,我的 NGINX 服务器会收到请求。在每次调用(不包括缓存...)时,NGINX 都会根据原始请求的方案(http 或 https)在 8080 端口或 8443 上向我的 Tomcat 服务器发送请求。

它工作正常,但 Tomcat 似乎给我的 webapp 提供了错误的信息(实际上,我的 webapp 是 Liferay)。它给出了错误的服务器主机。

例如,当我在 http://www.myhost.com 上调用我的服务器时, NGINX 在8080端口上调用 Tomcat,但 Liferay 似乎收到了一个带有错误服务器主机的请求(http* s *://www.myhost.com /)。Liferay 使用这个服务器主机来建立链接。实际上,Liferay 正在构建的所有链接都符合这种模式:http* s *://www.myhost.com/....

据我说,根据我的配置,它应该像这样工作:

  • Tomcat 在 8080 端口收到请求。
  • Tomcat 了解我的电话是在http://www.myhost.com上的事实
  • Tomcat 应将 proxyHost (www.myhost.com) 和 proxyPort (80) 提供给 Liferay webapp,因为 Tomcat 在端口 (8080) 上收到消息(Liferay 应使用 request.getServerPort() 和 request.getServerHost() 检索这些信息Tomcat配置
  • Liferay 应该考虑这些信息来构建链接 URL(菜单...)。

这是我的问题。Liferay 得到了错误的配置:https 方案上的配置。

我使用这篇文章来配置 NGINX在 ubuntu 12.04 上安装 nginx 并将其连接到 Tomcat。这篇文章没有解释如何为 https 执行此操作。在我的上下文中,我为 http 和 https 写了两次。

有人已经解决了这个问题吗?

4

2 回答 2

0

这不是推荐的方法。如果你有像 NGINX 这样的代理(在我的例子中是磅),那么 SSL 层应该留给代理。这允许代理检查 HTTP 标头以提供“粘性”会话,其中用户停留在集群外的单个 tomcat Web 服务器上。

在我的情况下,我让 tomcat 在 localhost:8080 上侦听 Pound 在外部 ip:80 上侦听,并且只返回到 https 的重定向(外部 ip:443) Pound 还侦听外部 ip:443,解密 SSL 和代理到 8080 上的 tomcat (实际上是一个tomcats集群)

您还需要在 portal-ext.properties 中设置一些参数:
web.server.http.port=80
web.server.https.port=443
web.server.protocol=https

这告诉 LifeRay 在与 SSL 代理的公共接口匹配的端口 443 上将所有链接生成为 HTTPS。

现在的问题是,如果您直接连接到 8080 上的 tomcat,LifeRay 将生成“错误”链接并将您发送到代理。我还没有找到解决这个问题的方法。

于 2013-05-23T15:38:43.167 回答
0

使用 nginx 站点配置中的这些代码行,可以使用 nginx 作为 Tomcat 安装的反向代理。

server {
  listen 80;
  server_name my.server.com;
  location / {
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        Host    $http_host;
    proxy_pass              http://127.0.0.1:8080;
  }
}

这允许您在 nginx 上设置另一个虚拟主机(server_name),转发到http://127.0.0.1:8080上的 tomcat 安装。在此处添加 SSL/TLS 支持,而不是在 tomcat 配置中。

我没有检查过 webdav,但是使用带有 webbrowser 的门户就像一个魅力。

于 2015-12-14T14:55:47.013 回答