• NGINX常用模块(二)


    5.Nginx日志配置

    Nginx有非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。日志格式 通过log_format命令定义格式

    1.log_format指令

    # 配置语法:包括:error.log access.log
    Syntax:    log_format name [escape=default|json|none] string ...;
    Default:    
    log_format combined "...";
    Context:    http
    
    # 默认Nginx定义的日志语法
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    10.0.1.1 - - [07/Feb/2020:12:50:29 +0800] "GET /img/favicon.png HTTP/1.1" 401 581 "http://www.xiao.com/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36" "-"

    # Nginx日志格式允许包含的变量
    $remote_addr            # 记录客户端的IP地址
    $remote_user            # 记录客户端的用户名
    $body_bytes_sent        # 发送给客户端的字节数,不包括头部响应的大小
    $http_x_forwarded_for    # 记录客户端的IP地址
    $http_user_agent        # 记录客户端的浏览器的相关信息    
    $http_referer            # 记录从哪个页面链接过来访问的
    $bytes_sent             # 发送给客户端的字节数
    $connection                # 连接序列号
    $connection_requests    # 通过连接发出的当前请求数(1.1.18)
    $msec                    # 日志写入时的时间(以毫秒为单位),以毫秒为单位
    $pipe                    # “ p”(如果请求已传递),.否则为“ ”
    $request                # 记录请求的方法及请求的协议
    $request_length            # 请求长度(包括请求行,标头和请求正文)
    $request_time            # 要求以毫秒为单位的处理时间(以毫秒为单位);从客户端读取第一个字节到将最后一个字节发送到客户端后的日志写入之间经过的时间
    $status                    # 回应状态
    $time_iso8601            # ISO 8601标准格式的当地时间
    $time_local                # 通用日志格式的本地时间

    # 注:如果Nginx位于负载均衡器,nginx反向代理之后,web服务器无法直接获取到客户端真实的IP地址。
    # $remote_addr获取的是反向代理的IP地址。反向代理服务器在转发请求的http头信息中。
    # 增加X-Forward-For信息,用来记录客户端IP地址和客户端请求的服务器地址。

    2.access_log指令

    Syntax:    access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
    access_log off;
    Default:    
    access_log logs/access.log combined;
    Context:    http, server, location, if in location, limit_except
    
    Example:
    server {
        ...
        access_log /var/log/nginx/www.oldboy.com.log main;
        ...
    }

     $http_x_forwarded_for

    6.Nginx虚拟站点

    环境:在一台服务器上实现多个站点
    托管业务:
        小型机
            unix
        工作站
            unix
        X86服务器
    
    实现虚拟就主机的方式:
    基于IP     
        不同的IP
    基于端口 ***
        相同的IP,不同的端口
    基于域名 *****
        相同的IP,相同的端口,不同的域名

    需求,公司需要三个站点,分别是www,bbs,blog

    解法1:基于IP的虚拟主机

    1) 创建目录
    mkdir -p /var/www/(www,bbs,blog)
    
    2) 创建对应的配置文件
    vim /etc/nginx/conf.d/www.conf
    server {
        listen 172.16.1.7:80;
        server_name www.xiao.com;
        
        location / {
            root /var/www/www;
            index index.html;
        }
    }
    
    vim /etc/nginx/conf.d/bbs.conf
    server {
        listen 172.16.1.8:80;
        server_name bbs.xiao.com;
        
        location / {
            root /var/www/bbs;
            index index.html;
        }
    }
    
    vim /etc/nginx/conf.d/blog.conf
    server {
        listen 172.16.1.9:80;
        server_name blog.xiao.com;
        
        location / {
            root /var/www/blog;
            index index.html;
        }
    }

    解法2:基于端口

    vim /etc/nginx/conf.d/www.conf
    server {
        listen 80;
        server_name www.xiao.com;
        
        location / {
            root /var/www/www;
            index index.html;
        }
    }
    
    vim /etc/nginx/conf.d/bbs.conf
    server {
        listen 81;
        server_name bbs.xiao.com;
        
        location / {
            root /var/www/bbs;
            index index.html;
        }
    }
    
    vim /etc/nginx/conf.d/blog.conf
    server {
        listen 82;
        server_name blog.xiao.com;
        
        location / {
            root /var/www/blog;
            index index.html;
        }
    }
    
    3) 语法测试,重载nginx
    nginx -t
    nginx -s reload
    
    4) 写hosts解析
    10.0.1.7 www.xiao.com bbs.xiao.com blog.xiao.com
    
    [root@web01 ~]# mkdir -p /var/www/{www,bbs,blog}
    [root@web01 ~]# echo www > /var/www/www/index.html
    [root@web01 ~]# echo bbs > /var/www/bbs/index.html
    [root@web01 ~]# echo blog > /var/www/blog/index.html
    验证结果:
    在验证过程中,使用www.xiao.com后加81、82端口号,都能访问到bbs.xiao.com,blog.xiao.com的首页,反之一样

    解法3:基于域名

    vim /etc/nginx/conf.d/www.conf
    server {
        listen 80;
        server_name www.xiao.com;
        
        location / {
            root /var/www/www;
            index index.html;
        }
    }
    
    vim /etc/nginx/conf.d/bbs.conf
    server {
        listen 80;
        server_name bbs.xiao.com;
        
        location / {
            root /var/www/bbs;
            index index.html;
        }
    }
    
    vim /etc/nginx/conf.d/blog.conf
    server {
        listen 80;
        server_name blog.xiao.com;
        
        location / {
            root /var/www/blog;
            index index.html;
        }
    }
    
    3) 语法测试,重载nginx
    nginx -t
    nginx -s reload
    
    4) 写hosts解析
    10.0.1.7 www.xiao.com bbs.xiao.com blog.xiao.com
    
    5) 测试
    http://www.xiao.com/
    http://bbs.xiao.com/
    http://blog.xiao.com/

    增加需求:实现每个站点日志独立

    1)修改配置文件
    /etc/nginx/nginx.conf
    #    access_log  /var/log/nginx/access.log  main;
    
    /etc/nginx/conf.d/www.conf
        access_log /code/log/www.xiao.com.log main;
    /etc/nginx/conf.d/bbs.conf
        access_log /code/log/bbs.xiao.com.log main;
    /etc/nginx/conf.d/blog.conf
        access_log /code/log/blog.xiao.com.log main;    
        
    2)创建对应的目录
    [root@web01 ~]# mkdir -p /code/log

    7.Nginx Location

    使用Nginx Location可以控制访问网站的路径

    匹配符    匹配规则                        优先级
    =        精确匹配                        1
    ^~       以某个字符开头                   2
    ~        区分大小写的正则匹配              3
    ~*       不区分大小写的正则匹配            4
    !~       区分大小写不匹配的正则            5
    !~*      不区分大小写不匹配的正则           6
    /        通用匹配,任何请求都会匹配到        7

    Location应用场景

    # 通用匹配,任何请求都会匹配到
    location / {
    
    }
    
    # 严格区分大小写,匹配以.php结尾的都走这个location
    location ~ .php$ {
        fastcgi_pass http://127.0.0.1:9000;
    }
    
    # 严格区分大小写,匹配以.jsp结尾的都走这个location
    location ~ .jsp$ {
        proxy_pass http://127.0.0.1:8080;
    }
    
    # 不区分大小写匹配,只要用户访问.jpg,gif,png,js,css都走这条location
    location ~* .*.(jpg|png|gif|js|css)$ {
        rewrite (.*) http://cdn:xiao.com$requet_uri;
    }
    
    # 不区分大小写匹配
    location ~* ".(sql|bak|tgz|tar.gz|.git)$" {
        default_type text/html;
        return 403 "启用访问控制成功";
    }
  • 相关阅读:
    一维数组遍历
    实战级Stand-Alone Self-Attention in CV,快加入到你的trick包吧 | NeurIPS 2019
    ThunderNet :像闪电一样,旷视再出超轻量级检测器,高达267fps | ICCV 2019
    Light-Head R-CNN : 旷世提出用于加速two-stage detector的通用结构,速度达102fps
    NASNet : Google Brain经典作,改造搜索空间,性能全面超越人工网络,继续领跑NAS领域 | CVPR 2018
    ICLR 2020 | 抛开卷积,multi-head self-attention能够表达任何卷积操作
    告别炼丹,Google Brain提出强化学习助力Neural Architecture Search | ICLR2017
    AAAI 2020 | 反向R?削弱显著特征为细粒度分类带来提升
    AAAI 2020 | DIoU和CIoU:IoU在目标检测中的正确打开方式
    目标检测 | 经典算法 Cascade R-CNN: Delving into High Quality Object Detection
  • 原文地址:https://www.cnblogs.com/xmtxh/p/12273802.html
Copyright © 2020-2023  润新知