最近需要對線上的域名a.test.com
進行網絡策略變更。變更包括對當前使用的機器A解除域名a.test.com
的nginx配置,將a.test.com
解析到機器B。
問題來了
因為機器A上的nginx域名配置不止a.test.com
,在將a.test.com
解析到機器B后業務正常,但是發現機器A上a.test.com
的nginx日志一直能收到其他域名的請求和心跳檢測,正常情況這是不應該存在其他域名的日志打印到a.test.com
日志里面。
上面是
a.test.com
域名打印的日志
問題:為什么不是a.test.com
域名的請求會轉發到a.test.com
域名上?
問題分析
通過和服務提供方的溝通得知,這個是機器A上其他服務的心跳檢測和請求。根據觀察,這些域名都是服務方的域名。非我們服務使用域名,我們的nginx是沒有對非自己業務域名進行解析。
問題應該出在nginx配置上。 通過查看nginx配置得知,nginx沒有配置默認解析域名或相關的處理。這樣造成nginx匹配不到域名的時候,會將請求發到域名節點的第一個域名上。
剛好這里我們的域名節點都是單獨的*.test.conf
文件。a.test.com.conf
內的a.test.com
被當成默認域名進行了解析,造成了沒有匹配上的域名全部都轉發到a.test.com
域名節點上。
解決方案
通過在nginx配置里面增加default_server
指令設置默認域名解析,這樣沒有匹配上的域名就不會解析到其他業務的域名上。
|
為了防止未備案的域名惡意指向自己,也可以將默認域名解析返回nginx響應碼444
。
|
返回444這個Nginx的非標准錯誤碼來讓Nginx斷開與瀏覽器之間的連接。