Nginx的继续深入(日志轮询切割,重写,负载均衡等)

Nginx的访问日志轮询切割

通常什么情况Nginx会把所有的访问日志生成到一个制定的访问日志文件access.log里面,但时间一长,日志个头很大不利于日志的分析和处理。

有必要对Nginx日志进行按天或按小时进行切割,分成不同的文件保存。

[[email protected] logs]#cat /server/script/cut_nginx_log.sh#!/bin/shDataformat = `date +%Y%m%d`Basedir = "/usr/local/nginx"Nginxlogdir = "$Basedir/logs"Logname = "access_www"[ -d $Nginxlogdir ] && cd $Nginxlogdir || exit 1[ -f ${Logname}.log] || exit 1/bin/mv ${Logname}.log ${Dateformat}_${Logname}.log$Basedir/sbin/nginx -s reload

注意:脚本实现切割Nginx日志的思想为讲正在写入的Nginx日志改名为(20161111_access_www.log),然后平滑重启生成新的nginx日志(access_www.log)

通过定时任务实现每天的00点整定时执行/server/script/cut_nginx_log.sh

00 00 * * * /bin/sh /server/script/cut_nginx_log.sh >/dev/null 2>&1

Nginx 的location语法

location的使用基本语法:

location [= | ~ | ~* | ^~] uri {
....
}

location   指令
[=|~|~*|@] 匹配标识
uri    匹配的网站网址
{。。。。}  匹配URI后要执行的配置段

~ 区分大小写(大小写敏感)

 ~* 不区分大小写匹配

!取反

^~ 的作用是用来进行常规的字符串匹配检查之后不做正则表达式的检查

匹配实例

location = / {
    [ configuration A]
}
location / {
    [ configuration B]
}
location /documents/ {
    [ configuration C]
}
location ^~ /images/ {
    [ configuration D]
}
location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E]
}

用户请求的URL

http://www.abc.com/    匹配A    /
http://www.abc.com/    匹配B    /index.html
http://www.abc.com/documents/document.html    匹配C    /documents/document.html
http://www.abc.com/images/1.gif    匹配D    /images/1.gif
http://www.abc.com/documents/1.gif    匹配E  /documents/1.gif

Nginxd rewrite

\  进行转义
^ 匹配输入字符串的起始位置
$ 匹配输入字符串的结束位置
* 匹配0次或多次
+ 匹配1次到多次
? 匹配0次到1次
.   匹配除\n以外的任意字符
(pattern) 匹配括号内的字符

rewrite 指令最后一项参数flag标记说明

last  本条规则匹配完成后,继续向下匹配新的location URI规则break  本条规则匹配完成即终止,不在匹配后面的任何规则redirect 返回302 临时重定向, 浏览器地址栏会显示跳转后的URI地址permanent  返回301 永久重定向, 浏览器地址栏会显示跳转后的URI地址

实例:

rewrite ^/(.*) http://www.abc.com/$1 permanent;

Nginx负载均衡

负载均衡模块的组件

ngx_http_proxy_module  proxy代理模块
ngx_http_upstream_module  负载均衡模块
upstream www_server_pools {   #upstream 关键字 www_server_pools 集群组的名字,可以自己起名字  server 10.1.1.1:80 weight=5;     #server关键字    ip/域名:端口, 默认80  weight权重
  server 10.1.1.1:80 weight=5;    #如果用域名解析,需要在hosts里面有域名解析;或者内网有DNS
  server www.abc.com:80 weight=5 backup;  server unix:/temp/backend3;   #指定socket文件/可以不写
}

weight = 1 代表服务器权重,默认值是1, 权重数字表示接受的请求比例越大;

max_fails = 1 nginx尝试连接主机失败的次数,这个值是配合proxy_next_upstream、fastcgi_next_upstram 和 memcached_mext_upstream三个参数来使用的。

backup  热备配置(RS节点的高可用),当当前激活的RS都失败后会自动启动热备RS。这标志这个服务器作为备份服务器,如果主宕机,就会向他转发请求。注意:

当负载调度算法为ip_hash时,后端服务器不能是weight和backup

fail_timeout = 10s  在max_fails定义失败次数后,距离下次检查的间隔时间,默认是10s;如果是5,就检测5次,如果5次都是502,那么就等待10s在去检查

down  标志这服务器永远不可用,这个参数可以配合ip_hash使用

upstream 模块调度算法

1.rr轮询(默认调度算法,静态调度算法)
相当于lvs的rr算法,如果后端节点服务器宕机(默认检测80),自动会从节点地址池剔除
2.wrr(权重轮询,静态调度算法)

例子:
upstream pools{
  server 192.168.1.1 weight=1;  server 192.168.1.2 weight=2;
}
3.ip_hash(静态调度算法)
每个请求按客户端的IP的hash进行分配;缺点可能道士分配不均无法保证1:1的负载均衡。比如客户端的nat上网方式

例子:
upstream pools{
ip_hash;
server backend1.example.com;   #可以用ip
server backend2.example.com down;

}
注意:ip_hash时,不能有weight和backup
4.fair(动态调度算法)

此算法会根据后端节点服务器的响应时间来分配请求,响应时间短的优先分配
nginx 本身不支持fair调度算法,需要下载nginx的相关模块upstram_fair

例子:
upstream pool{
server 192.168.1.1;

server 192.168.1.2;
fair;
}
5.least_conn
此算法会根据后端节点的连接数来决定分配情况,那个机器连接数少就分发。
6.url_hash算法
和ip_hash 类似,这个是根据访问 URL的hash分配的。同样也不能写入weight等必须安装nginx的哈市模块软件包例子:upstream pools{server queid1:1233;server squid2:1233;hash $request_uri;hash_method crc32;}
7.一致性hash算法

Nginx反向代理

http_proxy_module 模块

此模块可以将请求转发到另一台服务器,在实际的反向代理工作中,或通过location功能指定URL,然后在接受到的符合匹配的URI的请求通过proxy_pass 抛给定义好的upstream节点池

案例:

1.将匹配URI为name的请求抛给http://127.0.0.1/remote/

location /name/ {
proxy_pass http://127.0.0.1/remote/;
}

2.将匹配URI为name的请求应用指定的rewrite规则,然后抛给http://127.0.0.0.1.

location /name/ {
  rewrite /name/([^/]+) /users?name=$1 break;  proxy_pass http://127.0.0.1;

}
时间: 2024-10-14 20:43:30

Nginx的继续深入(日志轮询切割,重写,负载均衡等)的相关文章

Nginx日志轮询切割

Nginx日志轮询切割 默认情况下,Nginx会把所有的访问日志生成到一个指定的访问日志文件access*.log里,但这样一来,时间长了就会导致日志单个文件很大,不利于日志的分析和处理,因此有必要对Nginx日志按天或者按小时等进行分割,具体要看具体线上业务,使其分成不同的文件保存.这里我们按天进行切割日志. 1.配置日志切割脚本,具体如下: [[email protected] ~]# mkdir -p /server/scripts/ [[email protected] ~]# cd /

NFS共享MySQL使用DNS轮询实现Web负载均衡

NFS共享MySQL使用DNS轮询实现Web负载均衡 前言: 今天学习了NFS,遂结合前面学习的LAMP+Bind做一个实验,实现两台Web服务器采用同一个MySQL数据库和相同的网页文件,对LAMP和Bind不了解的可以去查看我以前写的博客: AnyISalIn的文章 实验拓扑图 实验环境 主机名 IP地址 实现 storage.anyisalin.com 192.168.2.5 NFS ns.anyisalin.com 192.168.2.2 dns,MySQL www.anyisalin.

NFS共享web资源,DNS轮询实现Web负载均衡的小实验

一.实验规划 二.实现步骤: www1主机: 1.安装LAMP+NFS_DNS: # yum install bind httpd mysql-server php php-mysql nfs-utlis rpcbind 2.设置httpd: 3.设置nfs: echo "/var/www/html10.1.24.19/16(rw)" >> /etc/exports service start rpcbind && service start nfs 3.设

nginx日志轮询切割实战

apache切割工具: cronlog 和rotare等日志切割工具 nginx切割工具有: nginx cron+x    scripts [[email protected] ~]# mkdir -p /server/scripts [[email protected] ~]# cd /server/scripts/ [[email protected] scripts]# vim cut_nginx_log.sh #vim输入如下内容 cd /application/nginx/logs

Nginx 访问日志轮询切割

默认情况下 Nginx 会把所有的访问日志生成到一个指定的访问日志文件 access.log 里,但这样一来,时间长了就会导致日志个头很大,不利于日志的分析和处理,因此,有必要对 Nginx 日志,按天或按小时进行切割,使其分成不同的文件保存. [[email protected] conf]# cat cut_nginx_log.sh #!/bin/bash Dateformat=`date +%Y%m%d` Basedir="/usr/local/nginx" Nginxlogdi

NFS共享关系型数据库利用DNS轮询提供Web负载均衡

前言: 用NFS.LAMP.BIND结合的方法,应对网络中访问量增大而导致服务器负载运行的情况.以实现Web服务器之间使用同一个MYSQL和相同的网页配置文件. 实验环境: HostName IP 规划 nfs.preferred.com 192.168.1.6 NFS ns.preferred.com 192.168.1.5 DNS mysql.preferred.com 192.168.1.4 MYSQL www.preferred.com 192.168.1.3 WEB www.prefe

nginx日志配置,以及日志轮询

一.为nginx配置错误日志 Nginx错误日志是调试nginx的重要手段,属于核心功能模块的参数(ngx_core_module)该参数名字为err_log,是放在Main区块中全局配置 err_log的语法格式以及参数语法说明如下 err_log   file              level(级别) 关键字           日志文件              错误日志级别 其中关键字err_log不能改变 1 1.在配置文件中写入error_log logs/error.log e

nginx 日志轮询脚本

nginx 日志轮询脚本      nginx 没有自带日志轮询功能, 这个脚本必须配合crontab来实现日志的按天轮询.生产环境使用下还是很靠谱和方便,推荐给大家使用.  里面具体的内容大家自己看把有点shell基础就能明白的.  crontab -e 00 08 * * * /bin/bash /opt/scripts/BackupNginxLog.sh BackupNginxLog.sh #!/bin/bash LogPath=/usr/local/logs_nginx BackupPa

Nginx 安装配置 禁止使用IP访问 rewrite重写 别名设置 日志轮询

1.yum install pcre pcre-devel -y#支持rewrite重写功能 2.yum -y install openssl openssl-devel#支持https功能 3.useradd nginx -s /sbin/nologin -M#添加用户 4.tar zxf nginx-1.6.2.tar.gz   cd nginx-1.6.2./configure \--user=nginx --group=nginx \--prefix=/application/nginx