一、基本应用
Nginx可用于以下场景,本文主要讲解负载均衡及其原理
正向代理:需要在客户端配置代理服务器进行指定网站访问
反向代理:暴露的是代理服务器地址,隐藏了真实服务器IP地址
负载均衡:增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器
动静分离:为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
1、常用命令
启动:./nginx -c /home/user/nginx/conf/nginx.conf
重启:./nginx -s reload
停止:./nginx -s stop
查看版本: nginx -v
2、在/home/user/nginx/conf/nginx.conf中配置负载均衡
允许生成的worker数目设置:worker_processes 8;
最大连接数设置:worker_connections 1024;
负载均衡服务器设置:
upstream myserver {
server ip:port;
server ip:port;
}请求转向负载均衡服务器
server {
listen 80;
server_ name localhost;
location / {
proxy_ pass http://myserver;
}
}3、location指令:用于匹配URL
1)= :用于不含正则表达式的uri 前,要求请求字符串与uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
2)~:用于表示uri 包含正则表达式,并且区分大小写。
3)~*:用于表示uri 包含正则表达式,并且不区分大小写
4)^~:用于不含正则表达式的uri 前,要求Nginx 服务器找到标识uri 和请求字符串匹配度最高的location 后,立即使用此location 处理请求,而不再使用location 块中的正则uri 和请求字符串做匹配。
注意:如果uri 包含正则表达式,则必须要有~ 或者~* 标识。
4、nginx分配服务器策略
1)轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
2)weightweight代表权重默认为1,权重越高被分配的客户端越多
upstream server_pool{
server 192.168.5.21 weight=10;
server 192.168.5.22 weight=10;
}3)ip_hash每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可解决session共享问题
upstream server_pool {
ip_hash;
server 192.168.5.21:80;
server 192.168.5.22:80;
}4)fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配
upstream server_pool{
server 192.168.5.21:80;
server 192.168.5.22:80;
fair;
}二、Nginx原理:master&worker机制

1、master:管理worker进程
负责:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。
master进程充当整个进程组与用户的交互接口,同时对进程进行监护。它不需要处理网络事件,不负责业务的执行,只会通过管理worker进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能。
比如执行重启命令,./nginx -s reload,首先会启动一个新的nginx进程,而新的nginx进程在解析到reload参数后,就会向master进程发送信号要重新加载配置文件,master进程在接到信号后,会先重新加载配置文件,然后再启动新的worker进程,并向所有老的worker进程发送信号,告诉他们可以光荣退休了。新的worker在启动后,就开始接收新的请求,而老的worker在收到来自master的信号后,就不再接收新的请求,并且在当前进程中的所有未处理完的请求处理完成后,再退出。
2、worker进程:处理请求
多个worker进程之间同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致,每个worker的线程可以把一个cpu的性能发挥到极致,设少了会浪费cpu,设多了会造成cpu频繁切换上下文带来的损耗。
worker工作模式

3、一个master和多个woker的好处
1)可以使用nginx –s reload 热部署,利用nginx进行热部署操作。
2)每个woker是独立的进程,如果有其中的一个woker出现问题,其他woker独立的,继续进行争抢,实现请求过程,不会造成服务中断
四、错误排查
1、Nginx 502 Bad Gateway:
后端服务宕了会直接502
后端执行时间长(数据库慢)
2、504 Gateway Timeout
该接口太耗时,后端服务接收到请求,开始执行,未能在设定时间返回数据给nginx
后端服务器整体负载太高,接受到请求之后,由于线程繁忙,未能安排给请求的接口,导致未能在设定时间返回数据给nginx
解决:可修改Nginx配置 ,增加等待时间,如下
location / {
proxy_pass http://myserver ;
proxy_connect_timeout 5;
proxy_send_timeout 4;
proxy_read_timeout 4;
add_header Cache-Control no-store;
}
















