一、背景:(1)公司两条adsl拨号光纤宽带,获取的是动态公网ip;(2)公司内网有上百台虚拟机,需要对外提供服务;(3)公司有一腾讯云主机公网ip(aa.bb.cc.dd)(centos系统);
二、目的:(1)减少购买公网ip资源部署内网上百台虚拟机服务;(2)在腾讯云公网ip上搭建nginx服务器,反向代理到公司内网ip集群;
三、公司网络拓扑结构:2条电线adsl拨号宽带---panabit(边界网关)---华为三层核心交换机(dhcp、vlan服务)---二层接入层交换机;
四、方法:(1)内网某ip(centos系统)固定地通过某个条拨号网络向腾讯云公司ip发包;(2)腾讯云公网ip通过脚本获取并动态追踪公司拨号宽带公网ip;(3)在腾讯云公网ip上搭建nginx服务器,通过域名,反向代理到内网ip集群;
五、nginx反向代理流程:腾讯云公网ip(nginx/域名)---panabit(端口转发)---内网某ip(nginx服务器/域名)--内网ip集群;
实际操作:
1、假设内网192.168.110.115向腾讯云公网ip一直发包;此机器是centos7系统,利用系统自带crontab机制定时发包,一分钟执行一次;
cd /etc/
vim crontab
* * * * * root curl http://aa.bb.xx.dd:6666
以上5个 * 表示分、时、日、月、周;root用户模式;curl命令向aa.bb.cc.dd的6666端口发包;每分钟执行一次;
2、进入腾讯云公网ip;
yum install httpd -y
cd /etc/httpd/conf/
vim httpd.conf
修改Listen监听端口为6666;
Listen 6666
修改访问日志显示格式;
<IfModule log_config_module>
LogFormat "%h" combined
LogFormat "%h" common
</IfModule log_config_module>
以上表示httpd的access_log日志只显示来访ip;
修改后,保存;(:wq!)
systemctl start httpd
3、在腾讯云公网ip上编写获取公司动态公网ip的脚本
cd /etc/
mkdir cron.minute
vim nginx-skieer.sh
脚本内容如下:
vim nginx-skieer.sh
#by kevin
#2018-07-03
a = `tail -n 1 /var/log/httpd/access_log' (注意`符号是1键前面的符号,变量a就是公司动态公网ip)
b = “$a abc.com”
cd /etc/
sed -i '$d' hosts (表示删除hosts文件最后一行)
echo $b >> hosts (表示将$b代表的字符串追加到hosts文件最后一行)
保存退出;(:wq!)
chmod 777 nginx-skieer.sh (赋予可执行权限)
cd /etc/
vim hosts
最后添加一行
100.100.100.100 abc.com
以上表示,通过nginx-skieer.com脚本获取到公司动态公网ip,并将100.100.100.100 abc.com对应起来;
cd /etc/
vim crontab
* * * * * root /etc/cron.minute/nginx-skieer.sh
以上5个“*”表示分、时、日、月、周;nginx-skieer.sh是发包脚本;root表示root用户;以上意思是:每分钟执行一次nginx-skieer.sh脚本
到此,腾讯公网ip(aa.bb.cc.dd)可以动态追踪到公司动态公网ip;并在本机上,将公司动态公网ip与abc.com对应起来;
4、在腾讯公网ip上配置nginx服务
yum install -y epel-releasey
yum install -y nginx
cd /etc/nginx
vim nginx.conf
server段修改该下:
upstream t.bzy.skieer.com{
server abc.com:12139;
}
server {
listen 80;
server_name t.bzy.skieer.com;
location / {
proxy_pass http://t.bzy.skieer.com;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
}
}
upstream dataservice.skieer.com{
server abc.com:12139;
}
server {
listen 80;
server_name dataservice.skieer.com;
location / {
proxy_pass http://dataservice.skieer.com;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
}
}
保存;(:wq!)
systemctl start nginx
将t.bzy.skieer.com与dataservice.skieer.com解析到腾讯云公网ip(aa.bb.cc.dd)上;
5、在公司边界网关panabit上,配置wan口的12139端口与某一个内网ip(nginx服务器,192.168.0.102)80端口转发;(具体配置教程,学习panabit操作)
6、在192.168.0.102上配置nginx
nginx.conf与腾讯云公网ip基本一致,只不过两个Location中的proxy_pass执行实际提供服务的ip与端口即可;
保存;
systemctl start nginx;
7、至此基本完成,中间遇到的小问题,一般关于防火墙是否关闭,服务是否启动,端口是否放行等。