• 搜索
  • 夜间模式
    ©2026  依刻学习 Theme by OneBlog

    依刻学习博客

    搜索
    标签
  • 首页>
  • 学习的一天>
  • 正文
  • 关于nginx默认主机的问题

    2025年02月03日 21 阅读 0 评论 2382 字

    今天复习nginx发现默认虚拟主机有疑惑,网上有的blog认为server_name设置为""或_可以直接表示默认虚拟主机,不需要default_server,不知真假,但是我确实见过很多配置server_name为_的

    测试1:server_name设置为_可以表示默认虚拟主机

    配置

    server1

    server {
      listen    80;
      server_name  www.wym1.com;
      root  /html/1;
    
      location / {
        index index.html;
        echo "wym1";
      }
    }
    

    server2

    server {
      listen    80;
      server_name  _;
      root  /html/2;
    
      location / {
        index index.html;
        echo "wym2";
      }
    }
    

    server3

    server {
      listen    80;
      server_name  www.wym3.com;
      root  /html/1;
    
      location / {
        index index.html;
        echo "wym3";
      }
    }
    

    结果

    访问该主机没有的www.wym2.com无法解析到_,反而解析到了nginx自带的站点

    查看nginx.conf配置文件部分如下

    server {
      listen       80;
      server_name  localhost
      location / {
        root   html;
        index  index.html index.htm;
      }
    }
    include /usr/local/nginx/conf.d/*;

    猜测可能是因为隐式默认虚拟主机的原因,所以将include部分换到server前

    include /usr/local/nginx/conf.d/*
    server {
      listen       80;
      server_name  localhost
      location / {
        root   html;
        index  index.html index.htm;
      }
    }
    

    结果

    果然是因为隐式默认虚拟主机的原因,匹配到了第一个server

    可以发现,它定位到了www.wym1.com这个server而不是_,也就是说_没有匹配所有server的能力

    测试2:server_name设置为""可以表示默认虚拟主机
    基于测试1,仅需要修改server2
    server2

    server {
      listen    80;
      server_name  "";
      root  /html/2;
    
      location / {
        index index.html;
        echo "wym2";
      }
    }
    

    结果

    与测试1结果相同,""不可以做默认站点

    总结
    _与""本身是无法为默认server的,只有default_server可以指定默认server,但是他们本身没有意义,正好符合默认server默认匹配的逻辑意义,因此,应该在使用default_server的时候指定server_name为_或""

    这也是为什么有的人认为使用_或""就行了,这是错误的,他们只看见了默认server大部分都使用_或""却忽略了default_server

    补充:
    显式与隐式虚拟主机
    显式虚拟主机使用default_server指定
    隐式虚拟主机是在没有指定default_server时,默认使用nginx在配置文件扫描到的第一个server做虚拟主机

    本文著作权归作者 [ wymm ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    取消回复

    发表留言
    回复

    Copyright©2026  All Rights Reserved.  Load:0.019 s
    Theme by OneBlog V3.6.5
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。