当前位置: 首页 > news >正文

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。


1. 简介

Nginx 使用 server_name 指令来确定哪个 server 块处理请求。该指令的值可以是域名、IP 地址、通配符或正则表达式。


2. 语法

server {listen 80;server_name example.com www.example.com;location / {root /var/www/html;index index.html;}
}
  • server_name 的值可以是多个域名,用空格分隔。
  • 如果未指定 server_name,则默认使用 server 块的监听地址。

3. 匹配规则

Nginx 根据请求的 Host 头匹配 server_name。匹配顺序如下:

  1. 精确匹配example.com 仅匹配 Host: example.com
  2. 通配符匹配*.example.com 匹配 blog.example.comapi.example.com 等。
  3. 正则表达式匹配:使用 ~ 表示正则匹配,~* 表示忽略大小写的正则匹配。
  4. 默认服务器:如果没有匹配的 server 块,则使用默认服务器。

4. 通配符匹配

  • *.example.com 匹配所有子域名,但不能作为首字符。
  • 例如:*.example.com 匹配 blog.example.com,但不匹配 example.com

5. 正则表达式匹配

使用正则表达式定义复杂的匹配规则:

server_name ~^www\.example\.com$;
  • ~ 表示正则匹配。
  • ~* 表示忽略大小写的正则匹配。

6. 默认服务器

默认服务器在以下情况下被使用:

  1. 未指定 server_nameserver

    server {listen 80;# 没有 server_name 指令
    }
    
  2. server_name _;

    server {listen 80;server_name _;
    }
    
  3. server_name 设置为 defaultdefault_server

    server {listen 80 default_server;server_name example.com;
    }
    

7. 匹配优先级

Nginx 的 server_name 匹配遵循以下优先级顺序(从高到低):

  1. 精确匹配
  2. 通配符匹配(如 *.example.com
  3. 正则表达式匹配
  4. 默认服务器

8. 实例

多域名支持

server {listen 80;server_name example.com www.example.com;location / {root /var/www/html;index index.html;}
}

子域名处理

server {listen 80;server_name ~^(?<subdomain>.+)\.example\.com$;location / {root /var/www/$subdomain;index index.html;}
}

默认服务器配置

server {listen 80 default_server;server_name _;location / {return 403;}
}

9. 注意事项

  • 大小写敏感性server_name 默认区分大小写,可通过 server_name_in_redirect off; 关闭。
  • 性能优化:避免使用复杂的正则表达式,优先使用通配符或精确匹配。
  • 测试配置:修改配置后,使用 nginx -t 测试配置是否正确。
  • 日志排查:配置未生效时,检查 /var/log/nginx/error.log

10. 总结

Nginx 的 server_name 配置是虚拟主机管理的核心。通过精确匹配、通配符和正则表达式,可以灵活应对多域名、子域名和默认服务器的需求。掌握匹配优先级规则和实际应用技巧,能显著提升 Nginx 的配置效率和稳定性。

参考:Nginx 官方文档

相关文章:

  • Device Mapper 机制
  • 统计学(第8版)——统计抽样学习笔记(考试用)
  • 如何用AI写论文、做科研,AMiner沉思一站式辅助
  • Python 中的加密库:守护数据安全的利刃
  • @Transactional 什么情况下会失效
  • 用HTML5+CSS3+JavaScript实现找不同游戏
  • RocketMQ 重试机制详解及最佳实践
  • 【DAY44】预训练模型
  • 网格三面角,散射过程推导
  • Origin图像数字化工具——如何复制其他人的图表作为对比数据
  • nacos开启鉴权密码登录
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
  • 回溯算法学习
  • [25-cv-61102]SMG律所代理Fanatics 体育用品商标维权案
  • CppCon 2015 学习:The Birth of Study Group 14
  • Rougamo.Fody 实现一个AOP日志
  • 简单介绍C++中 string与wstring
  • EZDML:一款国产免费的数据库建模工具
  • 十一(3) 类,加深对拷贝构造函数的理解
  • 【求出100~500之间所有每位数的乘积大于每位数的和的数。】2022-4-16
  • 深圳苏州企业网站建设服务/互联网项目推广
  • 大学网站建设策划书/长沙百度开户
  • 杨和网站设计/优化关键词排名工具
  • 免备案网站制作/西安网站seo服务
  • div css旅游网站中文模板设计/百度app优化
  • 妇科医院手机网站/网络软营销