这几天一台云上的服务器到期了,想搞个奇思妙想在云上买一个配置一般的vps做代理服务器,监听特定端口转发到内网。即本地环境通过另外一种方式配置到云上访问。
请大家注意,这种方式相比frp来说安全一点,但是一定要注意内网服务器本身的安全性,另外还要设ACL规则,明确来源IP,网关策略一定要配置妥当,要不然真不是开玩笑的,如果大家想试一下,可以按照我的步骤试试。
环境说明:
centos7 / nginx / proxy / acme-ssl / 一个可以运行的website

  1. 安装haproxy
yum install haproxy
  1. 打开proxy的配置文件:
vim /etc/haproxy/haproxy.cfg

打开之后的需要更改默认配置项,我的目标是监听443端口,把请求的流量由公网IP端口转发到内网环境,然后反代渲染数据(简单来说就是把443端口的流量都转到内网了)。先把我的配置文件改动给大家标出,达到可用地步。

haproxy转发静态文件 haproxy配置转发_代理服务器


需要添加的是:

listen web
        bind *:443
        mode tcp
        option tcplog
        timeout client  10800s
        timeout server  10800s
        default_backend webserver

backend webserver
        balance roundrobin
        server 起个别名 你公司的公网IP:端口 send-proxy

注意,我这里是监听的443端口,大家可以根据自己的需要监听其他任何端口,比如80等,需要提醒大家的是,如果在这个代理服务器上出现了多个站点,那么这个代理服务器上所有站点的443端口的流量都将被转发。

  1. 重启服务:
    systemctl restart haproxy
  2. 查看端口监听情况:
netstat -ntlp

haproxy转发静态文件 haproxy配置转发_haproxy转发静态文件_02


可以看到端口已被监听,正常。

5. 下面开始设置内网环境

说明:我的网站是用nginx代理的,此时需要接收内网转给我们的流量,接收用proxy_protocol声明一下就行。

为了保证内网可以直接访问,我这里直接复制了一份server,相当于增加了一个虚拟站点,指定webroot即可。

haproxy转发静态文件 haproxy配置转发_内网_03


6. 重启nginx

7. 至此,我们内网可以访问,外网访问域名的时候,可以直接从代理服务器转发到内网,完成了我们的目的。还需要说明一点,我的ssl是acme自签,关于域名解析与acme签证的问题我将在下一篇文章中给与介绍。