高性能Web服务器Nginx的配置与部署研究(3)Nginx的请求处理机制
本文为您解读,Nginx是如何处理请求的,让你从逻辑上有一个清晰的认识。
1. 处理什么样的请求
处理访问到 Nginx 所在 IP 地址的请求,并且这些请求的 HTTP 头信息中的 Host 为所要处理的域名(如下以80端口为例),如下几个 server 就对应响应的请求:
server {
listen 80;
server_name nginx.org www.nginx.org;
...
}
server {
listen 80;
server_name nginx.net www.nginx.net;
...
}
server {
listen 80;
server_name nginx.com www.nginx.com;
...
}
2. 默认 server
如果不主动设置默认server
,那么第一个server
就会被当做默认server
。若要主动设置,应该如下配置:
server {
listen 80 default_server;
server_name nginx.net www.nginx.net;
...
}
此项的版本注意事项:
- 0.8.21 版本之前,使用
default
关键词;
- 从 0.8.21 版本开始,使用
default_server
关键词。
另外注意,default_server
是端口的一个属性,不是server_name
的一个属性。
3. 如何处理未定义 host 为 server_name 的请求
比如,如果不想处理 HTTP 请求中没有 HOST 字段的头信息的情况,那么可以如下:
server {
listen 80;
server_name "";
return 444;
}
此项的版本注意事项:
- 0.8.48 之前的版本,如果没有设置
server_name
的话,那么会把server_name
设置为本机的 hostname。
- 0.8.48 开始的版本,如果没有设置
server_name
的话,那么会把server_name
设置为""
,所以如果要达到上述代码的效果,在此版本开始可以不设置server_name
。
4. Nginx 的虚拟主机监听
请先看如下配置:
server {
listen 192.168.1.1:80;
server_name nginx.org www.nginx.org;
...
}
server {
listen 192.168.1.1:80;
server_name nginx.net www.nginx.net;
...
}
server {
listen 192.168.1.2:80;
server_name nginx.com www.nginx.com;
...
}
这个应该很好理解,如果listen
的 IP 地址和端口号都吻合了,就看 HTTP 请求中的 HOST 头信息与某个server_name
中的 name 是否吻合。如果server_name
不吻合,就到该端口对应的default_server
那里处理请求,如果default_server
的server_name
也没有与 HOST 头信息吻合,那么就放弃该请求。
特别再次强调,default_server
是端口的属性,而非server_name
的属性。所以可以有如下配置:
server {
listen 192.168.1.1:80;
server_name nginx.org www.nginx.org;
...
}
server {
listen 192.168.1.1:80 default_server;
server_name nginx.net www.nginx.net;
...
}
server {
listen 192.168.1.2:80 default_server;
server_name nginx.com www.nginx.com;
...
}
5. 一个简单的 PHP 站点的 Nginx 配置
server {
listen 80;
server_name nginx.org www.nginx.org;
root /data/www;
location / {
index index.html index.php;
}
location ~* \.(gif|jpg|png)$ {
expires 30d;
}
location ~ \.php$ {
fastcgi_pass localhost:9000;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Nginx 在匹配location
的时候,不是按照配置代码给出的顺序进行匹配的,而是先按照匹配表达式中的文字字符串(literal string)的明确程度,从最明确的开始匹配。这么说可能有点含混不清,简单说,没有正则规则的匹配表达式,是最明确的。比如如果这个匹配表达式就是一个“/”
或者“/abc”
,那么这就是最明确的。上例中的"/"
就是这个最明确的蚊子字符串(the most specific literal string),其实也是该例中唯一的。所以先从这个location
开始,然后再按照location
的列出顺序,依次匹配,直到出现第一个匹配的location
后停止。如果所有的location
都不匹配,就用第一个找到的最明确的文字字符串来匹配(the most specific literal string)。
6. 待查询的 HTTP 请求
Nginx只处理无查询的HTTP请求,因为查询请求的查询字段的顺序不确定,比如:
/index.php?user=john&page=1
/index.php?page=1&user=john
再比如:
/index.php?page=1&something+else&user=john
7. 几个location的例子
例1:
/logo.gif
“/”
先被找到,然后匹配"\.(gif|jpg|png)$"
,再根据 redirective 找到root
是/data/www
,然后这个请求就被映射到"/data/www/logo.gif"
了,最后文件就被发送给到了客户端。
例2:
/index.php
"/"
先被找到,然后匹配"\.(php)$"
,然后 request 就被传递给在 9000 端口上监听的 FastCGI 服务器,"fastcgi_param"
directive 设置 FastCGI 的参数SCRIPT_FILENAME
为"/data/www/index.php"
,然后FastCGI服务器就执行这个文件。(注意其中document_root
是/data/www
,fastcgi_script_name
是/index.php
。)
例3:
/about.html
"/"
先被找到,且只有这一个匹配的。然后根据root
值/data/www
,就找到了文件/data/www/about.html
,然后发送给客户端。
例4:
/
"/"
是很复杂的,先找到"/"
这个location
,然后根据root
值/data/www
,看/data/www/index.php
是否存在,如果存在 directive 就在内部重定向到/index.php
,然后 Nginx 根据这个再次搜索location
,重复上面第二个例子。
-
更多 Nginx 技术博文请访问 CSDN 专栏 《Nginx 高性能Web服务器》
转载请注明来自“柳大的CSDN博客”: blog.CSDN.net/Poechant
-
相关推荐
《Nginx高性能Web服务器实战教程》是一本深入讲解如何利用Nginx构建高效稳定Web服务的书籍。Nginx以其高性能、轻量级、反向代理和负载均衡等特性,已经成为许多企业和开发者首选的Web服务器。这本书涵盖了从基础配置...
《Nginx高性能Web服务器详解》是一本深入探讨Nginx技术的专业书籍,由博文视点出版,电子工业出版社发行。Nginx是一款广泛应用的开源Web服务器,以其高性能、高并发处理能力以及轻量级的特性著称。本书旨在帮助读者...
Nginx作为高性能Web服务器的关键特性包括: 1. 事件驱动架构:Nginx使用了与传统多线程模型不同的事件驱动模型,这种方式更加高效地处理大量并发连接。 2. 轻量级:Nginx的资源占用很小,包括内存和CPU的占用都远...
实战Nginx 高性能web服务器 在现代的网络服务架构中,Web服务器是核心组件之一,负责响应客户端请求,提供网页内容。在众多Web服务器中,Nginx已经成为了高性能、高可靠性的代名词,它不仅能够处理静态内容,还能...
Nginx是一款高性能、轻量级的Web服务器和反向代理服务器,因其高效稳定和出色的并发处理能力而在互联网行业中广泛应用。本章将深入探讨Nginx的架构原理、配置、功能以及如何利用它来构建高性能的Web服务。 一、...
Nginx 是一款非常优秀的 Web 服务器,它不仅适合处理高并发请求,还能有效地支持各种 Web 应用程序的部署。对于前端 Vue 项目来说,通过简单的几步配置即可将其部署到 Nginx 上,从而充分利用 Nginx 的高性能和稳定...
《决战Nginx系统卷:高性能Web服务器详解与运维》第一部分首先讲述了Nginx服务器的功能、模块管理和进程管理,然后讲述Nginx如何处理请求,在这个基础之上再认识Nginx提供的服务器的名字,Nginx服务器最大的焦点在于...
Nginx是一款高性能的HTTP和反向代理服务器,以其高效的并发处理能力、低内存占用以及模块化设计而闻名。在很多场景下,Nginx被...在实际工作中,结合具体的业务场景进行灵活调整,Nginx将成为你得力的Web服务器助手。
《高性能Web服务器Nginx及相关新技术的应用实践》是由专家张宴主讲的一门课程,主要聚焦于如何利用Nginx实现高效能的Web服务,并探讨与之相关的前沿技术。Nginx作为一款广泛使用的开源Web服务器,以其高性能、高并发...
### Nginx 高性能 WEB 服务器系列知识点详解 #### 1. Nginx 入门简介 **Nginx** 是一款广受欢迎的高性能 HTTP 和反向代理服务器,同时也可作为 IMAP/POP3/SMTP 代理服务器。它以其出色的稳定性、丰富的功能集、...
### 实战Nginx:取代Apache的高性能Web服务器 #### Nginx简介 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序设计师Igor Sysoev所开发。自2004年公开发布以来,...
Nginx是一款高性能的Web服务器,它以其高效、稳定和低资源消耗而闻名,常被用作替代Apache的解决方案。本篇文章将深入探讨Nginx的特性、优势以及如何在实际环境中部署和配置Nginx。 一、Nginx的特点与优势 1. 异步...
Nginx是一款高性能、轻量级的Web服务器和反向代理服务器,因其高效稳定和低内存占用而备受青睐。在互联网行业中,Nginx经常被用来替代传统的Apache服务器,以应对高并发访问和大型网站的需求。本教程将深入探讨Nginx...
本书第一部分首先讲述了Nginx服务器的功能、模块管理和进程管理,然后讲述Nginx如何处理请求,在这个基础之上再认识Nginx提供的服务器的名字,Nginx服务器最大的焦点在于高并发和反向代理,在不多却足够使用的模块...
Nginx是一款高性能的轻量级Web服务器软件,由俄罗斯程序员Igor Sysoev在2004年开始开发,其设计目的是提供一个用于HTTP、HTTPS和SMTP服务的稳定、高效的服务器。Nginx以其高性能、可靠性、易于配置及低系统资源消耗...
本书第一部分首先讲述了Nginx服务器的功能、模块管理和进程管理,然后讲述Nginx如何处理请求,在这个基础之上再认识Nginx提供的服务器的名字,Nginx服务器最大的焦点在于高并发和反向代理,在不多却足够使用的模块...