老高最近在整理服务器的nginx配置,但是整理好之后有一个问题,就是访问一个没有绑定的域名(已解析)的时候,会自动跳转到blog.phpgao.com。为了解决这个问题,查了很多资料,发现此文档Nginx如何处理一个请求,问题解决。

总结一下:

一个http请求一般都会带上host,也就是传说中的主机名,比如blog.phpgao.com,对于phpgao.com来说,就是phpgao.com域下的blog主机的意思(其实blog不是真实存在的,而是虚拟主机)。

但是如果我们在配置web服务器的时候,如果只是简单的把需要映射的域名设置好,会造成一个问题,如果我作为攻击者,把自己的域名解析到别人的服务器ip,后果就是大量的请求把被人的机器打垮。

解决问题的办法就是需要加入一个空主机头,绑定80和443端口,也就是之前文章中提到的defalut_server字段。

也就是在nginx的配置文件中加入

server {
    listen 80 default;
    server_name _;
    return 500;
}

server {
    listen 443 default;
    server_name _;
    # 证书配置段
    return 500;
}