《精通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下的套接字绑定,此外还有一些其他的可选参数。


7431174f80374f2ac9e9dd0db93925ad416a89b9


d8b8509853384c03429f15e3c7da05b693ecf6ed

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)。

通过在域名前面加上波浪号(〜),正则表达式也可以被作为参数应用于server_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中。
<div style="text-align: center">
 <img src="https://yqfile.alicdn.com/4e9da33c053c4e9b816a682adec144e5c001f231.png " >
</div>

default_server被用于处理其他方式没有处理的请求。因此推荐总是明确地设置default_server,以便这些没有被处理的请求通过这种定义的方式处理。
相关文章
|
3月前
|
应用服务中间件 nginx
百度搜索:蓝易云【HTTP请求是如何关联Nginx server{}块的?】
总结来说,Nginx中的 `server{}`块用于关联HTTP请求和虚拟主机,通过配置不同的 `server{}`块,可以实现多个域名或IP地址的请求分发和处理。这样,Nginx可以根据不同的请求来提供不同的服务和内容。
37 0
|
22天前
|
运维 负载均衡 应用服务中间件
LNMP详解(九)——Nginx虚拟IP实战
LNMP详解(九)——Nginx虚拟IP实战
34 2
|
5月前
|
负载均衡 算法 应用服务中间件
Nginx系列教程(08) - Upstream Server 负载均衡
Nginx系列教程(08) - Upstream Server 负载均衡
75 0
|
1天前
|
应用服务中间件 Linux nginx
【nginx】[emerg] "server" directive is not allowed here in /usr/local/nginx/conf/nginx.conf:45
【nginx】[emerg] "server" directive is not allowed here in /usr/local/nginx/conf/nginx.conf:45
4 0
|
1月前
|
弹性计算 算法 应用服务中间件
倚天使用|Nginx性能高27%,性价比1.5倍,基于阿里云倚天ECS的Web server实践
倚天710构建的ECS产品,基于云原生独立物理核、大cache,结合CIPU新架构,倚天ECS在Nginx场景下,具备强大的性能优势。相对典型x86,Http长连接场景性能收益27%,开启gzip压缩时性能收益达到74%。 同时阿里云G8y实例售价比G7实例低23%,是Web Server最佳选择。
|
4月前
|
负载均衡 Java 应用服务中间件
nginx loadbalance spring server负载均衡
nginx loadbalance spring server负载均衡
217 0
|
5月前
|
JavaScript 前端开发 Ubuntu
nginx部署vue后显示500 Internal Server Error解决方案
nginx部署vue后显示500 Internal Server Error解决方案
135 0
|
5月前
|
JavaScript 前端开发 Ubuntu
nginx部署vue后显示500 Internal Server Error解决方案
nginx部署vue后显示500 Internal Server Error解决方案
163 0
|
6月前
|
应用服务中间件 网络安全 nginx
nginx开启ssl报错: [emerg] "server" directive is not allowed here ...
nginx开启ssl报错: [emerg] "server" directive is not allowed here ...
|
6月前
|
前端开发 Cloud Native 应用服务中间件
深入解析 Nginx 代理配置:从 server 块到上游服务器的全面指南
深入解析 Nginx 代理配置:从 server 块到上游服务器的全面指南
299 0