实际处理请求的方法ngx_http_mytest_handler(在配置配置项的回调方法中被调用(用于解析配置项))将接收一个ngx_http_request_t类型的参数,返回一个ngx_int_t类型的结果。

typedef ngx_int_t (*ngx_http_handler_pt)(ngx_http_request_t *r);

请求的所有信息都可以在传入的ngx_http_request_t类型参数r中获得。

typedef struct ngx_http_request_s ngx_http_request_t;

struct ngx_http_request_s

{

  ngx_uint_t method;

  ngx_uint_t http_version;

  

  ngx_str_t request_line;

  ngx_str_t uri;

  ngx_str_t args;

  ngx_str_t exten;

  ngx_str_t unparsed_uri;

  ngx_str_t method_name;

  ngx_str_t http_protocol;

  u_char *uri_start;

  u_char *uri_end;

  u_char *uri_ext;

  u_char *args_start;

  u_char *request_start;

  u_char *request_end;

  u_char *method_end;

  u_char *schema_start;

  u_char *schema_end;

};

在对一个用户请求进行解析时,可以得到下列4类信息

1)方法名

2)URI

3)URL参数

4)协议版本

获取HTTP头部

在ngx_http_request_t *r中就可以取到请求中的HTTP头部。

struct ngx_http_request_s

{

  ngx_buf_t *header_in;//指向nginx收到的未经解析的http头部

  ngx_http_headers_in_t headers_in;//存储已经解析过的http头部

};

获取http包体

http包体的长度有可能非常大,如果试图一次性调用并读取完所有的包体,那么多半会阻塞Nginx进程。http框架提供了一种方法来异步地接受包体

ngx_int_t ngx_http_read_client_request_body(ngx_request_t *r,ngx_http_client_body_handler_pt post_handler);

【Nginx】处理用户请求的更多相关文章

  1. Nginx根据用户请求的不同参数返回不同的json值

    用户请求url:http://localhost:8000/getconfig?v=1.03.01,根据参数v=1.03.01或者其他的值返回不同的json值.如果用户请求不带该参数,则返回默认的js ...

  2. Nginx记录用户请求Header到access log

    为了统计和其它用途,经常有人需要自定义Nginx日志,把http请求中的某个字段记录到日志中,刚好在看lua+nginx的文章,第一想到的是用lua赋值来做,但是想想有点小恶心,于是Google了一番 ...

  3. 阿里云openssl升级,实现nginx主动推送,nginx主动推送能够有效减少不必要的报文传输,减少用户请求次数,以达到更快访问速度

    现有版本检查 [root@node3 ~]# openssl version               #这个版本是无法支持http2.0主动推送功能.需要升级为2019版本. OpenSSL 1. ...

  4. Nginx 处理Http请求简单流程

    L45 1:三次握手后 系统内核收到请求根据端口负载均衡的分配到某个worker 2:nginx 会分配一个512byte链接内存池 3:初始化nginx的http模块并等待用户请求,假设用户在cli ...

  5. Nginx配置TCP请求转发

    Nginx配置TCP请求转发 1.TCP请求转发基于stream在1.9版本前,需要单独编译安装该组建: # 依赖服务 [root@baolin conf]#yum -y install pcre-d ...

  6. 【Nginx】HTTP请求的11个处理阶段

    Nginx将一个HTTP请求分成多个阶段.以模块为单位进行处理.这样做的优点是使处理过程更加灵活.减少耦合度.HTTP框架将处理分成了11个阶段,各个阶段能够包括随意多个HTTP模块并以流水线的方式处 ...

  7. 万字长文!一次性弄懂 Nginx 处理 HTTP 请求的 11 个阶段

    Nginx 处理一个 HTTP 请求的全过程 前面给大家讲了 Nginx 是如何处理 HTTP请求头部的,接下来就到了真正处理 HTTP 请求的阶段了.先看下面这张图,这张图是 Nginx 处理 HT ...

  8. nginx使用用户真实IP做hash(解决经过CND后ip_hash失效问题)

    在nginx中常用的有以下四种负载均衡的算法,分别是:round-robin.ip-hash.least-connected和weighted.当然在实际生产中或许使用最多的就是ip-hash了,一般 ...

  9. Nginx如何处理一个请求

    看了下nginx的官方文档,其中nginx如何处理一个请求讲解的很好,现在贴出来分享下.Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口*:80上监听 ...

随机推荐

  1. liunx防火墙的基本操作

    centos7中的使用 CentOS 7.0默认使用的是firewall作为防火墙 查看防火墙状态------->firewall-cmd --state 停止firewall-------&g ...

  2. uva10163 Storage Keepers

    习题9-9 注意前提是最小值最大.很少做两次dp的题. 初始化要细心. #include<iostream> #include<cmath> #include<algor ...

  3. Qt中常用的类

    QApplication 应用程序类                管理图形用户界面应用程序的控制流和主要设置 QLabel 标签类                                提供 ...

  4. 通俗理解 模糊自适应PID

    模糊自适应PID算法就是在经典的PID的基础上添加模糊控制规则库,建立这个库的目的就是算法能够自己来进行改变P.I.D的值. 就拿温度的上升过程控制来说,刚开始的时候,希望温度能够快速的升到终点温度, ...

  5. Caused by: java.lang.ClassNotFoundException: Cannot find class: User

    源代码: <select id="selectAll" resultType="User"> select user_id uid,user_nam ...

  6. AspNetCore容器化(Docker)部署(二) —— 多容器通信

    一.前言 着上一篇 AspNetCore容器化(Docker)部署(一) —— 入门,在单个容器helloworld的基础上引入nginx反向代理服务器组成多容器应用. 二.配置反向代理转接 配置转接 ...

  7. ios之coredata

    Core Data数据持久化是对SQLite的一个升级,它是ios集成的,在说Core Data之前,我们先说说在CoreData中使用的几个类. (1)NSManagedObjectModel(被管 ...

  8. spring注解开发-AOP(含原理)

    一:AOP基本使用 AOP指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式: 步骤一:导入aop模块:Spring AOP:(spring-aspects) <depen ...

  9. 695. Max Area of Island@python

    Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...

  10. openwrt vsftp

    vsftp: very security ftp openwrt配置:make menuconfig  ==> network ==> file transfer ==> vsftp ...