当前位置 主页 > 服务器问题 > nginx问题汇总 >

    详解Nginx服务器中的日志相关配置

    栏目:nginx问题汇总 时间:2018-10-20 16:38

    这篇文章主要介绍了详解Nginx服务器中的日志相关配置,Nginx是拥有高性能的异步非阻塞型服务器,需要的朋友可以参考下

    nginx 日志相关指令主要有两条,
    log_format,用来设置日志格式,
    access_log,用来指定日志文件的存放路径、格式和缓存大小

    log_format 格式
    log_format name( 格式名字) 格式样式(即想要得到什么样的日志内容)

     
    默认的示例:

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_s ent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"']

    #注释:
    $remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;
    $remote_user :用来记录客户端用户名称;
    $time_local : 用来记录访问时间与时区;
    $request : 用来记录请求的url与http协议;
    $status : 用来记录请求状态;成功是200,
    $body_bytes_s ent :记录发送给客户端文件主体内容大小;
    $http_referer :用来记录从那个页面链接访问过来的;
    $http_user_agent :记录客户机,浏览器的相关信息;

    通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址;
     

    log_format mylogformat ' $http_x_forwarded_for- $remote_user [$time_local] '' "$request" '$status $body_bytes_s ent '' "$http_referer" "$http_user_agent" ';

    用access_log指令日志文件存放路径;
    用了log_format 指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;
    access_log path(存放路径) format (自定义日志名称)

     

    #示例:access_log logs/access.log main; #我们用log_format 定义了一个mylogformat的日志 我们可以写成这样access_log logs/access.log mylogformat; #如果不想启用日志 :access_log off ;

     
    在定义日志目录中要注意的是,nginx进程设置的用户和组必须有对该路径 创建文件的权限,假设nginx的usr指令设置的用户名和用户组都是www,而logs目录的用户名和组是root,那么日志文件将无法被创建;

    Nginx日志切割脚本

    #!/usr/bin/env python import datetime,os,sys,shutil log_path = '/alidata/log/nginx/access/'log_file = 'www.wpython.com.log' yesterday = (datetime.datetime.now() - datetime.timedelta(days = 1)) try: os.makedirs(log_path + yesterday.strftime('%Y') + os.sep + \    yesterday.strftime('%m')) except OSError,e: print print e sys.exit()  shutil.move(log_path + log_file,log_path \   + yesterday.strftime('%Y') + os.sep \   + yesterday.strftime('%m') + os.sep \   + log_file + '_' + yesterday.strftime('%Y%m%d') + '.log')  os.popen("sudo kill -USR1 `cat /alidata/server/nginx/logs/nginx.pid`")