网站首页 > 精选教程 正文
前几天在公司分享会偶尔说起DNS,突然提到域名运营商提供的URL转发功能,即将指定的域名转发到相关域名,且可以在地址栏显示或隐藏目标URL。争论了很久,很多同学都认为是DNS服务器自身提供了这个功能。众所周知,DNS服务器只提供域名的解析功能,而URL转发是HTTP范畴,以下详细说明下我自己的实现原理及过程。
原理
大多数域名运营商都会提供URL转发(国内此功能需要备案和审核)功能,分显示和隐藏两种。我们在实现的过程中分两个环节,即DNS和HTTP。一个URL转发记录对应DNS服务器两条记录,分别为A或CNAME记录和TXT记录。A或CNAME记录解析到自己的HTTP服务器,以用于后面处理URL转发,这条记录对用户隐藏。TXT记录是用户在操作界面填写的URL转发目标地址和类型。DNS解析完成之后交由HTTP服务器,可以用任何服务端语言编写。
实现过程
环境说明
- 操作系统:CentOS 6(Vagrant)
- DNS服务器:BIND-9.8.2 (yum)
- HTTP服务端:NGINX+PHP-FPM-5.3 (yum)
- 测试域名:ninjacn.com
DNS服务器
DNS服务器由BIND搭建,通过yum直接安装即可。下面截取主要的配置以供大家理解:
截取/etc/named.conf
截取/var/named/ninjacn.com.zone
共解析2条URL转发(u0和u1),它们的A记录都对应自己的HTTP服务器,TXT记录对应真实的URL转发目标地址信息,TXT记录由2部分组成,由|分隔,左边部分为URL类型(显示或隐藏),右边部分为真正的目标地址。
HTTP服务端
浏览器发起相关域名的请求之后,我们自己的服务器(DNS服务器A记录)会处理这个请求。服务端接受请求后会根据主机头向DNS服务器查询相应的TXT记录,获取到DNS记录之后根据类型(0代表显示URL,1代表隐藏URL)返回HTTP响应信息。
- 当类型为0时,HTTP服务端返回301或302状态码,响应头的Location是具体的URL目标地址。
- 当类型为1时,HTTP服务端返回包含iframe的HTML信息。iframe的src属性为具体的URL目标地址。
具体实现看以下PHP代码。
Nginx配置文件
泛域名配置,所有请求都会由此server块处理。
PHP实现转发
测试
显示url?—?u0.ninjacn.com
HTTP状态码为200,不做转发处理,真正的网页地址在iframe的src属性指定。
隐藏URL?—?u1.ninjacn.com
HTTP状态码为302,目标地址在响应头的Location属性。
本文摘自medium.com,由编码之道编辑整理
猜你喜欢
- 2025-06-10 java 服务之间调用(rpc)(java实现服务器)
- 2025-06-10 Java机器学习库(Java ML)(二、聚类)
- 2025-06-10 「Java库」如何使用优秀的加密库Jasypt来保护你的敏感信息?
- 2025-06-10 GitHub精选 | 轻量级Android和Java日志库
- 2025-06-10 Java面试官:MySQL binlog 有什么作用?主从延迟的了解么?
- 2025-06-10 Excel函数核武器库:50个高频场景公式——第二弹
- 2025-06-10 Excel函数核武器库:50个高频场景公式——第一弹
- 2025-06-10 Spring Cache高性能缓存库 - Caffeine简介
- 2025-06-10 Java通过Kafka Streams库来实现数据流处理
- 2025-06-10 一连问了好几个大佬,竟然都不知道Redis为什么默认16个数据库?
你 发表评论:
欢迎- 最近发表
-
- java 服务之间调用(rpc)(java实现服务器)
- Java机器学习库(Java ML)(二、聚类)
- 「Java库」如何使用优秀的加密库Jasypt来保护你的敏感信息?
- GitHub精选 | 轻量级Android和Java日志库
- Java面试官:MySQL binlog 有什么作用?主从延迟的了解么?
- Excel函数核武器库:50个高频场景公式——第二弹
- Excel函数核武器库:50个高频场景公式——第一弹
- Spring Cache高性能缓存库 - Caffeine简介
- Java通过Kafka Streams库来实现数据流处理
- 一连问了好几个大佬,竟然都不知道Redis为什么默认16个数据库?
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)