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连接的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • nginx 解决跨域问题嵌入第三方页面

    nginx 解决跨域问题嵌入第三方页面

    本文主要介绍了nginx 解决跨域问题嵌入第三方页面,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • nginx 配置服务启动的教程详解

    nginx 配置服务启动的教程详解

    本文给大家详细介绍了nginx 配置服务启动的相关知识,非常不错,具有一定的参考借鉴价值,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-05-05
  • 详解用Nginx搭建CDN服务器方法(图文)

    详解用Nginx搭建CDN服务器方法(图文)

    这篇文章主要介绍了详解用Nginx搭建CDN服务器方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 让Nginx支持shtml格式的配置方法

    让Nginx支持shtml格式的配置方法

    这篇文章主要介绍了让Nginx支持shtml格式的配置方法,shtml格式可以包含一些服务端指令,同PHP中的include功能类似,需要的朋友可以参考下
    2014-08-08
  • Nginx可视化管理软件NginxProxyManager的使用

    Nginx可视化管理软件NginxProxyManager的使用

    NginxProxyManager是一款基于Nginx的开源可视化管理工具,支持通过WebUI简易管理Nginx服务器,支持DockerCompose快速部署在Linux、Windows、macOS上,提供SSL证书获取、多代理管理等功能,感兴趣的可以了解一下
    2024-11-11
  • Nginx如何配置前端后端服务

    Nginx如何配置前端后端服务

    本文介绍了如何配置Nginx作为前端静态资源服务器和反向代理服务器以连接后端应用,配置步骤包括设置Nginx的基本配置语法和结构,配置Nginx作为前端静态资源服务器和反向代理服务器,测试和优化Nginx配置,以及提供了一个示例配置
    2025-01-01
  • Nginx 搭建域名访问环境的详细过程

    Nginx 搭建域名访问环境的详细过程

    这篇文章主要介绍了Nginx 搭建域名访问环境的详细过程,通过示例代码讲解了Nginx 搭建转发网关进行负载均衡的相关操作,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • nginx日志格式分析以及修改详解

    nginx日志格式分析以及修改详解

    Nginx日志对于统计、系统服务排错很有用,下面这篇文章主要给大家介绍了关于nginx日志格式分析以及修改的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • nginx之内存池的实现

    nginx之内存池的实现

    本文主要介绍了nginx之内存池的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论