记录一次nginx配置vhost的小bug
话说这篇博客是在是为了保持自己记录生活的习惯而写的,没有什么阅读的价值,各位读者可以直接忽略了。今天在配置一个域名的时候,写了new_example.com(举例而已) 因为是内测,所以并未想象到深层次的问题,直接就运行了。但是我在本地写host 的时候写的却是如下的配置:
192.168.1.188 old_example.com
然后我访问 old_example.com,正确的解析到了 new_example.com 的网站上。这一切我都没有感觉到错误,直到同时提醒我,我这才发现为什么host写错了。但是为什么我host写错了,却能解析到正确的网站地址呢。
首先我想是不是Nginx 配置的问题,如果没有匹配到要解析的网站,会默认解析到自己第一个网站上。但是我查看Nginx的配置,并不存在这个问题。我们项目走的是微服务的模式,比如支付走的是一个服务,有一个域名,平时的活动也是服务,有一个域名,再有就是用户体系,登录体系等。使用的时候通过Yar 的RPC 调用来进行服务。测试环境、开发环境,域名中如果有 下划线_ ,统一会转化成 横杠-
,因为自己平时并负责项目架构方面的内容所以对这块关注过少,只是一个约定俗成的规定,大家都按照这个规范来配置测试域名。
直到遇到今天这个意外的bug,让我学到了域名的命名规范。让我们来看下域名的规范是怎么样规定的:
参考地址:域名中不应出现下划线
RFC 952 - 美国国防部互联网主机表规范中的相关条文如下:
A "name" (Net, Host, Gateway, or Domain name) is a text string up to 24 characters drawn from the alphabet (A-Z), digits (0-9), minus sign (-), and period (.).
下面有评论指出,Apache 并不这样处理这个下划线,关于Apache 和 lighttpd 我并没有测试。这种规则,我们遵守就行了,不必浪费精力去追求。浪费时间在这些事情上面,和谋财害命没有什么区别。评论摘抄如下:
早期有人用下划线域名曾经出现过世界范围的 DNS 混乱,现在应该不会出大问题了,不过还是尽量避免为好。水木有个版面域名叫 版名.board.newsmth.net,碰到有下划线的版名 lighttpd 直接拒绝跳转,而原来用 apache 跳转的时候还是允许的,看来 apache 比较仁慈一点。。