我正在尝试在前端配置 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.com和https://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 写了两次。
有人已经解决了这个问题吗?