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

Nginx server_name 配置详解

Nginx server_name 配置详解:从域名到 IP 访问的完整解析

一、核心概念与作用

server_name 是 Nginx 实现基于域名的虚拟主机(Virtual Host)的核心指令,用于决定请求的路由规则。其核心作用包括:

  1. 域名匹配:根据客户端请求的 Host 头字段匹配对应的 server
  2. 多站点托管:单台物理服务器可托管多个独立网站
  3. 动态路由:通过正则表达式实现灵活的子域名/路径路由

二、匹配规则与优先级

匹配类型示例说明
精确匹配server_name example.com;完全匹配域名,优先级最高
通配符前缀server_name *.example.com;匹配任意层级子域名(如 www.example.comblog.example.com
通配符后缀server_name mail.*;需编译时启用 --with-http_v2_module 才能支持
正则匹配server_name ~^api\d+\.;支持 PCRE 语法,通过 ~ 启用,~* 表示不区分大小写
默认服务器listen 80 default_server;未匹配时兜底处理,建议显式声明

匹配顺序:精确匹配 > 通配符前缀 > 通配符后缀 > 正则匹配 > 默认服务器


三、IP 访问的特殊处理

1. 为什么不能直接匹配?

当客户端通过 http://IP:端口/uri 访问时:

  • 请求头中的 Host 字段为 IP 地址(如 Host: 192.168.1.100
  • server_name example.comHost 字段的 IP 不匹配
  • Nginx 不会选择该 server 块处理请求

2. Nginx 的实际行为

  • default_server:选择第一个 server 块(即使不匹配),通常返回 400 Bad Request
  • default_server:选择标记为默认的 server 块处理请求

3. 解决方案

方案 1:配置默认服务器块
server {listen 80 default_server;  # 标记为默认server_name _;             # 匹配所有未匹配的请求location / {root /var/www/ip-access;index index.html;}
}server {listen 80;server_name example.com;location / {root /var/www/example;index index.html;}
}
方案 2:混合域名与 IP 匹配
server {listen 80;server_name example.com 192.168.1.100;  # 同时匹配域名和 IPlocation / {root /var/www/example;index index.html;}
}

四、典型配置示例

1. 多域名绑定

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

2. 通配符子域名

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

3. 默认服务器配置

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

五、IP 访问的常见问题与解决方案

问题场景解决方案
通过 IP 访问无法匹配配置 default_server 或添加 server_name 192.168.1.100;
通配符匹配失败确保格式为 *.example.com.example.com
正则表达式未生效检查 ~ 前缀,确保使用 $ 锚定结尾
Host 头缺失导致 400 错误配置 server_name ""; 处理空 Host 请求
域名权重 SEO 问题使用 return 301 强制跳转到主域名(如 www 版本)

六、性能优化建议

  1. 减少正则使用:精确匹配和通配符比正则更高效
  2. 哈希表优化
    http {server_names_hash_max_size 512;server_names_hash_bucket_size 64;
    }
    
  3. 避免冗余配置:合并相同配置的 server 块
  4. SNI 配置:HTTPS 场景需配合 ssl_server_name on; 使用

七、最佳实践总结

  1. 优先使用精确匹配:确保域名明确无歧义
  2. 默认服务器兜底:每个端口应配置一个默认 server
  3. 通配符规范写法:推荐使用 .example.com 而非 *.example.com
  4. 正则捕获命名:使用 ?<name> 语法提高可读性
  5. 安全防护:限制通配符范围,防止意外匹配

八、调试工具推荐

  1. 测试匹配结果
    curl -H "Host: www.example.com" http://127.0.0.1
    
  2. 查看监听状态
    ss -lntup | grep nginx
    
  3. 配置语法检查
    nginx -t
    

九、总结

通过合理配置 server_name,Nginx 可实现灵活的路由控制,满足从简单网站托管到复杂微服务架构的多样化需求。当通过 IP 访问时,务必配置 default_server 或显式声明 IP 地址,以确保请求能正确路由。掌握其匹配规则和优化技巧,是构建高性能 Web 服务的关键基础。
在这里插入图片描述

http://www.dtcms.com/a/520738.html

相关文章:

  • 做宣传网站网页制作素材去哪找
  • 百度地图网站开发wordpress会员权限
  • 微硕WSF2040 N沟MOSFET:汽车电动尾门“防夹升降核”
  • 网站建设投标书报价表建设电子商务网站的好处
  • 网站建设与开发教学大纲全网商机app招标
  • Less-4 GET-Error based-Double Quotes-String
  • 互斥锁、读写锁、ref()函数使用
  • 2.6、Web漏洞挖掘实战(下):XSS、文件上传与逻辑漏洞深度解析
  • 邢台做网站的公司有那个营销型网站建设营销型
  • 青岛住房和城乡建设厅网站首页iis7.0 asp网站配置
  • vue3表格显示隐藏列全屏拖动功能
  • Git Commit Message 规范:写出清晰、可维护的提交记录
  • Orleans + Kubernetes + Istio 服务网格集成深度解析
  • 51网站怎么打开注册城乡规划师有什么用
  • 相向指针|盛最多水的容器|接雨水|验证回文串
  • Web3j 中使用 Transaction 类进行以太坊交互的核心方法
  • 承德微网站开发怎么弄一个自己的网站
  • web及h5录音wav下载
  • Kotlin 协程中常见的异步返回与控制方式(速览)
  • 做网站还有前景么动漫网页设计报告
  • Maven 多配置文件的使用
  • 【双机位A卷】华为OD笔试之【哈希表】双机位A-跳房子I【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
  • SQL 拼接完全指南
  • 制作的网站wordpress还是自己写
  • 【HLS】Java实现统计HLS的m3u8清单中所有ts切片的视频持续时长
  • 免费网站建设ppt模板下载山西省建设银行网站首页
  • 增城网站建设价格郑州seo
  • 【Rust实战】从零构建高性能异步Web服务器:深入理解所有权与生命周期
  • Vlan-ACCESS接口+Trunk接口
  • 网站开发遇到的最大困难被k掉的网站怎么做才能有收录