首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Nginx系列之server_name定义与匹配规则

Nginx系列之server_name定义与匹配规则

作者头像
yxxhero
发布于 2022-05-31 11:17:13
发布于 2022-05-31 11:17:13
11.1K00
代码可运行
举报
文章被收录于专栏:DevOps充电宝DevOps充电宝
运行总次数:0
代码可运行

Nginx系列之server_name定义与匹配规则

server_name用来指定请求中的Host头部,在上一节的基于域名虚拟机中,nginx匹配的规则就是根据server_name的不同,结合请求头的Host头部,来决定请求的路由目标。server_name有三种不同的配置格式,且不用配置格式的优先级也不相同。接下来我们学习一下具体的配置格式与匹配顺序。

1. server_name的配置格式之通配符匹配

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# nginx.conf

server {
    listen       80;
    server_name  *.example.org;
    ...

}

server {
    listen       80;
    server_name  mail.*;
    ...

}

通配符格式中的*号只能在域名的开头或结尾,并且*号两侧只能是.,所以www.*.example.orgw*.example.org是无效的。*号可以匹配多个域名部分,*.example.org不仅与www.example.org匹配,而且也与www.sub.example.org匹配。 .example.org是比较特殊的通配符格式, 可以同时匹配确切名称example.org和通配符名称*.example.org

2. server_name的配置格式之正则匹配

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server {
    listen       80;
    server_name  ~^(?<user>.+)\.example\.net$;
    ...
}

正则匹配格式,必须以~开头,比如:server_name ~^www\d+\.example\.net; nginx锚定符号。注意,正则匹配格式中.为正则元字符,如果需要匹配.,则需要反斜线转义。如果正则匹配中含有{和}则需要双引号引用起来,避免nginx报错,如果未加双引号,则nginx会报如下错误:directive "server_name" is not terminated by ";" in ...。正则表达式命名捕获的变量可以在nginx进行引用,下面示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server {
    server_name   ~^(www\.)?(?<domain>.+)$;

    location / {
        root   /sites/$domain;

    }
}

正则表达式捕获也可以通过数字进行引用,下面示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server {
    server_name   ~^(www\.)?(.+)$;
    location / {
        root   /sites/$2;
    }
}

数字引用不推荐使用,此种方式容易被覆盖。

3. server_name的配置格式之精确匹配

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server {
    listen       80;
    server_name  example.org  www.example.org;
    ...
}

精确匹配格式指的除了通配符匹配和正则匹配之外的格式,就这么简单。

4. 特殊匹配格式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. server_name ""; 匹配Host请求头不存在的情况。
2. server_name "-"; 无任何意义。
3. server_name "*"; 它被错误地解释为万能的名称。 它从不用作通用或通配符服务器名称。相反,它提供了server_name_in_redirect指令现在提供的功能。 现在不建议使用特殊名称“ *”,而应使用server_name_in_redirect指令。 

5. 匹配顺序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. 精确的名字
2.*号开头的最长通配符名称,例如 *.example.org
3.*号结尾的最长通配符名称,例如 mail.*
4. 第一个匹配的正则表达式(在配置文件中出现的顺序)

6. 优化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. 尽量使用精确匹配;
2. 当定义大量server_name时或特别长的server_name时,需要在http级别调整server_names_hash_max_size和server_names_hash_bucket_size,否则nginx将无法启动。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps充电宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Nginx域名访问处理过程 原
在实际应用中,我们可以将多个域名指向一个IP 地址,或者使用范IP解析功能。当多个域名执行一个 IP 地址时,Nginx 可以根据域名来分配不同的虚拟服务器,如下面的例子。定义了三个虚拟服务器同时监听80端口:
随风溜达的向日葵
2018/08/15
3.3K0
Nginx(三)------nginx 反向代理
  Nginx 服务器的反向代理服务是其最常用的重要功能,由反向代理服务也可以衍生出很多与此相关的 Nginx 服务器重要功能,比如后面会介绍的负载均衡。本篇博客我们会先介绍 Nginx 的反向代理,当然在了解反向代理之前,我们需要先知道什么是代理以及什么是正向代理。
IT可乐
2018/09/28
3.3K0
Nginx(三)------nginx 反向代理
nginx负载均衡(5种方式)、rewrite重写规则及多server反代配置梳理
Nginx除了可以用作web服务器外,他还可以用来做高性能的反向代理服务器,它能提供稳定高效的负载均衡解决方案。nginx可以用轮询、IP哈希、URL哈希等方式调度后端服务器,同时也能提供健康检查功能。目前有众多公司均已经部署使用nginx实现基于七层的负载均衡功能。 1)Nginx负载均衡 为了实现Nginx的反向代理以及负载均衡功能,应用中需要用到两个模块,HttpProxyModule和HttpUpstreamModule模块;其中HttpProxyModule模块的作用是将用户的数据请求转发到其他服
洗尽了浮华
2018/01/23
8.2K0
nginx负载均衡(5种方式)、rewrite重写规则及多server反代配置梳理
Nginx如何处理一个请求
Nginx首先选定由哪一个虚拟主机来处理请求。让我们从一个简单的配置(其中全部3个虚拟主机都在端口*:80上监听)开始:
Innei
2021/12/28
4780
Nginx入门指南
NGINX 是一款来自俄罗斯的HTTP 和反向代理(reverse proxy)服务器、邮件服务器,以及通用的 TCP/UDP 代理服务器,以其高性能被业界广泛采用。本文通过最简洁的方式,将 NGINX 核心应用做下介绍。 什么是 NGINX NGINX是一个免费的、开源的、高性能的 HTTP 服务器和反向代理,以及一个 IMAP/POP3 代理服务器。 NGINX以其高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。 NGINX 是为解决C10K 问题而编写的少数服务器之一。与传统服务器不同,N
用户1263954
2018/01/30
7920
Nginx如何实现一个域名访问多个项目
最近在个人的多个项目部署中遇到这样一个问题,一个域名如何实现多个项目的访问。因为不想自己单独去申请域名证书和域名配置,便想到了这个方案,结合Nginx的location功能实现了自己的需求,便记录下来。示例中是以PHP的项目演示,其他的语言类似同样的方式进行部署。例如node的项目,可以在location中做一个验证,然后使用porxy_pass反向代理模块实现。
兔云小新LM
2019/12/05
9.3K1
Nginx系列之server虚拟主机
从配置文件中可以知道,开启了三个server,也就是三个虚拟主机,他们都监听在80端口,但是server_name不一样,nginx根据请求中的Host头部,来进行请求的分发,但是如果都没有匹配或者根本就不包含Host头部,nginx会将请求路由至80端口的默认虚拟主机,在上面的配置中,默认虚拟主机是第一个server,这是默认的配置,还可以通过listen之类的default_server参数来制定默认虚拟主机。配置样例如下:
yxxhero
2022/05/31
3960
Nginx 配置指令之 server_name 超详细参数解析与应用场景
在Nginx的配置中,server_name 是一个非常重要的指令,用于指定域名与服务器之间的映射关系。它决定了哪些请求会被当前虚拟主机(Server Block)处理。理解 server_name 指令的功能与配置方式,对于正确配置Nginx的虚拟主机,提升网站的稳定性和性能非常关键。本文将对 server_name 的用法、参数解析以及实际应用场景进行详细讲解,帮助开发者更好地使用这一指令。
猫头虎
2025/04/23
1.7K0
彻底搞懂 Nginx 的五大应用场景
blog.csdn.net/vbirdbest/article/details/80913319
Java识堂
2021/07/12
3K0
Nginx-4.Nginx如何处理请求
Nginx首先需要确定使用哪个server来处理请求。举个简单的例子,有下面几个server
_淡定_
2020/02/29
4250
Nginx server_name和location匹配规则
⑥如果所有Host头匹配失败,那么将会转向listen指令标记的default server;
用户4046016
2021/04/19
8.2K0
手把手教你,嘴对嘴传达------深入介绍Nginx的rewrite模块(理论加实验)
location = patt {} [精准匹配] ocation patt {} [一般匹配 ] location ~ patt {} [正则匹配]
不吃小白菜
2020/09/03
7300
手把手教你,嘴对嘴传达------深入介绍Nginx的rewrite模块(理论加实验)
nginx学习(叁):一起来看下nginx是如何处理请求的
上一节说了配置文件中可以有多个server块,所以这里我配置2个server块,来看当以不同域名(虚拟主机地址)发送请求时,nginx将该请求转发到了哪里
冰霜
2022/03/15
4440
nginx学习(叁):一起来看下nginx是如何处理请求的
Nginx 教程#1:基本概念
协作翻译 原文:Nginx Tutorial #1: Basic Concepts 链接:https://www.netguru.co/codestories/nginx-tutorial-basics-concepts 译者:南宫冰郁, AndyLam, 无若, Tot_ziens, 大别阿郎, madbooker, liyue李月 简介 嗨!分享就是关心!所以,我们愿意再跟你分享一点点知识。我们准备了这个划分为三节的《Nginx教程》。如果你对 Nginx 已经有所了解,或者你希望了解更多,这个教程
企鹅号小编
2018/02/02
1K0
Nginx 教程#1:基本概念
Nginx 教程(1):基本概念
英文:netguru,翻译:开源中国 www.oschina.net/translate/nginx-tutorial-basics-concepts 简介 嗨!分享就是关心!所以,我们愿意再跟你分享一点点知识。我们准备了这个划分为三节的《Nginx教程》。如果你对 Nginx 已经有所了解,或者你希望了解更多,这个教程将会对你非常有帮助。 我们会告诉你 Nginx 是如何工作的,其背后的概念有哪些,以及如何优化它以提升应用程序的性能。还会告诉你如何安装,如何启动、运行。 这个教程包括三节: 基础概念——你
企鹅号小编
2018/02/02
8800
BFE和Nginx有什么差异?- 转发模型的对比
提示:本文较长,且涉及部分配置,点击文章最下方的“阅读原文” 在手机或PC上查看,效果更佳。点击“阅读原文” 还可以留言或发表评论。
CNCF
2021/08/26
8730
BFE和Nginx有什么差异?- 转发模型的对比
Nginx-基础总结(上)
1.proxy_set_header :在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息。 2.proxy_connect_timeout:配置Nginx与后端代理服务器尝试建立连接的超时时间。 3.proxy_read_timeout : 配置Nginx向后端服务器组发出read请求后,等待相应的超时时间。 4.proxy_send_timeout:配置Nginx向后端服务器组发出write请求后,等待相应的超时时间。 5.proxy_redirect :用于修改后端服务器返回的响应头中的Location和Refresh。
云计算小黑
2022/12/28
4710
Django+Vue项目学习第九篇:vue项目部署到务器
刚开始的时候我犯了一个惯性错误,以为部署vue项目和前面部署django服务一样,需要把vue工程文件拷贝到服务器,然后使用命令启动,如 npm run serve 又是安装node环境,又是 npm install 安装依赖包等,一通操作下来,也没搞定。。。 后来偶然看到一篇文章,解释了vue项目到底该怎么部署(其实问问身边的前端开发就知道怎么回事了) 平时在本地开发时,使用 npm run 启动项目,这相当于本地开发调试, 而当调试完成,觉得可以部署到生产环境时,需要把项目打包,打包后会生成一堆静态文件,此时只需借助web服务器访问这些静态文件,前端服务就相当于部署好了 并不需要在服务器在搭一套开发环境,然后运行项目代码!!!
冰霜
2022/03/15
1.3K0
Django+Vue项目学习第九篇:vue项目部署到务器
Nginx 静态资源访问
如何访问 Nginx 的静态资源?这其中涉及到了 Nginx 的核心功能 Rewrite 重写技术,本内容将讲解处理访问静态资源的相关知识。
用户9615083
2022/12/25
8.1K0
Nginx 静态资源访问
HTTP请求是如何关联Nginx server{}块的?
Nginx是企业内网的对外入口,它常常同时对接许多应用,因此,Nginx上会同时监听多个端口、为多个域名提供服务。然而,匹配多级域名并不简单,Nginx为此准备了字符串精确匹配、前缀通配符、后缀通配符、正则表达式,当它们同时出现时,弄清楚HTTP请求会被哪个server{ }下的指令处理,就成了一件困难的事。
陶辉
2023/10/18
4580
HTTP请求是如何关联Nginx server{}块的?
相关推荐
Nginx域名访问处理过程 原
更多 >
交个朋友
加入HAI高性能应用服务器交流群
探索HAI应用新境界 共享实践心得
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档