热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

nginx代理corednsdns服务

今天有写过一个简单的基于nginx的stream代理dnsserver的服务,以下是集成coredns的一个demo同时也包含了consul以及使用coredns的rewrite以

今天有写过一个简单的基于nginx 的stream 代理dns server的服务,以下是集成coredns 的一个demo
同时也包含了consul 以及使用coredns 的rewrite 以及loadbalance 插件

环境准备

  • docker-compose 文件
 
version: "3"
services: 
  lb: 
    image: openresty/openresty:alpine
    networks:
     service1_net:
      ipv4_address: 192.168.1.2
    volumes:
    - "./nginx-lb.conf:/usr/local/openresty/nginx/conf/nginx.conf"
    - "./dns.log:/var/log/nginx/dns.log"
    ports:
    - "53:53/udp"
    - "80:80"
    - "53:53/tcp"
  consul:
    image: consul
    networks:
     service1_net:
      ipv4_address: 192.168.1.3
    ports:
    - "8500:8500"
  coredns:
    image: coredns/coredns:1.7.0
    networks:
     service1_net:
      ipv4_address: 192.168.1.4
    volumes: 
    - "./Corefile:/opt/Corefile"
    command: -conf /opt/Corefile
networks:
  service1_net:
    ipam:
      driver: default
      config:
        - subnet: 192.168.1.0/16
  • 说明
    为了估计consul dns 的地址,容器使用了固定ip
  • nginx 配置
 
worker_processes  1;
user root;  
events {
    worker_connections  1024;
}
# nginx dns server proxy
stream {
     upstream dns_servers {
        server 192.168.1.4:53;
    }
    server {
        listen 53  udp;
        listen 53; #tcp
        proxy_pass dns_servers;
        error_log  /var/log/nginx/dns.log info;
    }
}
http {
    include       mime.types;
    default_type text/html;
    gzip  on;
    resolver 127.0.0.1 ipv6=off valid=30s;          
    real_ip_header     X-Forwarded-For;
    real_ip_recursive on;
    server {
        listen       80;
        charset utf-8;
        default_type text/html;
       #  基于nginx 代理的nginx 请求内容
        location / {
            index index.html;
            default_type text/html;
            set $kuaidi100 "www.kuaidi100.com";
            proxy_pass https://$kuaidi100;
            proxy_redirect off;
            proxy_set_header Bloom-Request-Shard 1;
            proxy_read_timeout 10000;
            proxy_send_timeout 10000;
            proxy_buffer_size 1M; 
            proxy_buffers 8 1M; 
            proxy_busy_buffers_size 1M; 
            proxy_temp_file_write_size 1M;
            proxy_set_header   Host $kuaidi100;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
            proxy_set_header   X-Forwarded-Proto $scheme;
        }
    }
}
  • coredns 配置
    Corefile 文件
    说明:
    对于dalongrong.com 的dns 请求进行url 重写,将dns 请求重写consul 的service,同时修改answer ,对于dns 的查询全部转发到 consul dns server
 
dalongrong.com:53 {
    log
    health
    rewrite stop {
        name regex (.*)-(dc1)\.dalongrong\.com {1}.service.{2}.consul
        answer name (.*)\.service\.(dc1)\.consul {1}-{2}.dalongrong.com
    }
    forward  . 192.168.1.3:8600
}
.:53 {
   log
   health
   cache 30
   loadbalance round_robin
   forward  . 8.8.8.8 8.8.4.4 114.114.114.114
}
  • 启动

    注意需要先创建dns.log 文件

docker-compose u -d

集成使用

  • 注册服务
curl -X PUT -d '{"ID": "openresty","Name": "openresty","Address": "192.168.1.2","Port": 80}' http://127.0.0.1:8500/v1/agent/service/register
  • 查询请求
dig @127.0.0.1 openresty-dc1.dalongrong.com 

效果
nginx 代理 coredns dns 服务

 

 

说明

以上只是一个简单的学习使用,实际上我们如果我们集成了openresty,同时结合consul 的cname特性,可以方便的基于consul 的dns
功能进行动态反向代理,同时基于coredns 强大的plugin 能力,构建灵活的软件架构

参考资料

https://github.com/rongfengliang/nginx-coredns-consul-learning
https://coredns.io/plugins/
https://www.consul.io/api-docs/agent/service


推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • AFNetwork框架(零)使用NSURLSession进行网络请求
    本文介绍了AFNetwork框架中使用NSURLSession进行网络请求的方法,包括NSURLSession的配置、请求的创建和执行等步骤。同时还介绍了NSURLSessionDelegate和NSURLSessionConfiguration的相关内容。通过本文可以了解到AFNetwork框架中使用NSURLSession进行网络请求的基本流程和注意事项。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
author-avatar
手机用户2602899031
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有