nginx(三)---Nginx WEB模块

  1. 连接状态
  2. 随机主页
  3. 替换模块
  4. 文件读取
  5. 文件压缩
  6. 页面缓存
  7. 防盗链

1.连接状态:stub_status_module

        1.1目的

        展示用户和nginx链接数量信息。

        1.2查询模块是否安装

nginx -V 2>&1 | grep stub_status        --with-http_stub_status_module 

        1.3启动状态模块

        (一)访问默认站点的状态模块 (状态模块未启用)

http://192.168.26.144/nginx_status

        (二) 配置状态模块 

        vim /etc/nginx/conf.d/default.conf

server {    请写在server内
location /nginx_status {    
stub_status;
allow all;
}    启用该模块
}

         (三)重启服务并重新访问:

        1示例:

         2解释:

Active connections: 2    当前活动的连接数

server accepts handled requests     服务器接受处理请求 

2   2   1

2        总连接数connection(TCP)  :

TCP三次握手/四次断开

2       成功的连接数connection (TCP)           失败连接=(总连接数-成功连接数)

1            总共处理的请求数requests(HTTP)   :
    connection        连接数,tcp连接                             
    request            http请求,GET/POST/DELETE/UPLOAD

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

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

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

        3.关于连接

1.什么是请求    一次HTTP查询

2.keepalived   :     长连接设置
        Httpd守护进程,一般都提供了keep-alive timeout时间设置参数。比如nginx的keepalive_timeout,和Apache的KeepAliveTimeout。这个 keepalive_timout时间值意味着:一个http产生的tcp连接在传送完最后一个响应后,还需要hold住 keepalive_timeout秒后,才开始关闭这个连接。当httpd守护进程发送完一个响应后,理应马上主动关闭相应的tcp连接,设置 keepalive_timeout后,httpd守护进程会想说:”再等等吧,看看浏览器还有没有请求过来”,这一等,便是 keepalive_timeout时间。如果守护进程在这个等待的时间里,一直没有收到浏览发过来http请求,则关闭这个http连接。

3.关闭长连接:

2.随机主页:random_index_module

        2.1目的

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

        2.2启动随机主页

        (一)创建主页目录

mkdir /app

        (二)创建多个主页

touch /app/{blue.html,green.html,red.html,.yellow.html}

在不同的页面书写不同的内容,例如:
    <html>
<head>
<title>green color</title>
</head>
<body style="background-color:green">
<h1>green color!</h1>
</body>
</html>

        (三) 启动随机主页

        vim /etc/nginx/conf.d/default.conf

server{

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

刷新主页,观察变化。请注意隐藏文件并不会被随机选取

3.替换模块:sub_module

        3.1目的

网页内容替换
如果我们用模板生成网站的时候,因为疏漏或者别的原因造成代码不如意,但是此时因为文件数量巨大,不方便全部重新生成,那么这个时候我们就可以用此模块来暂时实现纠错。另一方面,我们也可以利用这个实现服务器端文字过滤的效果。

        3.2启动替换

        vim /etc/nginx/conf.d/default.conf

 server {

sub_filter nginx 'QianFeng';       替换模块  将nginx  替换成 QianFeng
sub_filter_once on;                    单次替换 开启   ;若"sub_filter_once off"则开启全文替换
location / {
root   /usr/share/nginx/html;
index  index.html index.htm;
}

 

        重启服务并测试:

4.文件读取

        4.1模块

统称    ngx_http_core_module

语法:
    Syntax:     sendfile on | off;
    Default:     sendfile on;
    Context: http, server, location, if in location


    Syntax:     tcp_nopush on | off;
    Default:     tcp_nopush off;
    Context: http, server, location


    Syntax:     tcp_nodelay on | off;
    Default:     tcp_nodelay on;
    Context: http, server, location

        4.2原理介绍

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会被立刻发出去。

        4.3启用模块

location /video/ {
    sendfile        on;
    tcp_nopush  on;
}
默认启动,无需验证

5.文件压缩

        5.1原理介绍

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

        5.2模块:ngx_http_gzip_module

语法:
Syntax:     gzip on | off;
Default:     gzip off;
Context: http, server, location, if in location

Syntax:     gzip_comp_level level;
Default:     gzip_comp_level 1;(1~9)
Context: http, server, location

Syntax:     gzip_http_version 1.0 | 1.1;
Default:     gzip_http_version 1.1;
Context: http, server, location

        5.3启用模块

        (一)观察未压缩传输

        (二)启用压缩功能,需要重启服务

http {         在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.页面缓存

        6.1模块 :ngx_http_headers_module

expires起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求要配置expires,可以在http段中或者server段中或者location段中加入。
Nginx(expires 缓存减轻服务端压力),

        6.2语法

Syntax:     expires [modified] time;
                      expires  epoch | max | off;
Default:     expires off;
Context: http, server, location, if in location

epoch:指定“Expires”的值为 1 January,1970,00:00:01 GMT
max:指定“Expires”的值为10年。
-1:指定“Expires”的值为当前服务器时间-1s,即永远过期。
off:不修改“Expires”和"Cache-Control"的值

        6.3原理介绍

无缓存,每次访问服务器,均是全文传输。
开启缓存可以加速浏览网站。

        6.4启用缓存

        (一)观察浏览器缓存

        1 开启浏览器缓存,浏览页面。(默认)

第一次返回状态码200.页面对象全文传输
第二次返回状态304.页面对象部分传输。

        2 禁用缓存。浏览页面

返回码200.全文传输
理解浏览器缓存作用。

        3 解析缓存原理

        (二)理解nginx服务器缓存

        1 开启服务器缓存模块 :vim /etc/nginx/conf.d/default.conf 

    location / {
        root   /usr/share/nginx/html
        index  index.html index.htm;
        expires 24h;
    }

        2 再次浏览页面,观察响应头中出现服务器回复的缓存时间

 

        3 理解nginx服务器启动缓存时间,加速浏览。

缺点是时效性降低。

7.防盗链

        7.1模块

ngx_http_referer_module

        7.2语法

Syntax:     valid_referers none | blocked | server_names | string ...;
Default:     —
Context: server, location

        7.3日志原理介绍

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

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

        7.4启动防盗链

        (一)展现盗链现象

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

在a.com中写入:

<img src='1.jpg' />

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

在b.com的主页中写入:

<img src='http://A网站的域名或者地址/1.jpg' />

注意网站主目录中,根本没有图片。

        3 访问两个网站页面。均能正常显示图片。并观察a.com和b.com的日志

192.168.26.143 - - [01/Feb/2023:22:38:59 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0" "-"

日志正常。

192.168.26.143 - - [01/Feb/2023:22:38:59 +0800] "GET /1.jpg HTTP/1.1" 304 0 "http://b.com/" "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0" "-"

日志不正常。日志莫名其妙的产生了。
观察referer字段,发现被盗链了。

        4  启动a.com防盗链功能,并重启服务,再次访问b.com

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

 

 再次访问b.com网站,盗链失败。

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

生产环境:
location ~* \.(gif|jpg|png|bmp)$ {
root /a.com
    valid_referers none blocked  *.qfcloud.top server_names ~tianyun ~\.google\. ~\.baidu\.;
    if ($invalid_referer) {
        return 403;
        #rewrite .* http://qfcloud.top/403.jpg;
    }
}

实验环境:

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;
        }
    }

server_name   后面加的网址是白名单。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值