Nginx技术深入剖析
Nginx软件功能模块说明
核心功能模块(Core functionality):主要对应配置文件的Main区块和Events区块。
标准的http功能模块:
| ngx_http_core_module | 包括一些核心的http参数配置,对应Nginx的配置为HTTP区块部分 |
| ngx_http_access_module | 访问控制模块,用来控制网站用户对Nginx的访问 |
| ngx_http_gzip_module | 压缩模块,对Nginx返回的数据压缩,术语性能优化模块 |
| ngx_http_fastcgi_module | FastCGI模块,和动态应用相关的模块,例如PHP |
| ngx_http_proxy_module | proxy代理模块 |
| ngx_http_upstream_module | 负载均衡模块,可以实现网站的负载均衡功能及节点的健康检查 |
| ngx_http_rewrite_module | URL地址重写模块 |
| ngx_http_limit_conn_module | 限制用户并发连接数及请求数模块 |
| ngx_http_limit_req_module | 根据定义的key限制Nginx请求过程的速率 |
| ngx_http_log_module | 访问日志模块,以指定的格式记录Nginx客户访问日志等信息 |
| ngx_http_auth_basic_module | Web认证模块,设置Web用户通过账号、密码访问Nginx |
| ngx_http_ssl_module | ssl模块,用于加密的http连接,如https |
| ngx_http_stub_status_module | 记录Nginx基本访问状态信息等的模块 |
Nginx目录结构说明
├── client_body_temp
├── conf #Nginx所有配置文件的目录
│ ├── fastcgi.conf #fastcgi相关参数的配置文件
│ ├── fastcgi.conf.default #fastcgi.conf的原始配置文件
│ ├── fastcgi_params #fastcgi的参数文件
│ ├── fastcgi_params.default
│ ├── koi-utf
│ ├── koi-win
│ ├── mime.types #媒体类型
│ ├── mime.types.default
│ ├── nginx.conf #Nginx默认的主配置文件
│ ├── nginx.conf.02
│ ├── nginx.conf.default
│ ├── scgi_params #scgi参数文件,一般用不到
│ ├── scgi_params.default
│ ├── uwsgi_params #uwsgi参数文件,一般用不到
│ ├── uwsgi_params.default
│ └── win-utf
├── fastcgi_temp #fastcgi临时数据目录
├── html #编译安装Nginx默认站点目录,类似Apache的默认站点 #htdocs目录
│ ├── 50x.html #错误页面优雅替代显示文件,例如出现502错误时,会调
#调用此页面,error_page 500 502 503 504 /50x.html
│ ├── index.html #默认的首页文件,在实际环境中,大家习惯用(不是必 #须)index.html,index.php,index.jsp来做网站的首页文 #件,首页文件名在nginx.conf中事先定义好的。
│ └── index.html.2017-10-22
├── logs #Nginx默认的日志路径,包括错误日志及访问日志
│ ├── access.log #这是Nginx的默认访问日志文件,使用tail -f access.log可以 #实现观看用网站用户的访问情况信息
│ ├── error.log #Nginx的错误日志文件,如果Nginx出现启动故障等问题,
#可以通过查看这个文件查明原因。
│ └── nginx.pid #Nginx的pid文件,Nginx进程启动后,会把进程的ID号写入。
├── proxy_temp #临时目录
├── sbin #这是Nginx的命令目录,如Nginx的启动命令nginx
│ └── nginx
├── scgi_temp #临时目录
└── uwsgi_temp #临时目录
[root@localhost conf]# egrep -v "#|^$" nginx.conf
worker_processes 1; #worker进程的数量
events { #事件区块的开始
worker_connections 1024; #每个worker进程支持的最大连接数
} #事件区块的结束
http { #http区块开始
include mime.types; #nginx支持的媒体类型库文件
default_type application/octet-stream; #默认的媒体类型
sendfile on; #开启高效传输模式
keepalive_timeout 65; #连接超时
server { #第一个Server区块开始,表示一个独立的虚拟主机站点
listen 80; #提供服务的端口,默认80
server_name localhost; #提供服务的域名主机名
location / { #第一个location区块的开始
root html; #站点的根目录,相当于Nginx的安装目录
index index.html index.htm; #默认的首页文件,多个用空格分开
} #第一个location区块结束
error_page 500 502 503 504 /50x.html;#出现对应http状态码时,使用50x.html回应客户
location = /50x.html { #location区块开始,访问50x.html
root html;
}
}
} #http区块结束
企业场景中重启Nginx后的检测策略
在企业运维实践场中,每一个配置操作处理完毕后都应该进行快速有效的检查,这是一个合格运维人员的良好习惯。尽量使得在Nginx启动的同时,还会调用脚本通过获取header信息或模拟用户访问指定URL(wget等方式)来自动检查Nginx是否正常,最大限度的保证服务重启后,能迅速确定网站情况,而无须手工敲命令查看。这样如果配置有问题就可以迅速使用上一版本备份配置文件覆盖回来。
[root@localhost conf]# cat check_url.sh
#!/bin/bash
#author:chenfu 2017-10-22 QQ532088799
#--------function split--------
. /etc/rc.d/init.d/functions
function checkURL()
{
checkUrl=$1
echo 'check url start ...'
judge=($(curl -I -s --connect-timeout 2 ${checkUrl}|head -1 | tr " " "\n"))
if [[ "${judge[1]}" == '200' && "${judge[2]}" == 'OK' ]]
then
action "${checkUrl}" /bin/true
else
action "${checkUrl}" /bin/false
echo -n "retrying again...";sleep 3;
judgeagain=($(curl -I -s --connect-timeout 2 ${checkUrl}| head -1| tr "\r" "\n"))
if [[ "${judgeagain[1]}" == '200' && "${judgeagain[2]}" == 'OK' ]]
then
action "${chekcUrl}, retried again" /bin/true
else
action "${chekcUrl}, retried again" /bin/false
fi
fi
sleep 1;
}
# usage method
checkURL http://www.etiantian.org
Nginx status结果详解
Active connections: 1 #Nginx正处理的活动连接数有1个
server accepts handled requests #第一个server表示Nginx启动到现在共处理20个连接
#第二个accepts表示Nginx启动到现在共成功创建20次握 #手
#第三个handled requests表示共处理了23次请求
20 20 23
Reading: 0 Writing: 1 Waiting: 0 #Reading为Nginx读取到客户端的Header信息数
#Writing为Nginx返回给客户端的Header数
#Waiting为Nginx已经处理完正等候下一次请求指令的驻 #留连接。在开启keepalive的情况下
#这个值等于active-(reading+writing)
Nginx增加错误日志(error_log)配置
日志记录属于核心功能模块(ngx_core_module)的参数,该参数名字是error.log,针对自己来说最好定义在Main全局区块中,当然也可以放置不同的虚拟主机中单独记录。
error_log file level[debug|info|notice|warn|error|crit|alert|emerg];
关键字 日志文件 错误日志级别
error_log默认配置:
#default:error_log logs/error.log error;
可以放置的标签段:
#context:main,http,server,location
Nginx访问日志(access_log)
此功能由ngx_http_log_module模块负责
| 参数 | 说明 |
| log_format | 用来定义记录日志的格式(可以定义多种日志格式,取不同的名字即可) |
| access_log | 用来指定日志文件的路径及使用何种日志格式记录日志 |
| Nginx日志变量 | 说明 |
| $remote_addr | 记录访问网站的客户端地址 |
|
$http_x_forwarded_for |
当前端有代理服务器时,设置Web节点记录客户端地址的配置,此参数生效的前提是代理服务器上也进行了相关的x_forwarded_for设置 |
| $remote_user | 远程客户端名称 |
| $time_local | 记录访问时间与时区 |
| $request | 用户的http请求起始行信息 |
| $status | http状态码,记录请求返回的状态,例如200,404,301 |
| $body_bytes_sents | 服务器发送给客户端的响应body字节数 |
| $http_referer | 记录此次请求是从哪个链接访问过来的,可以根据referer进行防盗链设置 |
| $http_user_agent | 记录客户端访问信息,例如浏览器手机客户端等 |
buffer=size #存放访问日志的缓冲区大小
flush=time #将缓冲区的日志刷到磁盘的时间
gzip[=level] #表示压缩级别
[if=condition] #表示其他条件(一般的场景中这些都无需配置,极端优化 #时才可能会考虑这些参数)
默认的配置:
access_log logs/access.log combined;
日志内容配置:
log_format main '$remote_addr - $remote_user [$time_local] "$request"'
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
Nginx访问日志轮询切割
[root@localhost nginx]# cat /server/script/cut_nginx_log.sh
#!/bin/bash
Dateformat=`date +%Y%m%d`
Basedir="/application/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常用的日志收集分析工具有rsyslog、awstats、flume、ELK、storm等
Nginx技术深入剖析的更多相关文章
- 菜鸟nginx源码剖析 框架篇(一) 从main函数看nginx启动流程(转)
俗话说的好,牵牛要牵牛鼻子 驾车顶牛,处理复杂的东西,只要抓住重点,才能理清脉络,不至于深陷其中,不能自拔.对复杂的nginx而言,main函数就是“牛之鼻”,只要能理清main函数,就一定能理解其中 ...
- Nginx技术进阶详讲
Nginx技术进阶详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 并发数问题 讲到并发数这个概念,想必各位应该都知道是什么意思,就是同时访问一个项目,就比我们现在做的一些项目完 ...
- Nginx技术研究系列5-动态路由升级版
前几篇文章我们介绍了Nginx的配置.OpenResty安装配置.基于Redis的动态路由以及Nginx的监控. Nginx-OpenResty安装配置 Nginx配置详解 Nginx技术研究系列1- ...
- 菜鸟nginx源码剖析
菜鸟nginx源码剖析 配置与部署篇(一) 手把手配置nginx "I love you" TCMalloc 对MYSQL 性能 优化的分析 菜鸟nginx源码剖析系列文章解读 A ...
- 菜鸟nginx源码剖析数据结构篇(十一) 共享内存ngx_shm_t[转]
菜鸟nginx源码剖析数据结构篇(十一) 共享内存ngx_shm_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn ...
- 菜鸟nginx源码剖析数据结构篇(十) 自旋锁ngx_spinlock[转]
菜鸟nginx源码剖析数据结构篇(十) 自旋锁ngx_spinlock Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csd ...
- 菜鸟nginx源码剖析数据结构篇(九) 内存池ngx_pool_t[转]
菜鸟nginx源码剖析数据结构篇(九) 内存池ngx_pool_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn. ...
- 菜鸟nginx源码剖析数据结构篇(八) 缓冲区链表ngx_chain_t[转]
菜鸟nginx源码剖析数据结构篇(八) 缓冲区链表 ngx_chain_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.c ...
- 菜鸟nginx源码剖析数据结构篇(七) 哈希表 ngx_hash_t(下)[转]
菜鸟nginx源码剖析数据结构篇(七) 哈希表 ngx_hash_t(下) Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.c ...
随机推荐
- 什么叫erp系统
一般来说,erp系统是一个以会计(此处的会计是指管理会计)为核心的信息系统,用来识别和规划企业资源, 从而获取客户订单, 完成加工和交付,最后得到客户付款,最终获得收入和利润. 实际上, erp 系统 ...
- ListView优化的时候ViewHolder的简洁写法
在ListVIew做复用优化的时候,经常会写ViewHolder,还需要很麻烦的去findview,我最讨厌写一堆的这样代码了,今天看到了一个极简的写法,很好用,很简洁啊!!! public stat ...
- Azure 1 月新公布
Azure 1 月新发布:Microsoft Power BI Embedded 公共预览和计算机视觉 API 标准版的更新以及 Azure IoT 网关 SDK 和中心设备管理新功能正式发布以及关于 ...
- linux单机限速工具
wondershaper是国外人开发的一款在Linux内核下基于TC工具的对整块网卡的限度工具. http://lartc.org/wondershaper/ 安装wondershaper: [roo ...
- 浏览器中使用calc不识别
在使用css3中的calc运算函数时,发现浏览器不识别,当时代码是这样的 width:calc(100%-50px); 经过查询官网原来发现这里有个需要注意的地方就是在进行加减运算的时候,必须在运算符 ...
- 显示C++数据的数据类型
#include <typeinfo> using namespace std; ... cout << typeid(d).name() << endl; 其中, ...
- SINAMICS S120屏蔽报警
通用的报警屏蔽方法: P2118 = 需要屏蔽的报警号 P2119 = 屏蔽的方式
- windows cmd窗口,输出UTF-8格式文件,显示乱码
本文来自网络,参考文档见文档末尾 想在windows cmd窗口中查看utf-8中文,需要先执行以下步骤 chcp 65001 将CMD窗口切换成UTF-8代码页 在命令行标题栏上点击右键,选择&qu ...
- MSMQ学习笔记二——创建Message Queue队列
一.创建Message Queue队列的主要流程 1.定义MQQUEUEPROPS 结构: 2.设置消息队列属性: 3.初始化MQQUEUEPROPS 结构: 4.调用MQCreateQueue创建队 ...
- cocosBuilder生成cbbi文件,绑定到cocos2d-x
cocosBuilder生成cbbi文件,绑定到cocos2d-x 分类: Cocos2D-X2013-04-27 20:37 4651人阅读 评论(6) 收藏 举报 今天弄了一天.记录一下. 首 ...