多外网服务器地址ip情况下怎么不停服切换

摘要:公司在托管机房有部署elasticsearch服务器。开发需要经常连接机房的elasticsearch集群查看数据,但是如果把elasticsearch集群地址配置成外网是很危险的行为,由于elasticsearch数据库特性,因此只要别人知道你的数据库地址和端口,就可以任意操作你的数据库。这是万万不可取的。解决办法:给elasticsearch-head服务器配置域名不能把ip和端口暴露出去,于是就想到利用es-head插件,给es-head插件配置域名。然后通过访问es-head的地址,然后访问数据,为了安全起见,给es-head配置了帐号和密码配置如下:1、安装 htpasswd 工具 用于生成nginx访问密码 yum
-y install httpd-tools
2、执行 命令创建密码[root@uuu ~]# htpasswd -c /usr/local/src/nginx/passwd es
New password:
Re-type new password:
Adding password for user coderschool
输入密码即可创建密码密码文件记住路径,等下配置nginx会用到。3、配置nginx虚拟主机配置
server {
listen 80;
server_name es-head.qq.com;
location / {
auth_basic "es";
auth_basic_user_file /usr/local/src/nginx/passwd;
#密码文件路径
proxy_pass http://192.168.1.10:9100;
include /conf.d/proxy-params.conf;
}
}
这样就可以通过域名http://es-head.qq.com访问 http://192.168.1.10:9100的内网地址了访问的时候可以会提示输入账号密码,账号填入es,密码填入刚才配置的密码即可。如下图所以。输入账号密码就会出现es界面了进入后,又发现了一个问题es-head中,需要填入es服务器地址,才能访问数据,由于我所在的网络环境和es数据不在同一个网络环境,因此地址不能填写内网地址,只能填写外网。这就尴尬,搞了半天,还是无法连接数据库。后来想到了nginx有一个限定ip访问域名的功能,刚好可以用上。给elasticsearch数据库配置域名,并限定特定的ip访问于是修改nginx虚拟主机配置配置一upstream es.qq.com
{
server 192.168.1.10:9200
weight=1;
server 192.168.1.11:9200
weight=1;
server 192.168.1.12:9200
weight=1;
server 192.168.1.13:9200
weight=1;
#ip_hash;
}
# 上面我做了一个集群,和nginx负载均衡,可以删除。如果删除了,请参考配置二
server {
listen 80;
server_name es.qq.com;
location / {
include
/usr/local/src/nginx/es-allow-ip.conf;
deny all;
proxy_pass http://es.qq.com;
include /conf.d/proxy-params.conf;
}
}
推荐配置二(不是集群的,或者有集群的都可以使用配置二):server {
listen 80;
server_name es.qq.com;
location / {
include
/usr/local/src/nginx/es-allow-ip.conf;
deny all;
proxy_pass http://es.qq.com;
include /conf.d/proxy-params.conf;
}
}
/usr/local/src/nginx/es-allow-ip.conf;文件内容格式如下:
allow 114.114.114.114;
114.114.114.114 是你的外网ip,如果你的外网ip是固定ip,那就现在就完事了,但是很多的外网ip是动态ip。因为这个也需要动态操作的。动态更新限定的ip,从而达到限制其他人访问的目的更新本地的动态ip。需要用到动态ddns解析,这个腾讯云和阿里云都有接口,百度一下怎么操作。就是一旦自己的外网ip变化了,就会动态解析到设定的域名上面去,我配置了一个域名test.qq.com,然后我通过获取这个域名的解析地址,知道我的外网ip、python2代码如下:python3代码略有不同。# -*- coding: utf-8 -*-
import os
import socket
result = socket.getaddrinfo("test.qq.com", None)[0][4][0]
with open('/usr/local/src/nginx/es-allow-ip.conf','r') as f1 :
ip = f1.readline()[6:][:-1]
if ip != result:
print ip
print result
with open('/usr/local/src/nginx/es-allow-ip.conf','w') as f2 :
f2.write('allow ' + result+';')
os.system('nginx -s reload')
print('ip改变')
else:
print('ip未改变')
然后我配置一个定时任务,每小时执行一次crontab -e
1 * * * * python /root/update_ip.py >> /root/update_ip.log
这样就实现了外网ip自动更新白名单的操作。从而实现了整个业务的需求。上面就是效果图。已经可以取到东西了、
通俗地讲:把ip地址类比为电话号码。原先使用32位的号码,那时世界上的电话总共没有几部。有人来申请电话号码,一给就是一大块,很是浪费。后来世界上的电话装机量急速扩张,电话号码逐渐不够用。所以将10.0.0.0~10.255.255.255\\ 172.16.0.0 ~172.31.255.255\\ 192.168.0.0~192.168.255.255 这几个号码单独拎了出来,规定几个号码作为分机号,电话网上不会出现这几个号码,以免造成冲突。规则是美国制定的,美国很多机构不屑于搞分机号,直接公网当做私网用,因为掌握的号码资源丰富,不需要搞分机号。但是对于中国来说,人口多,号码资源少,大部分人就只能用分机号,很多还是分机号套分机号。这种情况是把双刃剑,一方面,用心不良之人只能找到总机,无法越过分机去给你打骚扰电话。另一方面,通过总机转接,又使正常访客无法直接找到你。总之,接分机的办法只是权宜之计。由于旧的电话号码没办法直接升位,于是,有人重新设计了全新的电话号码,称为ipv6,而之前的是ipv4,为什么没有ipv5呢?可能是夭折在实验室了吧。新的号码系统位数大幅扩展,128位。这个数字足够全世界的每粒沙子都分配到一个号码,解决了数量不足的问题。新号码系统好用是好用,但是由于和旧号码系统不能直接互通。有大量的老设备不支持新系统。最最关键的是那些拥有大量旧号码资源的人,还指着买卖、出租这些资源盈利,因此对新号码系统的推广极不热心、甚至抵制。但国家于2017年发布了《推进互联网协议第六版(IPv6)规模部署行动计划》,强制要求2018年以后的光猫支持ipv6,但基于现实的需要,现阶段ipv4和和ipv6并行。ipv4与ipv6而通过网站查询的ipv4地址,只是接入你的总机号,可能接了好几次分机,并不是终端上真实的ip地址。同时,运营商为了节约ipv4地址,只有你提出访问请求了,才会给你一个临时的总机号。ip地址这些网站都是返回的地址信息都是数据库提供的,并不能保证准确性。所以你的ipv4地址就可能不停发生变化了。从图上看,运营商中国电信已经给你提供了ipv6地址。就是图上那个240e开头的ip地址,为了安全,建议不要暴露自己的ip地址。

我要回帖

更多关于 外网服务器地址 的文章