Nginx小记

简介:

nginx负载均衡:

http {

upstream web_pools(自定义) {
    ip_hash; hash算法(不能与backup同用)
    
    server 10.0.0.1:80 weight=5(权重);
    server 10.0.0.2:80 weight=5;
    server 10..0.3:80 backup(); 热备
}
    server {
        listen 80;
        server_name www.xxx.com;
        location / {
            root html;
            index index.php;
            proxy_pass http://web_pools;
        }
    }
}

LVS类似负载均衡相当于转发,反向代理相当于中介

2、upstream模块
支持proxy_pass,fastcgi_pass,memcached_pass

默认算法wrr权重轮询
weight 权重,越大接受的请求越多
max_fails=2 最大尝试是失败的次数,默认1,0表示禁止失败尝试;企业场景:建议2-3次;
backup:热备配置;
fail_timeout=20 失败超时时间,默认10s
down 标志着服务器永远不可用

3、调度算法
1)rr轮询
1:1
2)wrr权重轮询
rr+weight
3)ip_hash
同一个客户端ip将会分配到同一台服务器,该调度算法可以解决动态网页session共享问题;
4)fair
安装后端服务器RS的响应时间来分配请求,响应时间短的优先分配

5)url_hash
根据访问的url的hash结果来分配请求,让每个url定向到同一个后端服务器

proxy_pass:
指向upstream标签

模块:
1)proxy_set_header Host $Host;
携带用户的header,例如主机名;
当后端web服务器上也配置有多个虚拟主机时,需要使用该header来区分反向代理到哪个主机名;

location / {
    proxy_pass http://xxx;
    proxy_set_header Host $Host;
}

2)proxy_set_header X-Forwarded-For $remote_addr;
如果后端web服务器上的程序需要获取客户端IP,从该header头获取;

#后端如果是httpd需要修改日志格式logformat开头%h为
\"%{X-Forwarded-For}i\"
# 虚拟主机标签中修改默认的log日志
<VirtualHost *:80>
CustomLog logs/access.log 
#后端如果是nginx不用修改,只需在代理上添加proxy_set_header X-Forwarded-For $remote_addr;

3)proxy_connect_timeout;
后端服务器连接的超时时间

4)proxy_send_timeout;
后端服务器的数据回传时间,即在规定时间之内后端服务器必须传完所有的数据,否则,nginx将断开这个连接;

5)proxy_read_timeout;
设置nginx从代理的后端服务器获取信息的时间,表示连接建立成功后,nginx等待后端服务器的相应时间;

6)proxy_buffer_size;
设置缓冲区大小;

7)proxy_buffers;
设置缓冲区的数量和大小;

8)proxy_busy_buffers_size;
设置系统繁忙时的proxy_buffers大小;

9)proxy_temp_file_write_size;
设置proxy缓存临时文件的大小;

2、nginx实现动静分离

1)根据扩展名

location ~.*.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
    proxy_pass http://static_pool;
    include proxy.conf;
}

2)根据目录

一个图片库
一个动态库
负载均衡器服务器上修改配置文件:

upstream static_pool {
    server 172.16.0.9:80 weight=5;
}

location /image/ {
    proxy_pass http://static_pool;
    include proxy.conf;
}

3)根据浏览器分离访问后端服务器
应用场景:某些页面不支持IE访问

upstream static_pool {
    server 172.16.0.9:80 weight=5;
}
upstream dynamic_pool {
    server 172.16.0.10:80 weight=5;
}

server {
    listen 80;
    server_name www.xxx.com;
    location / {
        if ($http_user_agent ~* "MSIE")
          {
            proxy_pass http://dynamic_pool;
          }
        if ($http_user_agent ~* "Firefox")
          {
            proxy_pass http://dynamic_pool;
          }
        proxy_pass http://dynamic_pool;
        include proxy.conf;
    }
}

3)根据安卓和苹果分离

location / {
    if ($http_user_agent ~* "android")
      {
        proxy_pass http://static_pool;
      }
    if ($http_user_agent ~* "iphone")
      {
        proxy_pass http://dynamic_pool;
      }
    proxy_pass http://dynamic_pool;    # 当安卓和苹果都不是访问谁
    include proxy.conf;
}

Keepalived高可用

1)失败接管,宕机接管
2)lvs cluster nodes healthchecks功能
Keepalived.conf里配置就可以实现LVS功能
Keepalived可以对LVS下面的集群节点做健康检查

故障转移原理:
通过VRRP协议来实现的;
在director正常工作时,主director节点会不断的向备节点广播心跳消息,

keepalived 实现服务器级别的接管
不会接管nginx服务

# 利用脚本监控nginx,当nginx服务停止,自动停止keepalived服务
[root@mfs /server/scripts/monitoring]# cat mon-keepalived.sh 
#!/bin/bash
#name: monitoring keepalived status.
#
nginx_pid_file_path="/usr/local/nginx/logs/nginx.pid"
nginxd="/usr/local/nginx/sbin/nginx"
keep_pid_file_path="/var/run/keepalived.pid"
keep(){
if [ -f $nginx_pid_file_path -a -s $nginx_pid_file_path ]
  then
    :
else
    nginx=`/usr/sbin/lsof -i :80|wc -l`
    if [ $nginx -le 0 ];then
        systemctl stop keepalived &>/dev/null
    fi
fi
}
nginx(){
    nginx1=`/usr/sbin/lsof -i :80|wc -l`
    if [ $nginx1 -gt 0 ];then
        systemctl start keepalived &>/dev/null
    fi
}
main(){
    keep
    nginx
}
main

keepalived裂脑问题
1)添加心跳线
2)fence、stonith自动管理电源
自动切断电源
3)做好监控

裂脑监控脚本:
可以ping通主节点,但从节点也有vip;

目录
相关文章
|
4月前
|
缓存 负载均衡 算法
Nginx问题汇总
Nginx问题汇总
36 0
|
5月前
|
前端开发 安全 应用服务中间件
|
6月前
|
前端开发 应用服务中间件 nginx
Nginx 简单介绍(一)
如果我们想要将数据转接到多个服务器可以这样写: [^1]
35 0
|
9月前
|
负载均衡 应用服务中间件 nginx
nginx V1.0
nginx V1.0
|
负载均衡 应用服务中间件 nginx
五分钟进步系列之nginx(一)
五分钟进步系列之nginx(一)
|
缓存 负载均衡 JavaScript
Nginx 简单入门指北不指南
Nginx 简单入门指北不指南
103 0
|
应用服务中间件 网络安全 nginx
nginx应用
nginx应用
99 0
|
负载均衡 监控 算法
Nginx 的使用
1、Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。 2、Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,并在一个BSD-like协议下发行。
|
负载均衡 应用服务中间件 Linux
|
缓存 负载均衡 前端开发