5.2 基本原理
网络请求处理,使用高效的epoll;
master进程只在一开始创建所有的worker进程,有请求就唤醒自己,将请求交给worker进程去做,然后继续沉睡;worker进程们实际干活儿;
5.3 配置
工作进程数;每个进程打开的文件描述符上限;
每个worker进程的连接上限;
sendfile:高效传输文件模式:从文件读到cache,不经过用户态buffer中转,直接写入buffer,发给TCP socket;
支持gzip压缩
负载均衡策略选择:
1. 时间轮询(默认),手动配置每个服务器的值班时间比例,请求按时间分配到不同的服务器上;
2. 按照请求来自的ip,哈希到不同的服务器上;优点:同一个客户端ip,每次固定发到同一个服务器上,该服务器可以cache住该ip的session数据;
3. 按照请求的URL来哈希到不同的服务器上;优点:可提高服务器的缓存命中率;
4. 公平:谁干活儿快就多分给谁一些请求;
5.4 性能统计
可以查到Nginx的状态信息:http://域名/nginx_status
5.5 实现负载均衡的方案
[Internet]---api请求--->[负载均衡服务器,有一个外网ip, 一个内网ip]---转发api请求--->[多台内网应用服务器,各自只有一个内网ip]
通过DNS服务,将外网ip和域名绑定上;
负载均衡服务器上部署Nginx
词方案好处:
- 保证了应用服务的高可用,一台宕机不影响服务的可用性;
- 应用服务器不直接连外网,减少了被入侵的可能性;
问题:负载均衡服务器只有一台,宕机了怎么办?
解决:Nginx+Keepalived, 部署两台Nginx负载均衡服务器,通过Keepalived将外网ip绑定到一台上,如宕机,Keepalived自动把这个外网ip漂移到另一台上;
建议使用云服务的负载均衡服务;
5.6 Nginx处理业务逻辑
以前Nginx只负责请求转发,不处理任何业务逻辑;
Nginx+Lua,可以处理一些简单的业务了,复杂业务逻辑仍然交给应用服务器;
Nginx做反向代理
即外界(前端App)通过域名访问后台nginx, nginx把请求转发给内网服务器。
反向代理+负载均衡
正向代理的用途:
访问原来无法访问的资源,如 Google。可以做缓存,加速访问资源。对客户端访问授权,上网进行认证。代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息。
反向代理的作用:(Nginx)
保证内网的安全,通常将反向代理作为公网访问地址,Web 服务器是内网。负载均衡,通过反向代理服务器来优化网站的负载。