whitekyo / openresty-

openresty学习
0 stars 0 forks source link

openresty #1

Open whitekyo opened 6 years ago

whitekyo commented 6 years ago

1.这一层实现流量分组(内网和外网隔离、爬虫和非爬虫流量隔离)、内容缓存,请求头过滤,故障切换,限流,防火墙等一些通用型功能 2.业务nginx和单品页nginx,在这一层可以实现内容压缩,AB测试,降级,即这一层的nginx跟业务有关联,实现业务的一些通用逻辑。 3.主从架构 4.普通流量走一致性哈希,提升命中率。热点流量走轮训减少单服务器压力。根据请求特征将流量分配到不同分组并限流(爬虫、或者流量大的IP) 动态流量 5.防DDOS攻击限流:可以将请求日志推送到实时计算机集群,然后将需要限流的IP推送到核心nginx进行限流 6.非法请求过滤:比如没有referer或者没有cookie 7.请求聚合 8.请求头过滤:有些业务室不需要请求头的,因此可以在往业务nginx转发把这些数据过滤掉 9.缓存服务:使用nginx proxy cache实现内容页面的缓存

业务nginx: 1.缓存 2.业务逻辑:数据校验/过滤逻辑前置(如商品ID必须是数字)、业务逻辑前置 3.细粒度限流:按照接口特征和接口吞吐量来实现动态限流,比如后端服务快扛不住,那我们就需要进行限流。被限流的请求作为降级请求处理 4.降级:主动降级和被动降级:降级方案: 4.1 返回默认数据如库存默认有货 4.2 返回静态页如预先生成的静态页 4.3 部分用户降级,告诉部分用户等待下再操作 4.4 直接降级,服务没数据,比如商品页面的规格参数不展示 4.5 只降级回源服务,即可以读取缓存的数据返回,实现部分可用,但是不会回源处理 5.AB测试/灰度发布 6.服务质量监控

whitekyo commented 6 years ago

nginx+lua的常用架构模式中一些常见实践和场景 1.动态负载均衡 2.防火墙(DDOS,IP/URL/UserAgent/Referer黑名单、防盗链) 3.限流 4.降级 4.AB测试/灰度发布 5.多级缓存模式 6.服务端请求聚合 7.服务质量监控

whitekyo commented 6 years ago

一些问题: 1.在开发nginx应用使用UTF-8编码可以减去很多麻烦 2.GBK转码解码时使用GB18030,否则一些特殊字符会出现乱码 3.cjson库对于如\uab1这种错误的unicode转码会失败,可以使用纯lua编写dkjson 4.社区版nginx不支持upstream的域名动态解析,可以考虑proxy_pass 5.为响应添加处理服务器IP的响应头,方便定位问题 6.根据业务设置合理的超时时间 7.走CDN的业务当发生错误时返回的500/503/302/301等非正常响应不要设置缓存

whitekyo commented 6 years ago

相关资料: http://jinnianshilongnian.iteye.com/blog/2280928

whitekyo commented 6 years ago

NGX_HTTP_POST_READ_PHASE: 接收完请求头之后的第一个阶段,它位于uri重写之前,实际上很少有模块会注册在该阶段,默认的情况下,该阶段被跳过; NGX_HTTP_SERVER_REWRITE_PHASE: server级别的uri重写阶段,也就是该阶段执行处于server块内,location块外的重写指令,前面的章节已经说明在读取请求头的过程中nginx会根据host及端口找到对应的虚拟主机配置; NGX_HTTP_FIND_CONFIG_PHASE: 寻找location配置阶段,该阶段使用重写之后的uri来查找对应的location,值得注意的是该阶段可能会被执行多次,因为也可能有location级别的重写指令; NGX_HTTP_REWRITE_PHASE: location级别的uri重写阶段,该阶段执行location基本的重写指令,也可能会被执行多次; NGX_HTTP_POST_REWRITE_PHASE: location级别重写的后一阶段,用来检查上阶段是否有uri重写,并根据结果跳转到合适的阶段; NGX_HTTP_PREACCESS_PHASE: 访问权限控制的前一阶段,该阶段在权限控制阶段之前,一般也用于访问控制,比如限制访问频率,链接数等; NGX_HTTP_ACCESS_PHASE:: 访问权限控制阶段,比如基于ip黑白名单的权限控制,基于用户名密码的权限控制等; NGX_HTTP_POST_ACCESS_PHASE: 访问权限控制的后一阶段,该阶段根据权限控制阶段的执行结果进行相应处理; NGX_HTTP_TRY_FILES_PHASE: try_files指令的处理阶段,如果没有配置try_files指令,则该阶段被跳过; NGX_HTTP_CONTENT_PHASE: 内容生成阶段,该阶段产生响应,并发送到客户端; NGX_HTTP_LOG_PHASE: 日志记录阶段,该阶段记录访问日志。

whitekyo commented 6 years ago

post_read阶段: 第一个可以添加模块函数的阶段,任何需要在接收完请求头之后立刻处理的逻辑可以在该阶段注册处理函数。nginx源码只有realip模块再改阶段注册函数