您的位置 首页 java

Nginx配置文件详解,日志切割如何做

nginx 模型概念:

Nginx 会按需同时运行多个进程:

一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache

loader)和缓存管理器进程(cache manager)等。

所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。

主进程以 root 用户身份运行,而 worker、cache loader 和 cache manager 均应以非特权用

户身份(user 配置项)运行。

主进程主要完成如下工作:

worker 进程主要完成的任务包括:

1. 接收、传入并处理来自客户端的连接;

2. 提供反向代理及过滤功能;

3. nginx 任何能完成的其它任务

nginx.conf配置文件结构

Nginx配置文件详解,日志切割如何做

#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 e poll ;

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

文章来源:智云一二三科技

文章标题:Nginx配置文件详解,日志切割如何做

文章地址:https://www.zhihuclub.com/179796.shtml

关于作者: 智云科技

热门文章

网站地图