是否可以使用http和https使NGINX在Tomcat上与Liferay一起工作?

是否可以使用http和https使NGINX在Tomcat上与Liferay一起工作?,https,proxy,nginx,liferay,tomcat7,Https,Proxy,Nginx,Liferay,Tomcat7,我正在尝试在前端配置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" /> <Connect

我正在尝试在前端配置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在端口(8080)上收到消息时,应将proxyHost(www.myhost.com)和proxyPort(80)交给Liferay webapp(Liferay应使用request.getServerPort()和request.getServerHost()检索这些信息)
  • LIFELAY应该考虑这些信息来建立链接URL(菜单…)。
这是我的问题。Liferay获得了错误的配置:https方案上的配置

我用这篇文章来配置NGINX。 这篇文章没有解释如何为https实现这一点。 在我的上下文中,我为http和https写了两次


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

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

在我的例子中,我让tomcat在localhost:8080上监听 Pound侦听外部ip:80并仅返回重定向到https(外部ip:443) Pound还监听外部ip:443,解密SSL和8080上tomcat的代理(实际上是一个tomcat集群)

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

这告诉LifeRay在端口443上以HTTPS的形式生成所有链接,该端口匹配SSL代理的公共接口


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

在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上设置另一个虚拟主机(服务器名称),并转发到您的tomcat安装。在此处添加SSL/TLS支持,而不是在tomcat配置中


我还没有检查webdav,但是使用带有webbrowser的门户网站非常有魅力

请发布您的nginx.conf文件。