0%

上一篇文章介绍了HTTP请求匹配server{ }配置块的过程,接着请求会继续匹配location{ }配置块,并最终决定哪些指令及Nginx模块处理请求。本文将介绍location的匹配规则,以及rewrite指令与location匹配顺序的关系。

生产环境中的nginx.conf往往含有上百条location,这是因为Nginx常常身兼多职:充当提供静态资源CDN、作为负载均衡为分布式集群提供扩展性、作为API gateway提供接口服务等等。location一旦配置错误,Nginx上巨大的并发连接数会将错误放大上万倍,很容易导致严重的线上事故。

而location也很容易配置错误,它既支持前缀匹配,也支持正则表达式匹配,当二者同时出现时,为了获得更高的性能,Nginx设计了复杂的location匹配优先级。这是因为前缀匹配是对静态的location多叉树检索完成的,它的性能要比正则表达式高得多,唯有搞清楚具体的匹配流程,我们才能设计出匹配速度更快的location。

而且rewrite指令修改URL的功能也让location匹配变得更为复杂。特别是rewrite出现在server{ }和location{ } 里,会导致完全不同的结果。设计location时,我们还需要考虑到rewrite的效率,以及它是否会导致循环重定向。

阅读全文 »

WAF全称为Web Application Firewall,因此作为七层负载均衡的Nginx很适合实现Web应用层防火墙。许多C、Lua模块都在rewrite、access等处理阶段截获HTTP请求,基于可配置的规则过滤内容并判断安全后,再放行给content阶段的反向代理模块转发到上游服务。本次4节课我将从Web攻击方式讲起,看看Nginx是如何用作反向代理型WAF的。

阅读全文 »

UNIT是NGINX于2017年推出的Web容器方案,它提供了REST JSON接口动态修改服务配置,目前为Python、Java、Ruby、Perl、NodeJS、GOLang、WebAssembly等语言提供了生产环境级别的高性能Web容器,适用于大规模分布式环境中的微服务管理。从3月11日到4月1日,我分享了关于UNIT的4次课程。


微服务架构中,由于开发语言多样化、服务实例数量多,这就需要一种统一的服务治理方法,将配置更改、服务启停、网络协议适配、日志搜集等通用功能低成本的管理起来。K8S是一种解决方案,而NGINX UNIT针对Web场景也提供了上述功能,而且由于它仅针对Web容器场景,所以性能也更高。这4次视频课程如下:

阅读全文 »

对于许多企业来说,将生产环境转移到Kubernetes集群上,会让应用程序的流量管理变得复杂且具有挑战性。

而Ingress Controller允许通过Yaml编排脚本提供高可用的七层负载均衡、Waf防火墙或者API Gateway,它是Kubernetes集群对外服务的核心组件。

Ingress-nginx是Kubernetes Ingress Controller开源版本中的一种,它使用了NGINX作为反向代理和负载均衡器,生态完善、功能丰富,性能与稳定性也是极优秀的。

这是Nginx开源论坛上的第10季课程,这里我会详细介绍基于Nginx开发的Ingress Controller,包括Kubernetes社区及Nginx官方提供的2种开源Controller,对比它们各自的优缺点。

阅读全文 »

当上游出错时,作为负载均衡的Nginx可以实时更换Server,在客户端无感知的情况下重新转发HTTP请求。这一功能在Nginx指令中称为next upstream,本文将详细介绍其用法及实现原理。

在OSI网络模型中,传输层的TCP协议通过内核提供的系统调用向Nginx反馈错误,表示层的TLS/SSL协议通过openssl库向Nginx返回错误,而应用层的HTTP协议(或者uwsgi、gRPC、CGI、memcached等协议)通过Response的Decode解码流程返回错误。当Nginx能够通过重试解决这些错误时,我们可以使用next upstream机制对客户端隐藏个别上游Server由于宕机、网络异常产生的错误,这可以极大的提升整个分布式系统的可用性

阅读全文 »