
nginx
nginx使用
INGNIGHT
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
luajit官方性能优化指南和注解
luajit是目前最快的脚本语言之一,不过深入使用就很快会发现,要把这个语言用到像宣称那样高性能,并不是那么容易。实际使用的时候往往会发现,刚开始写的一些小test case性能非常好,经常毫秒级就算完,可是代码复杂度一上去了,动辄几十上百毫秒的情况就会出现,性能表现非常飘忽。为此luajit的mailling list也是有不少人咨询,作者mike pall的一篇比较完整的回答被放在了官方w...转载 2020-03-17 09:44:00 · 776 阅读 · 0 评论 -
通过lua操作http请求头
一、如何通过openresty操作http头http头分请求头和,响应头,在nginx的access_by_lua阶段操作请求头,操作请求头涉及两个函数。1、ngx.req.get_headers,第一个参数请求头个数,默认分析100个头,防止恶意攻击,第二个参数默认将头域信息转为小写,如果设置为true会关闭掉。2、ngx.req.set_headers对头的域信息作一些设置操作,并...原创 2020-03-17 18:05:54 · 11099 阅读 · 0 评论 -
openresty组成和技术特点
一、组成openresty包含4个部分,第一个部分lua-nginx-module,ngx的c module,将lua协程的唤醒和挂起纳入nginx事件驱动模块中,并提供丰富的lua api,使得开发者可以使用lua语言可以完成http层操作第二个部分,测试集,对lua-ngx-module做全面测试,工作量,复杂度高第三部分,resty库,lrucache,beanstalkd,...原创 2020-03-17 09:25:56 · 386 阅读 · 0 评论 -
Lua语言面向对象之函数闭包的方式面向对象
function People(name) local self = {} local function init() self.name = name end self.sayHi = function () print("Hello "..self.name) end init() return selfend--local p = People("Zhan...原创 2020-03-15 20:06:00 · 261 阅读 · 0 评论 -
Lua语言面向对象之复制表的方式面向对象
// clone表tablefunction clone(tab) -- 构造一个空table local ins = {} for key, var in pairs(tab) do ins[key] = var end return insendfunction copy(dist,tab) for key, var in pairs(tab) do dis...原创 2020-03-15 19:28:31 · 439 阅读 · 0 评论 -
lua语言介绍
一、lua简介lua官网:https://www.lua.org/lua下载:https://www.lua.org/download.html下载lua:wgethttps://www.lua.org/ftp/lua-5.3.5.tar.gz;tar -zxvf lua-5.2.5.tar.gz;cdlua-5.3.5;make linux;编译后生成两个可执行文件,lua和...原创 2020-03-15 12:16:47 · 369 阅读 · 0 评论 -
执行阶段
一、ngx_lua执行顺序下面这个图是 ngx_lua 各个指令的执行顺序。执行阶段说明:set_by_lua*: 流程分支处理判断变量初始化 rewrite_by_lua*: 转发、重定向、缓存等功能(例如特定请求代理到外网) access_by_lua*: IP 准入、接口权限等情况集中处理(例如配合 iptable 完成简单防火墙) content_by_lua*: 内容生...原创 2020-03-15 00:14:52 · 402 阅读 · 0 评论 -
子查询
一、子查询子查询只是模拟 HTTP 接口的形式, 没有 额外的 HTTP/TCP 流量,也 没有 IPC (进程间通信) 调用。所有工作在内部高效地在 C 语言级别完成。子查询只能在一个location里调用其它 一个或多个 `location。二、captureres = ngx.location.capture(uri, options?)发起子查询 返回一个包含四个元...原创 2020-03-14 23:11:02 · 207 阅读 · 0 评论 -
FFI和第三方模块
一、FFIFFI是LuaJIT中的一个扩展库,它允许我们使用 Lua 代码调用C语言的数据结构和函数。FFI库在很大程度上避免了在C中编写繁琐的手动Lua/C绑定的需要。无需学习单独的绑定语言 - 它解析普通的C声明!这些可以从C头文件或参考手册中剪切粘贴。如何调用外部C库函数呢?1、加载FFI库。2、为函数添加C声明。3、调用命名的C函数。看一个官方提供的简单示例:...原创 2020-03-14 21:13:48 · 946 阅读 · 0 评论 -
OpenResty缓存
一、使用 Lua shared dict官方文档:https://github.com/openresty/lua-nginx-module#ngxshareddict使用的话首先需要在 nginx.conf 加上一句:lua_shared_dict my_cache 128m;这个缓存是 Nginx 所有 worker 之间共享的,内部使用的 LRU 算法(最近最少使用)来判...原创 2020-03-14 00:24:57 · 2208 阅读 · 0 评论 -
连接数据库
连接数据库我们需要使用到ngx_lua的第三方库:lua-resty-redislibrary based on ngx_lua cosocket. lua-resty-mysqllibrary based on ngx_lua cosocket.这两个库都是基于cosocket实现的,特点是异步非阻塞。代码风格是同步的写法。更多第三方库详见:See Also。一、连接Mysql...原创 2020-03-13 22:54:45 · 415 阅读 · 0 评论 -
ngx lua API介绍
本节主要是带着大家简单的过一下常用的ngx_lua API。一、nginx lua directives和apingx_lua 有60多个指令(Directive),140多个API(截止到2019-3-26)。官方lua文档:https://www.nginx.com/resources/wiki/modules/lua/https://github.com/openres...原创 2020-03-13 12:21:17 · 2549 阅读 · 0 评论 -
OpenResty入门
一、lua代码:nginx/conf/lua/get_random_string.lua-- 实现随机字符串local args = ngx.req.get_uri_args()local salt = args.saltif not salt then ngx.exit(ngx.HTTP_BAD_REQUEST)endlocal str = ngx.m...原创 2020-03-13 11:30:28 · 872 阅读 · 0 评论 -
OpenResty HelloWorld
以 CentOS 为例:mkdir -p /opt# download openrestywget https://openresty.org/download/openresty-1.13.6.2.tar.gztar zxvf openresty-1.13.6.2.tar.gzcd openresty-1.13.6.2# configure./configure --pr...原创 2020-03-12 17:11:57 · 280 阅读 · 0 评论 -
openresty简介
OpenResty 简介OpenResty®是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。OpenResty 基于Nginx开发,可以简单认为是Nginx+lua-nginx-module的组合版。官网:ht...原创 2020-03-12 16:38:35 · 532 阅读 · 0 评论 -
103.及时清除缓存
ngx缓存失效时候都是通过proxy_cache_valid定义多长时间失效,以及通过上游服务发送来的响应的头部 比如Cache-Control,X-Accel定义缓存何时失效,这些缓存何时失效基于一个时间段后,像一个定时器一样过期 ...原创 2019-10-07 22:12:48 · 207 阅读 · 0 评论 -
102.如何减轻缓存失效时上游服务的压力
在业界当我们的访问服务遇到很大流量时,如果缓存服务比如ngx遇到问题,比如新增,或者一个ngx服务宕机他的缓存全部失效,如果重新起来,client大量请求,穿透ngx,全部达到上游服务,特别是热点文件.这些请求达到上游服务,导致上游服务一直启动不起来 ...原创 2019-10-07 21:22:52 · 204 阅读 · 0 评论 -
101.接收上游响应的缓存处理流程
接收到上游响应以后,ngx处理流程 set-cookie是服务器告诉浏览器这个响应可...原创 2019-10-07 21:08:34 · 181 阅读 · 0 评论 -
99.缓存的基本用法
cache.confproxy_cache_path /data/nginx/tmpcache levels=2:2 keys_zone=two:10m loader_threshold=300 loader_files=200 max_size=200m inactive=1m;server { server_na...原创 2019-10-07 20:41:23 · 435 阅读 · 0 评论 -
98.Nginx决策浏览器过期缓存是否有效
server { server_name cache.taohui.tech; ...原创 2019-10-07 15:20:16 · 214 阅读 · 0 评论 -
97.用好浏览器的缓存
原创 2019-10-07 12:27:54 · 161 阅读 · 0 评论 -
nginx热升级实现
热升级是什么?nginx在不停止服务时候,执行新的可执行文件生成进程,接收client请求nginx热升级流程 (1)将旧Nginx文件换成新Nginx文件(注意备份) ...原创 2019-08-10 21:55:27 · 853 阅读 · 0 评论 -
nginx源码分析-内存池
Nginx的内存池实现得很精巧,代码也很简洁。总的来说,所有的内存池基本都一个宗旨:申请大块内存,避免“细水长流”。一、创建一个内存池nginx内存池主要有下面两个结构来维护,他们分别维护了内存池的头部和数据部。此处数据部就是供用户分配小块内存的地方。//该结构用来维护内存池的数据块,供用户分配之用。typedef struct { u_char ...转载 2019-08-14 14:02:52 · 215 阅读 · 0 评论 -
nginx reload热加载实现
nginx reload热加载实现1.向master进程发送HUP信号(reload 命令),master进程中的ngx_reconfigure设置12.master进程校验配置语法是否正确3.master进程打开新的监听端口(子进程会继承父进程打开的所有端口)4.master进程用新配置启动新的worker子进程,ngx_start_worker_processes(NGX_PR...原创 2019-08-07 15:27:41 · 5204 阅读 · 0 评论 -
82.反向代理与负载均衡原理
一、反向代理 ...原创 2019-10-06 11:13:18 · 407 阅读 · 0 评论 -
83.均衡策略:round-robin
示例:nginx与upserver 8011和8012都是长连接roundrobin.confupstream rrups { server 127.0.0.1:8011 weig...原创 2019-10-06 13:06:11 · 846 阅读 · 0 评论 -
84.负载均衡哈希算法:ip_hash与hash模块
curl -H "X-Forwarded-For: 1.1.1.1" 192.168.244.131:8100?username=x11111asdadsadssa curl -H "X-Forwarded-For: 1.1.1.1" 192.168.244.131:8100?username=x11111 ...原创 2019-10-06 13:24:22 · 1130 阅读 · 0 评论 -
85.一致性哈希算法:hash模块
当上游服务器数量发生变化时,它的路由策略失效,一致性hash能缓解这个问题 宕机或者扩容时,hash算法引发大量路由变更,可能导致缓存大范围失效 ...原创 2019-10-06 17:51:25 · 185 阅读 · 0 评论 -
86.最少连接算法以及如何跨worker进程生效
原来讲的负载均衡算法默认只在一个worker进程生效,因为放在内存中.ngx有多个worker进程,upstream_zone模块是跨进程的upstream_zone模块使用共享内存,将上游服务器的信息以及当前状态信息全部存放在共享内存中 upstream模块间的顺序:功能的正常运行 ...原创 2019-10-06 18:13:35 · 232 阅读 · 0 评论 -
87.http upstream模块提供的变量
查看logs/upstream_access.logcurl localhost:8097iphash.conflog_format varups '$upstream_addr $upstream_connect_time $upstream_header_time $upstream_response_time ' '$...原创 2019-10-06 18:35:44 · 575 阅读 · 0 评论 -
88.http反向代理proxy处理请求的流程
proxy模块从客户端接收http协议,转发给上游也是http协议 proxy_request_buffering on因为外网流量比较慢,收到body时间会比较长.如果接受完http头部就与上游服务器建立连接,则会长时间占用上游服务器资源 ...原创 2019-10-06 20:15:54 · 1009 阅读 · 0 评论 -
89.proxy模块中的proxy_pass指令
upserver.confserver { listen 8011; ...原创 2019-10-06 20:32:16 · 395 阅读 · 0 评论 -
90.根据指令修改发往上游的请求
这些指令可以修改发给上游服务器http请求的请求行,请求头部,请求包体。http_proxy为上游生成请求时,提供很多指令.这些指令怎样修改转发给上游请求的内容构造发往上游服务器请求的内容,会影响上游服务器怎样处理这个请求,包括缓存,host头部,keepaliveupserver.confserver { ...原创 2019-10-06 21:16:02 · 221 阅读 · 0 评论 -
91.接收用户请求包体的方式
(1)接收客户端请求的包体:收完在转发还是边收边转发Syntax: proxy_request_buffering on | off;Default : proxy_request_buffering on;Context: http,server,locationon:客户端网速较慢,上游服务并发处理能力低,适应高吞吐场景off:更及时的响应,降低nginx读写磁盘的消耗(nginx...原创 2019-10-06 22:09:54 · 390 阅读 · 0 评论 -
92.与上游服务建立连接
1)proxy_pass订立反向代理,开始生效2)一些指令定义发向上游服务器的内容3)接收完整的请求body,如果请求有body4)与上游建立连接,把请求发送给上游(1)向上游服务建立连接Syntax: proxy_connect_timeout time;Default: proxy_connect_timeout 60s;Context: http, server...原创 2019-10-07 00:01:28 · 489 阅读 · 0 评论 -
93.接收上游的响应
(1)Syntax: proxy_buffer_size size;Default: proxy_buffer_size 4k|8k;Context: http, server, location限定http响应header中最大值,如果上游响应出现set-cookie特别长,可能会导致上游http response header超过这个值error.log:上游服务与...原创 2019-10-07 00:01:18 · 196 阅读 · 0 评论 -
94.处理上游的响应头部
proxy.confupstream proxyupstream { server 127.0.0.1:8012 weight=1; ...原创 2019-10-07 10:54:05 · 362 阅读 · 0 评论 -
95.上游出现失败时的容错方案
upserver.confserver { listen 127.0.0.1:8011; ...原创 2019-10-07 12:11:07 · 297 阅读 · 0 评论 -
Nginx 学习书单整理
大家好,我是陶辉,之前在华为、阿里、腾讯、思科等公司工作过,现在是杭州智链达公司的联合创始人兼 CTO。我从 09 年开始接触 Nginx,至今已经有 10 年了,对 Nginx 有一些自己独特的见解,分享自己学习 Nginx 的经历与经验,及梳理重难点等等。以下是“Nginx 到底该怎么学?”的主题纲要。作为工程师的我们,为什么要学 Nginx?第一点:Nginx 对整个架构的帮助是...转载 2019-08-14 14:17:43 · 500 阅读 · 0 评论