《精通Nginx》一2.5 虚拟server部分

简介:

本节书摘来异步社区《精通Nginx》一书中的第2章,第2.5节,作者: 【瑞士】Dimitri Aivaliotis 译者: 陶利军 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.5 虚拟server部分

任何由关键字server开始的部分都被称作“虚拟服务器”部分。它描述的是一组根据server_name指令逻辑分割的资源,这些虚拟服务器响应Http请求,因此它们都包含在http部分中。

一个虚拟服务器由listen和server_name指令组合定义,listen指令定义了一个IP地址/端口组合或者是UNIX域套接字路径。

listen address[:port];
listen port;
listen unix:path;

如表2-6所示,listen指令唯一地标识了在Nginx下的套接字绑定,此外还有一些其他的可选参数。


b6

server_name指令是相当简单的,但可以用来解决一些配置问题。它的默认值为"",这意味着server部分没有server_name指令,对于没有设置Host头字段的请求将会匹配该server处理。这种情况可用于,例如,丢弃这种缺乏Host头的请求。

server {
    listen 80;
    return 444;
}

在这个例子中使用的Http非标准代码444将会使得Nginx立即关闭一个连接。

除了普通的字符串之外,Nginx也接受通配符作为server_name的参数。

  • 通配符可以替代部分子域名:*.example.com。
  • 通配符可以替代顶级域部分:www.example.*。
  • 一种特殊形式将匹配子域或域本身:
.example.com(匹配*.example.com也包括example.com)。

通过在域名前面加上波浪号(〜),正则表达式也可以被作为参数应用于se`javascript
rver_name。

server_name~^www.example.com$;
server_name~^www(d+).example.(com)$;

后一种形式是利用捕获,可以在以后引用中进一步配置(用$1,$2等)指令中使用。

对于一个特定的请求,确定哪些虚拟服务器提供该请求的服务时,应该遵循下面的逻辑。

1.匹配IP地址和listen指令指定的端口。

2.将Host头字段作为一个字符串匹配server_name指令。

3.将Host头字段与server_name指令值字符串的开始部分做匹配。

4.将Host头字段与server_name指令值字符串的尾部分做匹配。

5.将Host头字段与server_name指令值进行正则表达式匹配。

6.如果所有Host头匹配失败,那么将会转向listen指令标记的default_server。

7.如果所有的Host头匹配失败,并且没有default_server,那么将会转向第一个server的listen指令,以满足第1步。

这个逻辑体现在下面的图2-1中。

<span style='display:block;text-align:center'>
![1](https://yqfile.alicdn.com/0047ef16555a7c9b071d8cd674b0e338c4c7737c.png)

</span>

default_server被用于处理其他方式没有处理的请求。因此推荐总是明确地设置default_server,以便这些没有被处理的请求通过这种定义的方式处理。
相关文章
|
8月前
|
应用服务中间件 nginx
百度搜索:蓝易云【HTTP请求是如何关联Nginx server{}块的?】
总结来说,Nginx中的 `server{}`块用于关联HTTP请求和虚拟主机,通过配置不同的 `server{}`块,可以实现多个域名或IP地址的请求分发和处理。这样,Nginx可以根据不同的请求来提供不同的服务和内容。
72 0
|
8月前
|
运维 负载均衡 应用服务中间件
LNMP详解(九)——Nginx虚拟IP实战
LNMP详解(九)——Nginx虚拟IP实战
141 2
|
负载均衡 算法 应用服务中间件
Nginx系列教程(08) - Upstream Server 负载均衡
Nginx系列教程(08) - Upstream Server 负载均衡
706 0
|
3月前
|
网络协议 应用服务中间件 nginx
FFmpeg错误笔记(一):nginx-rtmp-module推流出现 Server error: Already publishing
这篇文章讨论了在使用nginx-rtmp-module进行RTMP推流时遇到的“Server error: Already publishing”错误,分析了错误原因,并提供了详细的解决办法,包括修改nginx配置文件和终止异常的TCP连接。
222 0
FFmpeg错误笔记(一):nginx-rtmp-module推流出现 Server error: Already publishing
|
5月前
|
JavaScript 应用服务中间件 PHP
nginx server 禁止特定目录下的某类文件访问
【8月更文挑战第26天】这段Nginx配置代码旨在保护`/uploads/`目录下的文件,禁止执行任何`.php`, `.html`, `.htm`, 或 `.js`等潜在有害文件,即便被访问也无法运行。取而代之的是重定向到首页。为了实现这一设置,用户需要定位到对应子域名的`.conf`配置文件中进行相应修改。若网站支持多个访问域名,则需确保在正确的`.conf`文件中实施此配置。
117 1
|
6月前
|
JSON 应用服务中间件 nginx
Nginx的server块和location块的简单说明
Nginx的server块和location块的简单说明
|
7月前
|
tengine 安全 应用服务中间件
修改Nginx/Tengine版本名称伪装任意WEB SERVER
修改Nginx/Tengine版本名称伪装任意WEB SERVER
105 1
|
8月前
|
安全 Ubuntu 应用服务中间件
【报错】ubutun下启动nginx失败:500 internal server error
【报错】ubutun下启动nginx失败:500 internal server error
647 0
|
8月前
|
弹性计算 算法 应用服务中间件
倚天使用|Nginx性能高27%,性价比1.5倍,基于阿里云倚天ECS的Web server实践
倚天710构建的ECS产品,基于云原生独立物理核、大cache,结合CIPU新架构,倚天ECS在Nginx场景下,具备强大的性能优势。相对典型x86,Http长连接场景性能收益27%,开启gzip压缩时性能收益达到74%。 同时阿里云G8y实例售价比G7实例低23%,是Web Server最佳选择。
|
负载均衡 Java 应用服务中间件
nginx loadbalance spring server负载均衡
nginx loadbalance spring server负载均衡
248 0