nginx日志详解,nginx web模块详解,我是每一个模块,每一个文件进行解释的,便于理解

一:nginx日志详解

一.日志模块

日志模块的名称是:ngx_http_log_module;官方文档:http://nginx.org/en/docs/http/ngx_http_log_module.html

1.相关指令

log_format      日志格式                                            access_log      访问日志

error_log         错误日志                                             open_log_file_cache         日志缓存

日志缓存命令默认没有配置,默认禁止。 open_log_file_cache指令的各项参数说明如下:

open_log_file_cache  max=N [inactive=time]  [mim_uses=N]  [valid=time]  | off

max:设置缓存中的最大文件描述符数量。

inactive:设置一个时间,如果在设置的时间内没有使用此文件描述符,则自动删除次文件描述符。默认时间为10秒。是可选参数。

min_uses:在参数inactive指定的使用时间范围内,如果日志文件超过被使用的次数,则将该日志文件的描述符记入缓存。默认次数为1.

valid: 设置多长时间检查一次,看一看变量指定的日志文件路径与文件名是否仍然存在。默 认时间为 60秒。
off: 禁止使用缓存。
open_log_file_cache  指令的设置示例如下:
open_log_file_cache  max=1000  inactive=20s  min_uses=2  valid=1m;      

2.日志的格式和命令

语法:Syntax: log_format name [escape=default|json] string ...;              name 表示格式名称        string 表示定义的格式

默认值:Default: log_format combined "...";                                                          log_format 有默认的无需设置的combined日志格式,相当于apache的combined日志格式

环境:Context: http        context网站代理LB

定义设置位置:vim /etc/nginx/nginx.conf   下述内容均可以在该命令中找到

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
$remote_addr,       远程地址: 记录客户端IP地址                   $remote_user:远程用户:记录客户端用户名称

[$time_local]           本地时间:服务器自身实践                      $request: 请求:记录请求的URL和HTTP协议

$status                   状态:记录请求状态                          $body_bytes_sent   发送给客户端的字节数,不包括响应头的大小

$http_referer           记录从哪个页面链接访问过来的  (超链接)      $http_user_agent   记录客户端浏览器相关信息

$http_x_forwarded_for         代理IP

3.访问日志和错误日志

access_log案例

192.168.100.254 - - [17/Dec/2017:14:45:59 +0800] "GET /nginx-logo.png HTTP/1.1" 200 368 "http://192.168.100.10/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"

192.168.100.254:远程主机IP        

- -   用户             

[17/Dec/2017:14:45:59 +0800] 时间

get:获得,下载,还有post提交。       

/nginx-logo.png:下载图片

HTTP/1.1 :http版本

200:状态码 什么结果。对,还是错

368 大小  :下载的文件大小

http://192.168.100.10/ :引用自哪个连接,主页http://192.168.100.10/

Mozilla/5.0 :浏览器的版本

(Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0:Windows NT 客户端系统类型

-远程客户端主机地址  (请看注释)

error_log,个性化404错误反馈页面

1 修改主配置文件

server{

        error_page 404 /404.html;
            location = /404.html {
                root            /xuleilinux;
        }

}

2 创建错误反馈页面,在里面写入个性化页面 vim /xuleilinux/404.html

3,访问不存在的页面,查看404日志 

二:日志轮转/切割

1.观察nginx日志轮转文件:vim /etc/logrotate.d/nginx 

vim /etc/logrotate.d/nginx       待切割的日志

    create 0644 nginx nginx         创建新的日志文件,属主nginx,属组nginx

    daily    每天进行一次日志分割

    rotate 10        保留十分日志

    missingok          丢失不提示

    notifempty             空文件的话,不转储

    compress         压缩

    sharedscripts           轮转后执行脚本

    postrotate

        /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true                                                USR1亦通常被用来告知应用程序重载配置文件;例如,向Apache HTTP服务器发送一个USR1信号将导致以下步骤的发生:停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。

    endscript    结束脚本

}

手动立即轮转语句:/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf

二:web模块

1.连接状态:stub_status_module

展示用户和nginx连接状态数量信息

使用nginx -V 2>&1 | grep stub_status   查找模块是否安装,如果已安装那么就可以配置状态模块了

 2 配置状态模块,启用该模块 vim /etc/nginx/conf.d/default.conf

server {

location /nginx_status {    
stub_status;
allow all;
}

}

3 重启服务再次访问,观察连接数 和请求数。

Active connections: 1    当前活动的连接数        server accepts handled requests     服务器接受处理请求 

17        总连接数connection(TCP)

17        成功的连接数connection (TCP)

24             总共处理的请求数requests(HTTP)

Reading: 2            读取客户端Header的信息数         请求头

Writing: 1        返回给客户端的header的信息数     响应头

Waiting: 19            等待的请求数,开启了keepalive

2.随机主页:random_index_module,将主页设置成随机页面,是一种微调更新机制

1 创建主页目录    mkdir /app

2 创建多个主页    touch /app/{blue.html,green.html,red.html,.yellow.html} 在不同的页面书写不同的内容

3 启动随机主页  

server{

location / {
     #root   /usr/share/nginx/html;
     #index  index.html index.htm;
     root /app;
     random_index on;
}
}

3.替换模块

vim /etc/nginx/conf.d/default.conf  #启动nginx默认页面
 server {               #在server{下面插入
sub_filter nginx 'dabai';
sub_filter_once on;      #替换模块  将nginx  替换成 大白,单次替换 开启只替换一次,关闭off,全部都替换     
location / {
root   /usr/share/nginx/html;
index  index.html index.htm;
}

重启服务,测试页面

4:文件读取

原理介绍:sendfile:

未使用sendfile() 的传统网络传输过程:硬盘 >> kernel buffer >> user buffer>> kernel socket buffer >>协议栈

使用 sendfile() 来进行网络传输的过程:硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈 sendfile() 不但能减少切换次数而且还能减少拷贝次数。

tcp_nopush:未使用tcp_nopush()网络资源浪费;应用程序每产生一次操作就会发送一个包,而典型情况下一个包会拥有一个字节的数据以及40个字节长的包头,于是产生4000%的过载,很轻易地就能令网络发生拥塞。同时也浪费资源。

使用tcp_nopush()网络传输效率提升 :当包累计到一定大小后再发送。

tcp_nodelay    开启或关闭nginx使用TCP_NODELAY选项的功能。 这个选项仅在将连接转变为长连接的时候才被启用。
TCP_NODELAY是禁用Nagle算法,即数据包立即发送出去。由于Nagle和DelayedACK的原因,数据包的确认信息需要积攒到两个时才发送,长连接情况下,奇数包会造成延时40ms,所以tcp_nodelay会将ack立刻发出去。 如果不在长连接时,可以关闭此模块,因为ack会被立刻发出去。

启用模块:默认是启动的,无需验证

location /video/ {
    sendfile        on;
    tcp_nopush  on;
}

5.文件压缩

原理介绍:启动该模块,使文件传输前进行压缩,提升传输效率。

启用模块:

http {                                                                                                                                                                                   gzip on;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; 
gzip_static on;   #gzip_static on; nginx对于静态文件的处理模块

观察压缩传输 压缩包和图片类对象本身已经自带压缩功能。所以压缩比例较小低。文本类对象在压缩试验中,压缩比例体现优越。

6.页面缓存

原理介绍:expires起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求要配置expires,可以在http段中或者server段中或者location段中加入。Nginx(expires 缓存减轻服务端压力),无缓存,每次访问服务器,均是全文传输。开启缓存可以加速浏览网站。

启用缓存:

vim /etc/nginx/nginx.conf
    location / {
        root   /usr/share/nginx/html
        index  index.html index.htm;
        expires 24h;    #缓存保存时间,24小时
    }

 再次浏览页面,观察响应头中出现服务器回复的缓存时间,理解nginx服务器启动缓存时间,加速浏览。

7.防盗链

防盗链原理介绍:日志格式中的http_referer是记录,访问点引用的URL。也就是超链接的上一级地址。
通过这段地址,可以发现一种网络行为——盗链。非法盗链会影响站点的正常访问。
通过http_referer模块可以控制这一点。防止非法盗链现象。

 搭建一个a.com网站,在主页中插入图片

vim index.html
<img src='1.jpg' /> #注意要将1.jpg图片拷贝至网站主目录。

搭建一个b.com网站,在主页中盗链A网站的图片

vim index.html
<img src='http://A网站的域名或者地址/1.jpg' /> #盗用链接。注意网站主目录中,根本没有图片。

启动防盗链,如下所述设置完毕进行重启nginx服务

location / {
        root   /a.com;
        index  index.html index.htm; 
     
        valid_referers none blocked *.a.com;
        if ($invalid_referer) {
            return 403;
        }
    }

再次访问b.com网站,盗链失败,防盗链完成

如果希望某些网站能够使用(盗链)资源:

location / {
        root   /a.com;
        index  index.html index.htm;
     
        valid_referers none blocked *.a.com        server_name  192.168.100.*  ~tianyun ~\.google\. ~\.baidu\.   b.com;
        if ($invalid_referer) {
            return 403;
        }
    }

访问b.com,再次盗链,合法盗链成功。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值