使用HTTPS

时间:2018-12-14 16:13:54

标签: https apache2 tomcat8 proxypass

我在服务器上的端口8080中安装了Tomcat 8,我正在使用安全的Apache(使用Proxy Pass)对其进行公开。

这是我的Apache配置:

<VirtualHost *:443>
    ServerName myserver.com

    ProxyRequests Off
    ProxyPreserveHost On

    ProxyPass           /odata/    http://172.31.33.105:8080/
    ProxyPassReverse    /odata/    http://172.31.33.105:8080/

    <Proxy *>
        allow from all
    </Proxy>

    RequestHeader set X-Forwarded-Port 443
    RequestHeader set X-Forwarded-Scheme https
</VirtualHost>

这是Tomcat server.xml配置

<Connector port="8080" protocol="HTTP/1.1"
            connectionTimeout="20000"
            redirectPort="8443" 
            address="172.31.33.105" 
            proxyName="myserver.com" 
            scheme="https"  />

一切正常,直到这里。如果我致电我的申请: https://myserver.com/odata/D3a1593adae89/odata.svc/

我得到:

<service xmlns="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom" xml:base="https://myserver.com:443/D3a1593adae89/odata.svc/">
<workspace>
<atom:title>Default</atom:title>
<collection href="Maintables">
<atom:title>Maintables</atom:title>
</collection>
</workspace>
</service>

问题::如果在结果中看到属性 xml:base ,则Tomcat用端口装饰地址,而我真的不知道如何删除它。最初,Tomcat没有 scheme =“ https” 的装饰,就像 http://myserver.com.com:80 一样装饰了xml:base。我一直在环顾四周,尝试将 proxyPort 设置为空白但什么也没做。

1 个答案:

答案 0 :(得分:1)

对于端口,使用ProxyPreserveHost On并设置X-Forwarded-*标头时,可以使用RemoteIpValve

<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" /> 

连接器将很简单:

<Connector port="8080" protocol="HTTP/1.1"
            connectionTimeout="20000"
            redirectPort="443" 
            address="172.31.33.105" 
             />

阀门检测到proto,并假定使用默认端口号(https://xxxxx/yyy)来确保连接的安全性。

对于位置,您应该在odata上下文中部署应用程序,以便可以使用

    ProxyPass           /odata    http://172.31.33.105:8080/odata

修改代理传递(从/ odata /到/)上的上下文有些棘手,因为您将需要过滤来自后端服务器的所有文本以修复某些url路径。真的很痛苦(我应该用“ / odata / xxx”替换所有的“ / xxx”吗?)