Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
客户端请求目标服务之间的一个代理服务器。
请求会先经过这个代理服务器,然后在转发请求到目标服务器。获得内容后在响应给客户端。
用户请求目标服务器,由代理服务器决定访问哪个ip。
类比:你去学校报名上学,由教务指派你去哪个班级读书。
当Nginx 启动后,默认会启动两个进程。
1.Master 进程
2.Work 进程
在 conf/nginx.conf 文件中修改 worker_processes 数字即可。
./nginx -s stop
./nginx -s quit
./nginx -s reload
./nginx
./nginx -t
同步阻塞请求方式,当一个client 阻塞后,后续其他client无法进行处理。
解决方式:重新fork 一个新的worker进程。使得阻塞client走新的worker 进程处理。
弊端:资源开销大,成本高!
使用异步非阻塞模式(类似多路复用器)。
在Linux 环境中使用 epoll 模型,来处理工作进程。能处理6-8万个请求。
max_conns:最大连接数。
举例:当前有10个请求数
server1 :192.168.117.129:8080 max_conns=2;
server2 :192.168.117.130:8080 max_conns=3;
server3 :192.168.117.131:8080 max_conns=4;
结果:
server1最多处理2个,
server2最多处理3个,
server3最多处理4个,
还有剩余的一个请求将会报错,502 。
只有当server处理完成当前的请求,才会重新处理新的请求。
slow_start:慢增长。必须使用于集群,不能单独使用。
举例:
server1 :192.168.117.129:8080 weight=6 slow_start=60s;
server2 :192.168.117.130:8080 weight=2;
server3 :192.168.117.131:8080 weight=2;
说明:server1的权重,将会从在60s的时间内从0-6;
down:不会被访问到。
server1 :192.168.117.129:8080 down;
说明:server1 是不会访问到。
backup:备用机。
举例:
server1 :192.168.117.129:8080 backup;
server2 :192.168.117.130:8080 weight=2;
server3 :192.168.117.131:8080 weight=2;
说明:正常情况下不会被访问到,当其他机器挂掉后,方可访问。
max_fails:最大失败次数,到达失败次数,则认为该服务器宕机。请求将不会访问到这台机器上。默认为1
fails_timeout:失败时间段,默认10s
举例:
server1 :192.168.117.129:8080 max_fails=2 fails_timeout=15s;
server2 :192.168.117.130:8080 weight=2;
server3 :192.168.117.131:8080 weight=2;
说明:15s内请求server1失败达到2次,认为server1已经宕机,再过15s,这15s内,不会有请求到这台机器上,而是会请求到其他正常的机器上,15s后,在请求到server1上,如果还是失败,则继续重复上述过程,直到恢复。
提高系统的吞吐量
根据用户的请求的IP ,经过hash算法,得到一个特定的值,根据这个值判断该请求落在那个server 服务器下,相同的IP请求的会话,只会打在同一台服务器上。
公式 hash%node_counts(服务器结点数) = index
举例:
PS: 如果通过IP地址使用这个Hash 算法,它只会hash ip 地址的前三段 例如192.168.1。
重点:如果想要移除集群里的一台机器,就需要在节点后面加上down,而不是直接注释或者删除掉,因为直接删除的话,之前ip_hash 中的算法就需要重新计算,会话,缓存都会失效
如果有服务器减少或者增加,所有请求的hash都需要重新计算。导致请求的时间增加。
解决方式:采用一致性hash算法。
expires [time] :设置过期时间
举例:expires 10s 每当请求后10s 缓存过期
expires @[time] : 设置具体缓存过期时间
举例:expires @22h40m 每天 22点40分,缓存失效
expires -[time] :设置已经过期时间
举例:expires -2h 缓存已经过期两小时
expires epoch 不使用缓存
expires off 默认关闭缓存。
expires max 最大时间缓存
proxy_cache_path 设置缓存保存目录
keys_zone 设置共享内存以及占用的空间
max_size 设置缓存大小
inactive 超过此时间,则缓存自动清理。
use_temp_path 关闭临时目录
proxy_cache_path /usr/local/nginx/upstream_cache
keys_zone=mycache:5m (mycache为名字,随意设置)
max_size=5g
inactive=30s 当我们的缓存超过30秒,就自动清理
use_temp_path off ;
继续配置,在server{
#开启缓存
proxy_cache mycache;
#针对200 和 304 状态码缓存过期时间为5小时
proxy_cache_valid 200 304 5h;
}