`
jsczxy2
  • 浏览: 1275029 次
  • 性别: Icon_minigender_1
  • 来自: 常州
文章分类
社区版块
存档分类
最新评论

nginx处理web请求分析

阅读更多
Nginx是什么?Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发的,它已经在该站点运行超过两年半了。Igor Sysoev在建立的项目时,使用基于BSD许可。

笔者的VPS使用的是nginx服务器,以前配置都是从网上拷贝过来的,一直一知半解,正好手头有VPS可以玩,趁这个机会认真学习下nginx的配置.下面的文章是讲nginx如何处理web请求(web request)过程的。


一、基于域名的虚拟服务器

nginx首先确定使用哪一个server域来处理请求,下面的例子中有3个虚拟服务器监听*:80端口。


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;
...
}
在上面的配置中,nignx根据HTTP请求“Host”的值,确定具体哪一个server接收web请求。如果“Host”不存在或者Host的值无法匹配任何sever中的$host_name,nginx就会把web请求送到默认的server中。如果没有定义default_server,默认将请求传递给第一个server。


server {
    listen       80  default_server;
    server_name  nginx.net  www.nginx.net;
    ...
}
参数“default_server” 是0.8.21后版本新增的内容. 此前的版本用“default”代替。 
上面是针对web请求中包含“Host”值的情况,如果这个值不存在,那么可以使用下面的方法。

二、如何处理无server_name的请求?

server {
    listen       80  default_server;
    server_name  _;
    return       444;
   #所用"Host"为空的请求返回444响应。
}
三、处理基于IP和域名的虚拟主机


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;
    ...
}
上面的配置中,nginx首先匹配IP地址和端口,然后在确定响应IP下的server_name,如果没有找到任何匹配的server_name,ngixn将请求传递给默认server。例如,当nginx收到来自 192.168.1.1:80 端口的请求www.nginx.com,
上例中没有定义默认server,那么这个请求将被传递到第一个server中。
nginx可以为不同的IP地址和端口定义多个默认server:

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;
    ...
}
四、如何处理PHP请求

下面我们来看看nginx是如何确定web请求的location的:


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 / {…}。然后再依次包含匹配正则表达式的location,如果没有找到匹配的正则表达式,nginx会将请求重新定位到定位符”/”下。
个人理解:nginx会优先处理定位符"/"、"/images"这些location,其次才按顺序匹配包含正则的location。例如:"./logo.gif"的请求首先会匹配定位符"/",其次是通用表达式"\.(gif|jpg|png)$",因此它被第二个定位符所匹配.Nginx会使用指令"root /data/www"将请求映射到文件"/data/www/logo.gif",之后文件被返回给客户端。换言之,ngixn总是会把请求传递到最后一个匹配的location中。
需要注意到的是,ngixn处理的URI中不包含查询字符串(query string)部分,因为这些查询字符串的不确定因素太多,例如:


/index.php?user=john&page=1
/index.php?page=1&user=john
也可以这样写:


/index.php?page=1&something+else&user=john
最后看一下上面的例子中,nignx是如何处理的:

“./logo.gif”的请求首先会匹配定位符”/”,其次是通用表达式”\.(gif|jpg|png)$”,因此它被第二个定位符所匹配.Nginx会使用指令”root /data/www”将请求映射到文件”/data/www/logo.gif”,之后文件被返回给客户端
“/index.php”的请求也一样,首先匹配定位符”/”,其次是通常表达式”\.(php)$”.因而它由后者处理,请求被传递给在localhost:9000监听的FastCGI服务.”fastcgi_param”指令将FastCGI的参数SCRIPT_FILENAME设置为”/data/www/index.php”,再由FastCGI服务器执行该文件.变量$document_root的值与”root”指令的值是相等的,变量$fastcgi_script_name的值等于所请求的url,如”/index.php”等等
带”/about.html”的请求只匹配定位符”/”,因此它将在这个定位符中得到处理,由”root /data/www”指令将请求映射到”/data/www/about.html”,最后文件才被返回给客户端.
处理”/”这样的请求就更复杂了,因为只匹配”/”定位符所以只能在其中处理.”index”指令会根据它的参数及”root /data/www”指令,测试该目录下是否有默认文件存在.例如,如果存在”/data/www/index.php”文件,请求会被内部重定向到”/index.php”,然后Nginx会据此再进行一次定位符搜索,看起来就像是新接收到一个请求命令.一般而言,被重定向的请求最后会由FastCGI服务处理.

 

 

分享到:
评论

相关推荐

    Nginx中http请求处理过程

    这些数据结构是 Nginx 高效处理请求的基础。 1.2 HTTP 请求中 phase 的介绍 HTTP 请求中 phase 是指从客户端发送请求到 Nginx 服务器处理完毕的整个过程。这个过程可以分为多个阶段,每个阶段都有其特定的处理逻辑...

    详解nginx请求头数据读取流程

    整个请求头读取流程体现了Nginx作为高性能Web服务器的高效性和灵活性,能够快速处理大量并发请求,同时对异常情况进行适当处理,确保服务器稳定运行。理解这一过程对于优化Nginx配置和调试HTTP请求问题具有重要意义...

    nginx日志记录post请求的内容和cookies

    ### Nginx 日志记录 POST 请求的内容和 Cookies 在 Web 开发与运维中,Nginx 是一个非常流行的 HTTP 和反向代理服务器。对于开发者来说,掌握如何利用 Nginx 来记录用户发送的 POST 请求内容及 Cookies 信息至关...

    nginx Web服务器代码

    Nginx是一款高性能、轻量级的Web服务器和反向代理服务器,因其高效的并发处理能力和低内存占用而受到广泛关注。它的设计目标是实现高并发、低延迟以及稳定性,因此在大型网站和互联网服务中广泛应用。 **一、Nginx...

    Nginx高性能Web服务器详解(完整版)pdf下载

    Nginx是一款高性能的Web服务器,它以其反向代理、负载均衡、静态文件处理和高效非阻塞I/O模型而闻名。Nginx的设计理念是轻量级、高并发,因此在处理高流量网站时表现出色。以下是Nginx的一些核心知识点: 1. **模块...

    实战Nginx 高性能web服务器

    - 高并发连接:Nginx处理连接请求的效率非常高,能有效处理大量并发请求。 - 内存消耗少:相比其他Web服务器,Nginx在处理大量连接时,消耗的内存较少。 - 配置文件简单:Nginx的配置文件非常直观易懂,降低了配置...

    通过nginx实现跨域请求

    Nginx是一个高性能的HTTP和反向代理服务器,它常用于配置和管理网站的访问规则,包括处理跨域请求。 跨域请求是Web开发中常见的限制,由浏览器的同源策略实施。同源策略不允许一个域名下的文档或脚本获取或操作另一...

    Nginx高性能Web服务器实战教程+高清+完整书签

    《Nginx高性能Web服务器实战教程》是一本深入讲解如何利用Nginx构建高效稳定Web服务的书籍。Nginx以其高性能、轻量级、反向代理和负载均衡等特性,已经成为许多企业和开发者首选的Web服务器。这本书涵盖了从基础配置...

    Nginx日志分析工具2.1.0.zip

    Nginx作为一款高性能的Web服务器和反向代理服务器,广泛应用于各类网站和应用程序中。在日常运维过程中,通过对Nginx日志的分析,可以获取到关于服务器性能、用户访问行为以及可能存在的问题等重要信息。 Nginx日志...

    补充:Nginx之模块处理流程

    Nginx是一个高性能的Web服务器和反向代理服务器,其内部设计采用了模块化的架构,这使得Nginx具有高度灵活性和可扩展性。模块化设计是Nginx的核心特点,它将复杂的系统分解为几个独立的功能组件,每个组件专注于一个...

    Nginx.1.Web.Server.Implementation.Cookbook

    《Nginx 1 Web Server Implementation Cookbook》不仅涵盖了Nginx的基本操作,还深入介绍了其高级特性,如动态模块加载、流媒体处理、日志分析等。这些高级特性为开发人员提供了更多的灵活性和创造力,使他们能够...

    nginx高性能web服务器.pdf

    《Nginx高性能Web服务器》是一本深入探讨Nginx技术的权威著作,它涵盖了Nginx的基础知识、配置技巧以及优化策略。Nginx,以其高性能、轻量级和反向代理能力著称,是现代互联网架构中的关键组件。在本资料中,我们将...

    nginx-web服务器

    Nginx是一个高性能、轻量级的Web服务器,由俄罗斯的Igor Sysoev开发,其设计目标是解决高并发访问的问题,因此在处理静态资源和反向代理方面表现出色。Nginx以其高效的性能、稳定的运行和低内存占用而广受赞誉,被...

    Nginx的安装实现web功能

    而Nginx则采用事件驱动模型,利用epoll(Linux下的高效IO复用技术)事件通知机制,通过较少的进程和多个线程共享内存,实现更高的并发处理能力,理论上每秒并发连接请求可达到50000个。然而,这种模式的代价是稳定性...

    实战Nginx搭建高性能Web服务器

    本教程将深入探讨如何通过实战来搭建一个基于Nginx的高性能Web服务器。 首先,我们需要了解Nginx的工作原理。Nginx采用事件驱动的异步非阻塞模型,能够高效地处理大量并发连接,这得益于其多进程架构。主进程主要...

    Nginx高性能Web服务器详解.pdf

    Nginx是一款广泛应用的开源Web服务器,以其高性能、高并发处理能力以及轻量级的特性著称。本书旨在帮助读者全面理解Nginx的工作原理和配置技巧,提升网站服务的稳定性和效率。 Nginx的核心特点在于其反向代理、负载...

    Nginx高性能Web服务器详解

    Nginx是一款高性能、轻量级的Web服务器和反向代理服务器,因其高效稳定和出色的并发处理能力而在互联网行业中广泛应用。本章将深入探讨Nginx的架构原理、配置、功能以及如何利用它来构建高性能的Web服务。 一、...

    Nginx高性能Web服务器实战教程

    Nginx以其反向代理、负载均衡、静态文件处理等功能,以及轻量级、高性能的特性,在现代Web架构中占据着重要地位。 首先,我们要理解Nginx的工作原理。Nginx采用事件驱动模型,非阻塞I/O处理方式,使其在高并发场景...

    nginx高性能web服务器详解

    - **动静分离**:Nginx处理静态资源,Java处理动态请求,降低后端服务器压力。 - **微服务架构**:Nginx作为API Gateway,统一入口,实现服务间的路由和鉴权。 6. **最佳实践** - **定期更新**:保持Nginx版本...

Global site tag (gtag.js) - Google Analytics