使用Apache

时间:2016-09-11 06:54:25

标签: apache ssl proxy

我有以下设置:

  • 一个公共IP
  • 指向上述相同IP的2个不同域名:domain1.com和domain2.com
  • 2个不同的ssl证书:一个用于domain1.com,另一个用于domain2.com
  • 运行Apache2和debian 8.5的同一局域网(192.168.1.10和192.168.1.20)上的2台物理机

我测试了两台服务器独立地将443端口流量转发到其中一台机器。他们的工作很好。

现在,我将所有到达公共IP的端口443请求转发到192.168.1.10的第一台服务器,我希望此服务器充当https://domain1.com的https服务器并重定向{{{}的请求3}}解决192.168.1.20

我试图在第一台机器中配置反向代理。它确实将域2的请求重定向到192.168.1.20的机器,但它为domain1提供证书。 如何配置反向代理以便为每个服务器提供正确的证书?

提前谢谢你。 朱莉娅

3 个答案:

答案 0 :(得分:0)

最简单"解决方案" (好的,解决方法)是使用包含两个主机名的单个证书。如果您不能这样做,那么您需要配置Apache SNI,如下所示:SSL with Virtual Hosts Using SNI

答案 1 :(得分:0)

有人建议我尝试使用Apache2反向代理。 这有点工作但你必须在运行Apache2的机器上安装所有证书。因此,局域网上的流量不再是https,这不符合我的要求。

解决方案是使用haproxy。此程序包可以设置为https的传递。互联网上有很多此类应用的例子。它完全符合我的要求:我可以使用一个公共IP在nat路由器后面的LAN上托管许多https服务器。该流量由haproxy作为https发送到LAN上指示的服务器。如果有人有兴趣,我将很乐意分享我的配置文件,正好解决了我在问题中提出的问题。

答案 2 :(得分:0)

致Robert M: 这是我在默认haproxy.cfg文件末尾添加的配置:

    frontend ft_https
    mode tcp
    option tcplog
    bind *:443

    tcp-request inspect-delay 5s
    tcp-request content accept if { req.ssl_hello_type 1 }

    acl domain1_com req.ssl_sni -m end  domain1.com # all url ending with domain1.com   
    acl domain2_com req.ssl_sni -i www.domain2.com # exactly www.domain2.com

    use_backend b_domain1_com if domain1_com
    use_backend b_domain2_com if domain2_com
    default_backend b_default

    backend b_default
    mode tcp
    option tcplog
    server srv_default 127.0.0.1:1443

    backend b_domain1_com
    mode tcp
    option tcplog
    server srv_domain1 192.168.1.10:1443

    backend b_domain2_com
    mode tcp
    option tcplog
    server srv_domain2 192.168.1.20:443

我不得不将第一台服务器上的apache的https端口更改为1443,因为haproxy和apache都不能绑定到同一台机器上的443端口,但它对用户是透明的。