Nginx 的三个主要应用场景
- 静态资源服务
- 反向代理服务
- API 服务
反向代理服务
应用服务需要开发效率高,往往运行效率低。它的 QPS, TPS, 或者并发都是受限的。所以我们需要把很多个应用服务组成一个集群,向用户提供高可用性。而一旦很多服务构成一个集群的时候,我们需要 nginx 具有反向代理功能,可以把动态请求传导给应用服务。而很多应用服务构成集群,一定会带来两个需求,一是动态扩容,第二个则是有些服务出问题的时候,我们需要做容灾,那么这样我们的反向代理必须具备负载均衡功能。
其次,在这样一个链路中,Nginx 是处在企业内网的一个边缘节点,随着我们网络链路的增长,用户体验到的时延会增加。所以如果我们能把所有用户看起来不变的,或者一段时间内看起来不变的动态内容缓存在 Nginx部分,由 Nginx 直接向用户提供访问,这样用户时延就会减少很多。所以反向代理会引申出另外一个功能叫 缓存 ,它能够加速我们的访问。
静态资源服务
很多时候我们在访问 CSS,或者 JavaScript或者像一些小图片,那么这样一些静态的资源呢,是没有必要通过应用服务来访问的,它只需要通过本地文件系统上放置的静态资源,直接通过 Nginx 来提供访问就可以,这是 Nginx 的静态资源服务。
API 服务
而第三个应用场景,则是因为应用服务它本身的性能有很多的问题,但是数据库服务要比应用服务好得多,因为它的业务场景比较简单,它的并发性能和 TPS 都要远高于应用服务,所以这里我们引申出第三个应用场景,由Nginx 直接去访问数据库或者 redis或者是这样的应用服务,那么利用 Nginx 强大的并发性能来实现如 web 防火墙等复杂的业务功能,来提供给用户,这要求我们的 API 服务有非常强大的业务处理功能,所以像 OpenResty 或者像 Nginx 集成了 JavaScript,利用 JavaScript , lua 这样的语言功能和它们语言先天自带的一些工具库来提供完整的 API 功能。