龙空技术网

nginx 限制了你的想象?那么请用openresty

Linux特训营 1413

前言:

今天看官们对“openrestynginx报500”大致比较看重,同学们都想要分析一些“openrestynginx报500”的相关文章。那么小编也在网上汇集了一些关于“openrestynginx报500””的相关内容,希望我们能喜欢,同学们快快来学习一下吧!

目录

nginx应用及开发

openresty如何扩展nginx的功能

openresty实战案例讲解

一起学习的可以后台私信“资料”送学习视频资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等等。。。),免费分享

openresty简介

openresty是一个基于nginx与lua的高性能web平台,其内部集成了大量精良的lua库、第三方模块以及大数的依赖项。用于方便搭建能够处理超高并发、扩展性极高的动态web应用、web服务和动态网关

·openresty通过汇聚各种设计精良的nginx模块,从而将nginx有效地变成一个强大的通用Web应用平台。这样,Web开发人员和系统工程师可以使用Lua脚本语言调动Nginx支持的各种C以及Lua模块,快速造出足以胜任10K乃至1000K以上单机并发连接的高性能Web应用系统。

·openresty的目标是让你的Web服务直接跑在Nginx服务内部,充分利用Nginx的非阻塞1/0模型,不仅仅对HTTP客户端请求,甚至于对远程后端诸如MySQL、PostgreSQL、Memcached以及Redis等都进行致的高性能响应。

nginx应用及开发

静态web服务

反向代理(服务器)

正向代理(客户端)

比如这里是我们客户端,这里是nginx,大家都知道在国内youtube,google访问不了,nginx可以去访问youtube和google,客户端client不能直接去访问youtube和google,那么我们可以链接nginx,nginx这个服务器所在的网端它可以去访问youtube,google,它代理的我我们客户端,

<img src="/users/xiefan/Library/Application support/typora-user-images/image-20210109201911770.png"alt-"image-20210109201911770"style-"zoom:50%;"/>

负载均衡

nginx实现负载均衡又是什么样的一个流程呢如图

<img src="/users/xiefan/Library/Application Support/typora-user-images/image-20210109202223731.png"alt="image-20210109202223731"style-"zoom:50%;"/>

nginx开发

openresty可以使用Lua脚本语言调动Nginx支持的各种C以及Lua模块,

模块开发 handle开发

首先需要了解nginx几个基本概念,先从http请求触发分为11个阶段,我们怎么对11个阶段做处理呢,在这里它会有个状态机,我们内部nginx会根据状态机的状态去切换,对我们这11个阶段切换,

每一个阶段里有一个责任链表模式,在这里有多个handle处理(如下图)

handle链接起来依次的处理。

过滤器开发

过滤模块可以叠加,也就是说一个请求会被所有的HTTP过滤模块依次处理。

过滤模块的调用是有顺序的,它的顺序在编译的时候就决定了。控制编译的脚本位于auto/modules中,当你编译完Nginx以后,可以在objs目录下面看到一个ngx_modules.c的文件。打开这个文件,有类似的代码:

ngx_module_t *ngx_modules[] = {...&ngx_http_write_filter_module,&ngx_http_header_filter_module,&ngx_http_chunked_filter_module,&ngx_http_range_header_filter_module,&ngx_http_gzip_filter_module,&ngx_http_postpone_filter_module,&ngx_http_ssi_filter_module,&ngx_http_charset_filter_module,&ngx_http_userid_filter_module,&ngx_http_headers_filter_module,&ngx_http_copy_filter_module,&ngx_http_range_body_filter_module,&ngx_http_not_modified_filter_module,NULL};

write_filternot_modified_filter,模块的执行顺序是反向的。也就是说最早执行的是not_modified_filter,然后各个模块依次执行。所有第三方的模块只能加入到copy_filterheaders_filter模块之间执行。

在编译Nginx源码时,已经定义了一个由所有HTTP过滤模块组成的单链表,这个单链表是这样的:

链表的每一个元素都是一个C源代码文件,这个C源代码文件中有两个指针,分别指向下一个过滤模块(文件)的过滤头部和包体的方法(可理解为链表中的next指针)

过滤模块单链表示意图:

总结,

首先openresty是基于nginx+lua的,大家有没有去想过nginx和lua是如何结合的?也就是nginx为什么会执行lua代码?这也是我想第一给大家介绍的内容,nginx是c写的web服务,所以nginx+lua其实就是c语言调用lua的过程。这个过程不是春哥发明的,这是lua本身具有c的lib包,能够让c去解析lua的代码并执行,

标签: #openrestynginx报500