范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

用Nginx反向代理Docker化你的IP地理定位服务

  必须安装Docker并运行docker守护进程。运行docker命令的用户可能被添加到docker组,否则你可能需要sudo权限来运行这些命令。(可选)在IP Geolocation API创建一个账户,并复制API密钥。一个自签的证书。(https://getacert.com/selfsignedcert.html)一个有效的域名。
  在本教程中,我们将研究如何将一个运行ip-geolocation服务的flask应用程序、一个用于缓存的redis容器和一个配置了反向代理的nginx容器docker化。我们将创建一个自定义的桥,以实现容器之间基于名字的通信。所有被创建的容器都将被连接到这个桥上。请求由nginx容器接收,该容器被配置为反向代理服务器,将请求转发到配置的后端容器。我们有3个API容器,运行一个flask应用程序,编码为联系所提供的API服务,以获取和服务所提供的IP地址的详细信息。数据缓存服务是由redis容器提供的。 当我们第一次请求一个IP地址的详细信息时,API容器首先检查redis容器,看是否有任何缓存的信息。如果有的话,就直接从redis容器中提供详细信息。如果没有,该容器就会与API服务提供商联系,收集数据,然后将其发送到redis容器中进行服务和缓存。
  按照此文件创建一个秘密来存储你的API密钥。我们将配置API容器以从秘密管理器中获取密钥。mkdir -p ip-geo/{conf,ssl} ; cd ip-geo/git clone https://github.com/sreehariskumar/ip-geo-location-finder.git
  conf子目录用来保存nginx的配置文件,ssl子目录用来保存自签名的证书。
  这些文件可以从git库中克隆。cat app.py  import os import requests import json import redis from flask import Flask , jsonify , make_response import boto3  def get_seceret(*,secret_name=None,secret_key=None,region_name=None):    secrets_client = boto3.client(service_name ="secretsmanager",region_name=region_name)   response = secrets_client.get_secret_value(SecretId=secret_name)   ipstack_secrets = json.loads(response["SecretString"])   return ipstack_secrets[secret_key]   def get_from_cache(*,host=None):    try:             redis_con = redis.Redis(host=redis_host,port=redis_port)     cached_result = redis_con.get(host)           if cached_result:                    output = json.loads(cached_result)       output["cached"] = "True"       output["apiServer"] = hostname       return output      else:                return False        except:      return "Error In get_from_cache function."  def set_to_cache(*,host=None,ipgeolocation_key=None):   try:          redis_con = redis.Redis(host=redis_host,port=redis_port)     ipgeolocation_url = "https://api.ipgeolocation.io/ipgeo?apiKey={}&ip={}".format(ipgeolocation_key,host)     geodata = requests.get(url=ipgeolocation_url)     geodata = geodata.json()     geodata["cached"] = "False"     geodata["apiServer"] = hostname     redis_con.set(host,json.dumps(geodata))     redis_con.expire(host,3600)      return geodata    except:         return "Error In set_to_cache function."       app = Flask(__name__)  @app.route("/ip/",strict_slashes=False) def ipstack(ip=None):      output = get_from_cache(host=ip)      if output:                   return jsonify(output)       output = set_to_cache(host=ip,ipgeolocation_key=ipgeolocation_key)    return jsonify(output)  @app.route("/status",strict_slashes=False) def check_status():   return make_response("",200)       if __name__ == "__main__":     hostname = os.getenv("HOSTNAME","none")   redis_port = os.getenv("REDIS_PORT","6379")   redis_host = os.getenv("REDIS_HOST",None)   app_port = os.getenv("APP_PORT","8080")   ipgeolocation_key = os.getenv("API_KEY", None)   ipgeolocation_key_from_secret = os.getenv("API_KEY_FROM_SECRETSMANAGER",False)   ipgeolocation_key_secret_name = os.getenv("SECRET_NAME",None)   ipgeolocation_key_name = os.getenv("SECRET_KEY",None)   aws_region = os.getenv("REGION_NAME",None)    if ipgeolocation_key_from_secret == "True":          ipgeolocation_key = get_seceret(secret_name=ipgeolocation_key_secret_name,                                                                           secret_key=ipgeolocation_key_name,                                                                           region_name=aws_region )           app.run(port=app_port,host="0.0.0.0",debug=True)
  该代码设置了一个Flask网络应用程序,通过一个API端点提供IP地址的地理位置信息。该API调用一个外部服务ipgeolocation.io,以检索地理位置信息。该API旨在将ipgeolocation.io的响应缓存在Redis数据库中一段时间(1小时),以减少API调用次数并提高响应时间。
  当API收到一个关于IP地理位置信息的请求时,它首先检查Redis数据库中的缓存响应。如果响应在缓存中,API会返回缓存的响应。如果响应不在缓存中,API会调用ipgeolocation.io来检索地理位置信息,并将响应存储在Redis数据库中,过期时间为1小时。然后API从ipgeolocation.io返回响应。
  访问ipgeolocation.io的API密钥可以指定为环境变量或从AWS Secrets Manager中检索。
  该代码使用了以下库。os: 提供了一种与底层操作系统互动的方式,如读取环境变量。requests: 向外部API发出HTTP请求。json:处理JSON数据格式。redis:提供一个与Redis数据库交互的Python客户端。flask:提供了一个用于构建和运行网络应用的框架。boto3:提供一个Python客户端,用于与AWS服务进行交互。
  该应用程序可以从命令行或AWS Secrets Manager服务中获取API密钥的纯文本。在任何秘密管理器中存储你的敏感数据以确保安全是最理想的。

如果恐龙从未灭绝,今天的恐龙会是什么样子?恐龙模型。(DaleRussellRonSguinCanadianMuseumofNatureviaNaishTattersdill,CanadianJournalofEarthS带你读诗仰望天空仰望天空躺在草地上仰望天空云朵擦亮了太阳也擦亮了眼睛太阳是一块金牌放射出夺目的光彩你闭上眼睛它就在你的胸前佩戴你会把自己想象成英雄在运动场上击败对手此刻正躺在音乐里让身心放松你还会三月份旅游最佳地方,10个值得去的景点现在这个季节,最适合旅游了,不冷不热,气候温和,很适合出去旅游。春天有桃花盛开,春风吹绿了原野,吹红了桃花。春天的温度刚好合适,穿着春装踏着春风出去旅游是一件非常惬意的事情。今天就再发2500万元消费券组织500家企业走出去济南商务2023十大行动启动2023年济南商务怎么干?在2月13日济南市委市政府召开的凝心聚力抓项目蓄势赋能促发展主题系列第六场新闻发布会上,济南市商务局给出了答案全市商务系统认真贯彻落实项目突破年动员大会精全球手机销量前十中国品牌占七个半,华为第十,苹果痛失第一近日,全球著名互联网数据分析网站IDC公布了2022年全球智能手机销量排行榜单。在这份榜单中,我们可以大分类为中国品牌和外国品牌,其中中国品牌占据了其中的七个半,外国品牌只占两个半杉杉品牌创始人郑永刚去世,从服装大王到锂电池材料龙头焦点分析作者袁斯来编辑苏建勋被称为服装大王的杉杉控股创始人郑永刚,在2月11日突发心脏病离世。他留下的是一家耗费20年,成功从西装品牌转型到新能源光电材料的龙头公司。如果生在90年代,很少A股调整没有结束,警惕多头陷阱!(2月14日)大盘走势分析预判今日大盘低开高走,截止到收盘为止,上证指数上涨0。72。纵观今日大盘走势,走的非常强势,尤其是下午,隐约有一种逼空上涨的感觉,难道这里的调整已经彻底结束,大盘要开始真正的主攻行情了镇江社保精准落子,下好工伤保险大棋局通讯员曹逸全媒体记者古瑾今日镇江讯工伤保险作为一种基础社会保障制度,无论对劳动者个人还是对企业,都是一项双赢的保障措施。近年来,镇江市社保中心时刻紧盯工伤保险保护劳动者合法权益这一黄光裕没能重振国美?黄光裕做错了什么?上世纪90年代,我国改革开放的进程催生了热火朝天的市场经济,尤以家电行业为代表,其中销售环节渐由国营模式转向代理模式。经济的开放提升了居民收入,家电消费能力随之攀面对我省6000多万吨消费市场需求钢铁行业将如何转型升级?锌锅捞渣机器人统筹策划黄婷执行大河报豫视频记者刘瑞朝胡嫦元文受访者供图钢铁产业被誉为工业的粮食,是制造业的基础。河南钢铁产业的信息化技术改革,伴随着产业发展而风生水起,从自动化到信交通运输部加快推进重点公路项目复工开工确保全年建设投资目标如期实现来源交通运输部近日,交通运输部下发通知,要求各相关单位要加强协调调度,做好服务保障,抢抓一季度有效施工期,加快推进项目复工开工和建设实施,确保全年建设投资目标如期实现。通知要求,各
第七届中国亚欧博览会在新疆乌鲁木齐开幕中新社乌鲁木齐9月19日电(苟继鹏)第七届中国亚欧博览会19日在新疆乌鲁木齐开幕,主题为共商共建共享合作向未来,由商务部外交部中国贸促会新疆维吾尔自治区人民政府等共同主办。本届博览教你一眼辨别羽毛球拍穿线好坏!建议收藏你是否遇到过这样的情况?拿到一支刚穿好线的羽毛球拍,却分辨不出穿线的好坏,甚至球拍穿线后有塌陷风险也不知道,被野鸡穿线师骗了还傻兮兮掏钱。今天笔者就教大家如何一眼分辨穿线的好坏。一被矿工抛弃!RTX40系列首发破两万元除了玩家没人抢9月19日,英伟达正式公开了RTX40系列显卡发布会的预热视频,随着挖矿玩法的更新,此次新旗舰显卡的主要目标客群将回到游戏玩家身上,但可惜的是,RTX40系列售价依旧高昂。(图片来央视首次探访解放军空军察打一体无人机部队,飞行员都飞过战斗机据央视军事报道,近日,总台记者走进西北大漠空军某部,首次探访解放军空军察打一体无人机部队。我国自主研制的某型察打一体无人机,正在跑道上自主滑行,奔赴指定空域训练千里之外,无人机飞行土耳其总统仍在努力推动俄乌领导人举行会谈土耳其总统仍在努力推动俄乌领导人举行会谈财联社9月20日电,土耳其总统埃尔多安当地时间9月19日接受美国媒体采访时透露,俄罗斯和乌克兰就交换200名人质达成协议,这是一个很好的发展花莲地震造成铁路公路受损严重!部分铁轨已修复桥梁仍须勘查9月20日,南都记者从台湾铁路管理部门获悉,18日台湾花莲县发生强震,导致当地铁路和公路受损严重。台铁花东线多处轨道弯曲变形桥梁受损,花莲到台东列车停驶。目前,多处轨道弯曲变形部分李克强同越南总理通电话央广网北京9月20日消息据中央广播电视总台中国之声新闻和报纸摘要报道,国务院总理李克强19日在京应约同越南总理范明政通电话。李克强表示,中越是山水相连的友好邻邦。习近平总书记同阮富罚罪大结局,赵鹏超让母亲枪杀常征,这一结局早有暗示电视剧罚罪马上迎来大结局,很多的恶狼都已经显出原形,即将被捕。警方这边牺牲也比较大,邱涛至今找不到尸体,张秋峰命悬一线。在侦破赵家的紧要关头,常征主动提出要去赵家做卧底。常征经过了退休五年被查,杨鸿语接受纪律审查和监察调查原鸡西市环境保护局党组书记局长杨鸿语涉嫌严重违纪违法,目前正接受纪律审查和监察调查。杨鸿语简历杨鸿语,男,汉族,1957年8月生,黑龙江鸡西人,1975年3月参加工作,1983年1即将量产?合创ConceptM量产版专利图曝光爱卡汽车国内新车原创近日,有网友在社交媒体上公布了一组合创ConceptM的专利图。ConceptM概念车发布于2021年广州车展,定位为一款纯电MPV。专利图的曝光说明新车即将进王毅会见美国前国务卿基辛格王毅会见美国前国务卿基辛格财联社9月20日电,当地时间2022年9月19日,国务委员兼外长王毅在纽约会见美国前国务卿基辛格。王毅祝贺博士将迎来百岁诞辰,表示博士是中国人民的老朋友好