Nginx 模型概念:
Nginx 会按需同时运行多个进程:
一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache
loader)和缓存管理器进程(cache manager)等。
所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。
主进程以 root 用户身份运行,而 worker、cache loader 和 cache manager 均应以非特权用
户身份(user 配置项)运行。
主进程主要完成如下工作:
1. 读取并验正配置信息;
2. 创建、绑定及关闭套接字;
3. 启动、终止及维护 worker 进程的个数;
4. 无须中止服务而重新配置工作特性;
5. 重新打开日志文件;
worker 进程主要完成的任务包括:
1. 接收、传入并处理来自客户端的连接;
2. 提供反向代理及过滤功能;
3. nginx 任何能完成的其它任务
nginx.conf配置文件结构
#user nobody; #主模块命令, 指定 Nginx 的 worker 进程运行用户以及用户组,默认由nobody 账号运行。
worker_processes 1;#指定 Nginx 要开启的进程数。
worker_rlimit_nofile 100000; #worker 进程的最大打开文件数限制
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid
#pid logs/nginx.pid; #用来指定进程 id 的存储文件位置。
events {
use epoll;
worker_connections 1024;
}
/**
以上这块配置代码是对nginx 全局属性的配置。
user :主模块命令, 指定 Nginx 的 worker 进程运行用户以及用户组,默认由 nobody
账号运行。
worker_processes: 指定 Nginx 要开启的进程数。
error log:用来定义全局错设日志文件的路径和日志名称。
日志输出级别有 debug,info,notice,warn,error,crit 可供选择,
其中 debug 输出日志最为详细,面 crit(严重)输出日志最少。默认是 error
pid: 用来指定进程 id 的存储文件位置。
event:设定 nginx 的工作模式及连接数上限,
其中参数 use 用来指定 nginx 的工作模式(这里是 epoll,epoll 是多路复用 IO(I/O
Multiplexing)中的一种方式),
nginx 支持的工作模式有 select ,poll,kqueue,epoll,rtsig,/dev/poll。
其中 select 和 poll 都是标准的工作模式,kqueue 和 epoll 是高效的工作模
式,对于 linux 系统,epoll 是首选。
worker_connection 是设置 nginx 每个进程最大的连接数,默认是 1024,所以 nginx
最大的连接数 max_client=worker_processes * worker_connections。
进程最大连接数受到系统最大打开文件数的限制,需要设置 ulimit。
*/
# # 下面部分是 x nginx 对 对 p http 服务器相关属性的设置
http {
include mime.types; 主模块命令,对配置文件所包含文件的设
定,减少主配置文件的复杂度,相当于把部分设置放在别的地方,然后在包含进来,保持主
配置文件的简洁
default_type application/octet-stream; 默认文件类型,当文件类型未定义时候就
使用这类设置的。
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
指定 nginx 日志的格式
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on; 开启高效文件传输模式(zero copy 方式),避免内核缓冲区
数据和用户缓冲区数据之间的拷贝。
#tcp_nopush on; 开启 TCP_NOPUSH 套接字(sendfile 开启时有用)
#keepalive_timeout 0; 客户端连接超时时间
keepalive_timeout 65;
#gzip on; 设置是否开启 gzip 模块
# 下面是 r server 段虚拟主机的配置
server {
listen 80; 虚拟主机的服务端口
server_name localhost; 用来指定 ip 或者域名,多个域名用逗号分开
#charset koi8-r;
location / {
#地址匹配设置,支持正则匹配,也支持条件匹配,这里是默认请求地址,用户可以location
命令对 nginx 进行动态和静态网页过滤处理
root html; 虚拟主机的网页根目录
index index.html index.htm; 默认访问首页文件
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
Nginx 日志
Nginx 日志对于统计、系统服务排错很有用。
Nginx 日志主要分为两种:access_log(访问日志)和 error_log(错误日志)。
通过访问日志我们可以得到用户的 IP 地址、浏览器的信息,请求的处理时间等信息。
错误日志记录了访问出错的信息,可以帮助我们定位错误的原因。
因此,将日志好好利用,可以得到很多有价值的信息。
查看日志命令:
tail -f /usr/local/nginx/logs/access.log
1、设置 access_log
访问日志主要记录客户端的请求。客户端向 Nginx 服务器发起的每一次请求都记录在这里。
客户端 IP,浏览器信息,referer,请求处理时间,请求 URL 等都可以在访问日志中得到。
当然具体要记录哪些信息,你可以通过 log_format 指令定义。
语法
2. access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; # 设置访问日志
3. access_log off; # 关闭访问日志
- path 指定日志的存放位置。
- format 指定日志的格式。默认使用预定义的 combined。
- buffer 用来指定日志写入时的缓存大小。默认是 64k。
- gzip 日志写入前先进行压缩。压缩率可以指定,从 1 到 9 数值越大压缩比越高,同时压缩的速度也越慢。默认是 1。
- flush 设置缓存的有效时间。如果超过 flush 指定的时间,缓存中的内容将被清空。
- if 条件判断。如果指定的条件计算为 0 或空字符串,那么该请求不会写入日志。
- 另外,还有一个特殊的值 off。如果指定了该值,当前作用域下的所有的请求日志都被关闭。
示例
作用域
access_log 指令的作用域分别有 http,server,location。
2 、log_format 自定义格式
默认的日志格式
15. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
16. '$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
各参数明细表:
$remote_addr 客户端的 ip 地址(代理服务器,显示代理服务 ip)
$remote_user 用于记录远程客户端的用户名称(一般为“-”)
$time_local 用于记录访问时间和时区
$request 用于记录请求的 url 以及请求方法
$status 响应状态码,例如:200 成功、404 页面找不到等。
$body_bytes_sent 给客户端发送的文件主体内容字节数
$http_user_agent 用户所使用的代理(一般为浏览器)
$http_x_forwarded_for 可以记录客户端 IP,通过代理服务器来记录客户端的 ip 地址
$http_referer 可以记录用户是从哪个链接访问过来的
3 、设置 error_log
错误日志在 Nginx 中是通过 error_log 指令实现的。该指令记录服务器和请求处理过程中的错误信息。
错误日志不支持自定义。
语法
17. error_log path [level];
- path 参数指定日志的写入位置。
- level 参数指定日志的级别(不写为全部)。level 可以是 debug, info, notice, warn, error, crit, alert,emerg中的任意值(等级从低到高排列)。
只有日志的错误级别等于或高于 level 指定的值才会写入错误日志中。默认值是 error。
示例
error_log logs/error.log;
error_log logs/error_notice.log notice;
error_log logs/error_info.log info; ## 可以将不同的错误类型分开存储
4 、日志配置和及切割
/etc/init.d/rsyslog start #系统日志,如不开启,看不到定时任务日志
/etc/rc.d/init.d/crond start #定时任务开启
编写 sh :
#!/bin/bash
#设置日志文件存放目录
LOG_HOME="/usr/local/nginx/logs/"
#备分文件名称
LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)"
#重命名日志文件
mv ${LOG_HOME}/access.log ${LOG_HOME}/access.${LOG_PATH_BAK}.log
mv ${LOG_HOME}/error.log ${LOG_HOME}/error.${LOG_PATH_BAK}.log
#向 nginx 主进程发信号重新打开日志
kill -USR1 `cat ${LOG_HOME}/nginx.pid`
配置 cron :
*/1 * * * * /usr/local/nginx/sbin/logcut.sh
本文暂时没有评论,来添加一个吧(●'◡'●)