三,NGINX部署-yum
1.访问官网:www.nginx.org
2.Nginx版本类型:
(1)Mainline version: 主线版,即开发版
(2)Stable version: 最新稳定版,生产环境上建议使用的版本
(3)Legacy versions: 遗留的老版本的稳定版
3.配置yum源:
(1)找到对应的版本:
(2)安装nginx : yum -y install nginx
启动nginx systemctl start nginx
开机自启 systemctl enable nginx
查看安装附带的功能模块 nginx -V
(3)测试:桥接的虚拟机用真机的浏览器访问ip即可
(4)测试不成功,可能防火墙没关闭!
关闭防火墙: systemctl stop firewalld
永久关闭seliunx vim /etc/seliunx/config
查询状态 getenforce
四、NGINX配置文件
1.查看所有文件:rpm -ql nginx 所有文件
五、NGINX 编译参数 : nginx -V
1.基础配置
2.模块类:
--with-http_addition_module
nginx配置addition
配置nginx.conf
server {
listen 80;
server_name www.ttlsa.com;
root /data/site/www.ttlsa.com;
location / {
add_before_body /2013/10/header.html;
add_after_body /2013/10/footer.html;
}
}
测试
以下三个文件,对应请求的主体文件和add_before_body、add_after_body对应的内容
# cat /data/site/test.ttlsa.com/2013/10/20131001_add.html
<html>
<head>
<title>I am title</title>
</head>
<body>
ngx_http_addition_module
</body>
</html>
# cat /data/site/test.ttlsa.com/2013/10/header.html
I am header!
# cat /data/site/test.ttlsa.com/2013/10/footer.html
footer - ttlsa
访问结果如下,可以看到20131001_add.html的顶部和底部分别嵌入了子请求header.html和footer的内容。
# curl test.ttlsa.com/2013/10/20131001_add.html
I am header!
<html>
<head>
<title>I am title</title>
</head>
<body>
ngx_http_addition_module
</body>
</html>
footer - ttlsa
3.cpu 优化参数
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --
param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC'
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
六、NGINX 基本配置
观察主配置文件
1.分类:
(1):CoreModule 核心模块 (进程数等)
(2):EventsModule 事件驱动模块(工作模式等)
(3):HttpCoreModule http内核模块(文档程序类型,配置文件等)
模块功能:
(1) 全局/核心块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置(2) events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
(3) http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
(4) server块:配置虚拟主机的相关参数,一个http中可以有多个server。
(5) location块:配置请求的路由,以及各种页面的处理情况。
2.配置文件详解: vim /etc/nginx/nginx.conf
3.观察默认虚拟主机配置文件 : vim /etc/nginx/conf.d/default.conf
4.启动一个新的虚拟主机
(1): vim /etc/nginx/conf.d/xiaoye.conf
(2)mkdir /xiaoye //创建网站在本地访问目录
(3)echo 你好呀 > /xiaoye/index.html //给网站首页写入 “你好呀”
(4)systemctl restart nginx //重启服务
(5)用的虚拟机需要在本地的域名解析文件上修改才能访问,
(6)浏览器访问:
(7)如果浏览器出现乱码,输入:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><br/>
七、NGINX 日志log
日志配置:
1.日志模块:官方文档:http://nginx.org/en/docs/http/ngx_http_log_module.html
日志模块名称: ngx_http_log_module
2.相关指令:
(1)log_format //日志格式
(2)access_log //访问日志
(3)error_log //错误日志
(4)open_log_file_cache // 日志缓存
open_log_file_cache max=N [inactive=time] [mim_uses=N] [valid=time] | off
该指令默认是禁止的,等同于:
open_log_file_cache off;
open_log_file_cache 指令的各项参数说明如下:
max: 设置缓存中的最大文件描述符数量。如果超过设置的最大文件描述符数量,则采用 LRU (Least Recently Used) 算法清除"较不常使用的文件描述符"。 LRU (Least Recently Used) 算 法的基本概念是:当内存缓冲区剩余的可用空间不够时,缓冲区尽可能地先保留使用者最常使用 的数据,将最近未使用的数据移出内存,腾出空间来加载另外的数据。
inactive: 设置一个时间,如果在设置的时间内没有使用此文件描述符,则自动删除此描述符。 此参数为可选参数,默认的时间为 10 秒钟。
min_uses: 在参数 inactive 指定的时间范围内,如果日志文件超过被使用的次数,则将该日 志文件的描述符记入缓存。默认次数为 1。
valid: 设置多长时间检查一次,看一看变量指定的日志文件路径与文件名是否仍然存在。默 认时间为 60秒。
off: 禁止使用缓存。
open_log_file_cache 指令的设置示例如下:
open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m;
3.日志的格式和命令: log_format
(1) :简介:Nginx有非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。日志格式通过log_format命令定义。
(2):Syntax: log_format name [escape=default|json] string ...;
name表示格式名称 string表示定义的格式。
(3)默认值:Default: log_format combined "...";
log_format 有默认的无需设置的combined日志格式,相当于apache的combined日志格式
(4)定义设置位置:vim /etc/nginx/nginx.conf
日志格式允许包含的变量:
4.访问日志和错误日志:
(1)cat /var/log/nginx/access_log
某条日志的记录:
192.168.100.254 - - [17/Dec/2017:14:45:59 +0800] "GET /nginx-logo.png HTTP/1.1" 200 368 "http://192.168.100.10/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"
日志记含义:
(2)cat /var/log/nginx/reeor_log //储存错误日志
5.日志缓存:
(1)简介:大量访问到来时,对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭.占用了系统的IO,与业务无关。
可以使用open_log_file_cache来设
(2)Syntax:open_log_file_cache max=1000 inactive=20s min_uses=3 valid=1m ;
max 1000 指的是日志文件的FD,最大的缓存数量为1000。超了怎么办,看下面
min_users 3 20秒内小于3次访问的FD,就给你清掉,结合inactive 20s 的时间。
valid 1m 检查周期为1分钟。
总结:缓存最多1000个,到了极限,每分钟开始清除掉 20秒内小于3次的文件FD.
(3)默认为关:open_log_file_cache off;
(4)http, server, locatition
http{} 将整个服务器所有网站,所有页面的日志进行缓存
server{} 将某一个网站的所有页面日志,进行缓存
location{}某一个页面的日志,进行缓存。
6.日志轮转/切割:
(1)前言 :Nginx安装,会默认启动日志轮转。
(2)rpm -ql nginx| grep log
(3)观察:vim /etc/logrotate.d/nginx
(4)轮转语句指令 /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
7.日志分析:
(1)常用字段:
$remote_addr $1 //远程客户端地址
$time_local $4 //本机时间
$request $7 //请求URL
$status $9 //状态码
$body_bytes_sent $10 //请求体积
案例:我使用的案例时一个网站2017年的日志
案例:
(1) 统计2017年9月5日 PV量 : grep '05/Sep/2017' cd.mobiletrain.org.log |wc -l
(2) 统计8点到9点之间的pv量: awk '$4>="[05/Sep/2017:08:00:00" && $4<="[05/Sep/2017:09:00:00" {print $0}' sz.mobiletrain.org.log | wc -l
(3)统计2017年9月5日 一天内访问最多的10个IP(ip top10)
grep '05/Sep/2017' cd.mobiletrain.org.log | awk '{ ips[$1]++ } END{for(i in ips){print i,ips[i]} } '| sort -k2 -rn | head -n10
(4)统计2017年9月5日 访问大于100次的IP
grep '05/Sep/2017' cd.mobiletrain.org.log | awk '{ ips[$1]++ } END{for(i in ips){ if(ips[i]>100) {print i,ips[i]}} } '| sort -k2 -rn | head -n10
(5)统计2017年9月5日 访问最多的10个页面($request top 10)
grep '05/Sep/2017' cd.mobiletrain.org.log |awk '{urls[$7]++} END{for(i in urls){print urls[i],i}}' |sort -k1 -rn |head -n10
(6)统计2017年9月5日 每个URL访问内容总大小($body_bytes_sent),和次数
grep '05/Sep/2017' sz.mobiletrain.org.log | awk '{ urls[$7]++; size[$7]+=$10} END {for(i in urls){print urls[i],size[i],i}}' | sort -k1 -rn | head -n10
(7)统计2017年9月5日 每个IP访问状态码数量($status)
grep '05/Sep/2017' cd.mobiletrain.org.log | awk '{ ip_code[$1" "$9]++} END{ for(i in ip_code){print i,ip_code[i]} }' | sort -k1 -rn | head -n10
(8)统计2017年9月5日 每个IP访问状态码为404及出现次数($status)
grep '05/Sep/2017' sz.mobiletrain.org.log | awk '{if($9="404"){ip_code[$1" "$9]++}} END{for(i in ip_code){print i,ip_code[i]}}'
(9)统计前一分钟的PV量
date=$(date -d '-1 minute' +%d/%b/%Y:%H:%M); awk -v date=$date '$0 ~ date {i++} END{print i}' sz.mobiletrain.org.log
shell中的变量在awk程序中无法使用,因为在执行AWK时,是一个新的进程去处理的,因此就需要-v 来向awk程序中传参数了,你比如在shell程序中有一个变量a=15,你在awk程序中直接使用变量a是不行的,而你用awk -v b=a, 这样在AWK程序中就可以使用变量b了!也就相当于使用a了!
(10)统计2017年9月5日 8:30-9:00,每个IP,出现404状态码的数量
awk '$4>="[05/Sep/2017:08:30:00" && $4<="[05/Sep/2017:09:00:00" {if($9="404"){ip_code[$1" "$9]++}} END{for(i in ip_code){print i,ip_code[i]}}' sz.mobiletrain.org.log(11)统计2017年9月5日 各种状态码数量
grep '05/Sep/2017' sz.mobiletrain.org.log | awk '{code[$9]++} END{for(i in code){print i,code[i]}}'
来源:oschina
链接:https://my.oschina.net/u/4365362/blog/4655754