Nginx中default_server指令问题详解

 更新时间:2022年12月27日 09:27:25   作者:颜淡慕潇  
nginx 的 default_server 指令可以定义默认的 server 出处理一些没有成功匹配 server_name 的请求,下面这篇文章主要给大家介绍了关于Nginx中default_server指令问题的相关资料,需要的朋友可以参考下

序言

文章标记颜色说明:

  • 黄色:重要标题
  • 红色:用来标记结论
  • 绿色:用来标记一级论点
  • 蓝色:用来标记二级论点

1.基本介绍 

nginx 的 default_server 指令

可以定义默认的 server 出处理一些没有成功匹配 server_name 的请求

  • 1.显示定义
  • 2.指定Server_name
  • 3.隐式定义

这三种方式都可禁止 ip 直接访问

且 1,3同时可以禁止未绑定域名的访问(比如泛解析了主域名)。

如果没有显式定义,则会选取第一个定义的 server 作为 default_server。

2.显示定义一个 default server 

http {
    
    # 显示的定义一个 default server
    server {
        listen 80 default_server;
        server_name _;
        return 403; # 403 forbidden
    }
}

3.指定server_name 为 ip

http {
  
  # 直接指定 ip server_name
  server {
    listen 80;
    server_name 192.168.xxx.xxx;
    return 403; # 403 forbidden
  }
  
}

4. 隐式的 default server

在没有显式定义 default server 时,nginx 会将配置的第一个 server 作为 default server,即当请求没有匹配任何 server_name 时,此 server 会处理此请求。

所以,当直接使用 ip 访问时会进入第一个 server 处理,返回403 forbidden。

http {
    # 如果没有显式声明 default server 则第一个 server 会被隐式的设为 default server
    server {
        listen 80;
        server_name _; # _ 并不是重点 __ 也可以 ___也可以
        return 403; # 403 forbidden
    }
    
}

Tips: 

这里,server_name 设为 '_',其实也可以设置为其他。

'_' 只是作为一个和业务域名无关的请求回收服务,不要认为一定要设置为 '_',就好

如果线上的业务都是明确的业务域名访问,那泛解析造成的一些非业务域名或ip访问都会被这个 sever 回收处理。

5.风险问题

问题描述:

nginx 不配置 default_server ,会出现一些很诡异问题

有时候,代理机器没有配置流,居然可以访问正常,有时候,配置明明删除了,却也能访问

原因:

没有配置default_server

解决方案:

  • 在代理机做分发的时候一定要反复确认是否有映射过去
  • 设置一个 default_server

6.总结

nginx 批量载入配置 conf 时会按 ASCII (American Standard Code for Information Interchange)排序载入,

这就会以

  • server_a.conf
  • server_b.conf
  • server_c.conf

的顺序载入,如果没有生命 default_server 的话,那 server_a 会作为默认的 server 去处理 未绑定域名/ip 的请求。

建议显示指定 default server,因为在配置虚拟主机或多业务时,会存有多个 server 配置文件

如果使用隐式方式选取第一个被载入的 server 作为 default server 的话,还要时刻去确认谁是被第一个载入的...存在一定的风险...

补充:nginx 的default_server原理

1.配置文件上面的server_name配置文件首先要遵循default_server的原则,需要得到验证才使用server_name配置的域名才能生效。

2.所以我们需要加default_server 加证书验证(证书随便,只是做检验用的)

3.这样做的目的就是防止恶意解析,如果不做这个策略。别的域名会解析到我们的IP。

到此这篇关于Nginx中default_server指令问题的文章就介绍到这了,更多相关Nginx default_server问题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • nginx使用ssl模块配置支持HTTPS访问的方法

    nginx使用ssl模块配置支持HTTPS访问的方法

    这篇文章主要介绍了nginx使用ssl模块配置支持HTTPS访问的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • nginx如何指向本地路径及500错误解决方法

    nginx如何指向本地路径及500错误解决方法

    这篇文章主要为大家介绍了nginx如何指向本地路径及500错误解决方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Nginx配置文件nginx.conf详细说明

    Nginx配置文件nginx.conf详细说明

    本篇文章主要介绍了Nginx配置文件nginx.conf详细说明,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 通过Nginx的proxy_set_header设置请求头无效的解决

    通过Nginx的proxy_set_header设置请求头无效的解决

    这篇文章主要介绍了通过Nginx的proxy_set_header设置请求头无效的解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 很详细的Nginx配置说明

    很详细的Nginx配置说明

    这篇文章主要为大家分享了一篇很详细的Nginx配置说明,主要内容包括Nginx常用功能、Nginx配置文件结构,想要了解Nginx配置的朋友不要错过,参考一下
    2016-02-02
  • 在Nginx用htpasswd对网站进行密码保护的设置方法

    在Nginx用htpasswd对网站进行密码保护的设置方法

    很多时候我们需要对一些网站进行密码保护,比如团队内部的站点、demo站点等等。这里所说的密码保护是服务器级的,并非网站应用层的注册登录那一套,而是利用服务器配置和htpasswd文件来实现访问的密码验证
    2013-06-06
  • nginx配置支持php的pathinfo模式配置方法

    nginx配置支持php的pathinfo模式配置方法

    这篇文章主要介绍了nginx配置支持php的pathinfo模式配置方法,需要的朋友可以参考下
    2017-04-04
  • nginx的zabbix 5.0安装部署的方法步骤

    nginx的zabbix 5.0安装部署的方法步骤

    之前大家可能经常会基于apache去部署zabbix,但是这样会偶尔遇到一些问题,今天小编就带大家操作一下基于nginx的zabbix5.0的部署。感兴趣的可以了解一下
    2021-07-07
  • Nginx 域名转发的实现

    Nginx 域名转发的实现

    这篇文章主要介绍了Nginx 域名转发的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • nginx rewrite 伪静态配置参数详细说明

    nginx rewrite 伪静态配置参数详细说明

    nginx rewrite 伪静态配置参数和使用例子 附正则使用说明
    2010-05-05

最新评论