|
|
|
|
移动端

2.5 虚拟服务器部分

《精通Nginx(第2版)》第2章配置指南,在本章,我们看到了如何构建Nginx的配置文件。模块化的本质值得思考,从某种意义上讲,Nginx本身也是模块化的。本节为大家介绍虚拟服务器部分。

作者:李红军 译来源:人民邮电出版社|2017-08-28 21:03

【新品产上线啦】51CTO播客,随时随地,碎片化学习

2.5 虚拟服务器部分

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

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

  1. listen address[:port];  
  2. listen port;  
  3. listen unix:path; 

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

表2-6Listen指令的参数

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

  1. server {  
  2.  listen 80;  
  3.  return 444;  

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

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

通配符可以替代部分子域名:*.example.com。

通配符可以替代部分顶级域:www.example.*。

一种特殊形式将匹配子域或域本身:.example.com(匹配*.example.com也包括example.com)。

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

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

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

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

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

参数default_server被用于处理其他没有被处理的请求。因此,总是明确地推荐设置default_server,以便这些没有被处理的请求通过这种定义的方式处理。

除了这个用法外,default_server也可以使用同样的listen指令配置若干个虚拟服务器。这里设置的任何指令都将会在匹配的server区段有效。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

PHP5与MySQL5 Web开发技术详解

本书是目前中文版本第一个真正介绍PHP 5及MySQL 5新增语法与功能的权威宝典! 本书本着精、全、要三宗旨,从理论中延伸,从实践中深入,详...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊