26.利用nginx反向代理做公司内网集群

一、背景:(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、至此基本完成,中间遇到的小问题,一般关于防火墙是否关闭,服务是否启动,端口是否放行等。



猜你喜欢

转载自blog.csdn.net/kevinsingapore/article/details/80899517