当前位置: 首页 > 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 官方文档

http://www.xdnf.cn/news/953713.html

相关文章:

  • Qt插件化编程的全面解析(QPluginLoader)
  • 微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
  • 云防火墙(安全组)配置指南:从入门到精通端口开放 (2025)
  • OCR、图像分类与目标检测
  • 雷达RCS计算中的旋转矩阵
  • 在Ubuntu上利用loongarch64交叉编译工具编译opencv4.4.0
  • 【排错】ollama报错unable to load model
  • 【知识点】第8章:程序设计方法论
  • CKA考试知识点分享(6)---PriorityClass
  • 自动化测试工具playwright中文文档-------19.评估JavaScript
  • 初版BL程序一些细节整理(碎碎念)
  • 相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
  • 无线耳机存储痛点解决方案-64Mb Quad-SPI Pseudo-SRAM CS56404L
  • 向量几何的二元性:叉乘模长与内积投影的深层联系
  • 安宝特方案丨从依赖经验到数据驱动:AR套件重构特种装备装配与质检全流程
  • SQL注入篇-sqlmap的配置和使用
  • 分布式计算框架学习笔记
  • 我的世界Java版1.21.4的Fabric模组开发教程(十二)方块状态
  • UE5 文本框自动换行
  • 苍穹外卖--缓存菜品
  • 用docker来安装部署freeswitch记录
  • “一张网,万般用”——聊聊网络虚拟化到底怎么实现的
  • 大话软工笔记—记录形式
  • React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
  • XCTF-web-easyupload
  • Python 实现 Web 静态服务器(HTTP 协议)
  • 语义化商品详情API:AI赋能下一代电商平台数据接口的创新应用
  • 【Dv3Admin】系统视图菜单管理API文件解析
  • ArcGIS Pro 3.4 二次开发 - 栅格
  • 【李沐-动手学深度学习v2】1.Colab学习环境配置