Nginx默認域名解析配置


最近需要對線上的域名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日志里面。

issue

上面是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指令設置默認域名解析,這樣沒有匹配上的域名就不會解析到其他業務的域名上。

server{
listen 80 default_server;
server_name default.test.com;
#...
}

為了防止未備案的域名惡意指向自己,也可以將默認域名解析返回nginx響應碼444

server{
listen 80 default_server;
server_name _;
#...
return 444;
}

返回444這個Nginx的非標准錯誤碼來讓Nginx斷開與瀏覽器之間的連接。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM