公司有一个通过https进行访问的工具,这工具要多环境各一个,而且必须要有外网ip,无奈,只能前端做https的转发,但问题是我们这工具必须要求用域名访问,所以一定要能有一个基于域名(7层)的https转发工具………… 所以……本来设想的好好的LVS也跪了=。= 怎么办,又要轻量级,又要能支持域名,在网上找了半天,终于找到了一个开源的好工具!

HTTPS-SNI-Proxy ! 
Github地址:https://github.com/dlundquist/HTTPS-SNI-Proxy

官方给出的工具功能:

Features

  • Namebased proxying of HTTPS without decrypting traffic. No keys or certificates required.
  • Supports TLS and HTTP
  • Supports IPv4, IPv6 and Unix domain sockets for both back end servers and listeners.
  • Supports multiple listening sockets per instance.
  • 支持基于域名的HTTPS代理,并且是全文转发不需要加/解密的认证.
  • 还支持TLS协议和HTTP协议!
  • 支持IPv4,IPv6,Unix Domain Socket.
  • 支持每个实例监听多Socket.

功能我们都看到了,软件小巧玲珑,简直就是为了我们要实现的功能而生的!下面就是软件安装实施的部署了~

1.下载安装

wget https://github.com/dlundquist/HTTPS-SNI-Proxy/archive/master.zip
unzip master
cd HTTPS-SNI-Proxy-master/
./autogen.sh
./configure --prefix=/usr/local/https-sni-proxy
make install

2.配置

我们将软件安装在了/usr/local/https-sni-proxy目录下,可以简单的看到实际上目录里只有两个可用的东西,一个是sbin下的软件本身,一个是conf下的配置文件示例。程序的启动实际上非常简单,只需要运行sbin下的sni_proxy程序即可。这个程序会自动读取/etc/sni_proxy.conf文件(当然默认是木有的,需要自己去创建),也可以使用-c命令来指定去读哪个配置文件。

为了方便,我这里直接在/etc下创建一个配置文件让它自己默认去读。它的配置文件内容可以说简单易懂,我这里贴出我现在正在用的配置文件仅供大家参考。

vim /etc/sni_proxy.conf

sni_proxy.conf
# sni_proxy example configuration file
# lines that start with # are comments
# lines with only white space are ignored

user nobody

# blocks are dilimited with {…}
#listen 80 {
#        proto http
#        table http_hosts
#}

listen 443 {
        proto tls
        table https_hosts
}

# named tables are defined with the table directive
#table http_hosts {
#        wy02.weiyan.me 172.16.68.16 80
#        wy03.weiyan.me 172.16.68.17 80
#        wy04.weiyan.me 172.16.68.18 80
# }

# named tables are defined with the table directive

table https_hosts {
# when proxying to sockets you should use different tables since the socket server most likely will not autodetect TLS or HTTP
        support02.weiyan.me 172.16.68.12 443
        support03.weiyan.me 172.16.68.13 443
        support04.weiyan.me 172.16.68.14 443
}

相信大家一眼就可以看出来它的简单用法了。这个配置文件中我只示例了https的用法,http的功能注释掉了,需要的同学可以用起来。

之后就是启动了。

/usr/local/https-sni-proxy/sbin/sni_proxy

接下来,你可以做一个简单的自启动加到init.d下,方便管理。