基本上我需要DNS来响应不同的CNAMES,这取决于是否为HTTPS或HTTP对象提出请求。
s.test.com -> IF(https) RESPONSE special.domain.com ELSE simple.domain.com
可能吗? 还有什么其他可行的方法呢?
这不适用于DNS。 DNS请求完全独立于请求的原因 。
为了做到这一点,DNS的整个caching系统将不得不被废弃。 每当新计划发明时,DNS也必须重写。
你想做什么? 可能有更好的方法来解决你的实际问题。
没有。
DNS不知道HTTP或HTTPS。
比较它要求秘书的电话号码(IP号码)的人。 你会得到同样的答复,不pipe你想问另一端的人。
正如大家所说的,你不能用DNS来做这件事。 我认为这通常是通过URLredirect完成的。 例如,如果您使用Apache作为Web服务器,则可以使用mod_rewrite设置redirect规则。 那么你可以写规则如:
# If HTTPS redirect to special.domain.com RewriteCond %{HTTPS} =on RewriteRule .* https://special.domain.com%{REQUEST_URI} [R,L] # If not HTTPS redirct to simple.domain.com RewriteCond %{HTTPS} !=on RewriteRule .* http://simple.domain.com%{REQUEST_URI} [R,L]
这里是一些更多的例子: http : //www.askapache.com/htaccess/ssl-example-usage-in-htaccess.html
我会给你怀疑的好处,并假设:
因此,我提出您的问题意味着您想知道在DNS 支持的资源loggingtypes中,DNS (邮件交换)资源logging(RR)中是否存在DNS中的HTTP / HTTPS模拟。
这似乎是RFC 2782中描述的SRV(服务)loggingtypes的目的。 尽pipe看起来LDAP,SIP和XMPP服务更常用这种方式通过DNS进行宣传。
其原因似乎是历史性的:只有在提出,开发和部署HTTP之后,SRVlogging才被提出,实施和部署。 对于一些讨论,为什么在这一点上使用SRVlogging来宣传HTTP / HTTPS可能不是一个好主意,请看这个问题。
不,DNS不知道(或关心)哪个协议正在请求查找。
我不知道任何,但是如果你在另一端的Web服务器的控制,你可以redirect到一个不同的域(或有不同的虚拟主机),取决于它是否使用SSL。
如前所述,基本的DNS不会这样做。 但是,如果您控制客户端(即,它是您编码和分发的软件),则可以使用SRVlogging:
http://en.wikipedia.org/wiki/SRV_record
所以,如果你想要一个响应HTTP和另一个HTTPS,你可以在你的DNS区域logging中放置如下内容:
_https._tcp.s.test.com. 86400 IN SRV 0 5 443 special.domain.com. _http._tcp.s.test.com. 86400 IN SRV 0 5 80 simple.domain.com.
因此,查找“s.test.com”logging的https / tcp服务的DNS客户端会得到一个响应,表明该服务位于主机special.domain.com(端口443)上。要求inputhttp /为“s.test.com”tcp得到回应说主机simple.domain.com,端口80。
“0 5”是优先级/优先级,因此如果您有多个主机用于同一服务(special1,special2,…; simpleA,simpleB等),则可以循环。
大多数软件(如Web浏览器)不查找SRVlogging,只有Alogging。
既然你把负载均衡标签放在你的问题中,我不得不提到通过端口(http是80和https是443)的负载平衡是你可以做的最简单的事情。
而且,您可以通过虚拟主机(http)或SNI(https)添加另一级别的负载平衡。
除此之外,这个问题已经得到很好的回答。
正如其他人所说,这不是名称服务器的责任。
但是,您可以修改应用程序以检测协议(HTTP或HTTP)并相应地提供其链接。
这是一个例子。 比方说,你有一个网页,显示多个图像。 当使用HTTP查看页面时,您可能希望将这些图像链接到HTTP CDN,并且您可能希望页面在使用HTTP访问页面时使用HTTP CDN。 使用dynamicWeb应用程序来检查协议并相应地replace所有链接。