Nginx基础篇-Nginx的WEB模块

随机主页

random_index_module
目的:将主页设置成随机页面,是一种微调更新机制
实验步骤:
1 创建主页目录

mkdir /app

2 创建多个主页

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>

3 启动随机主页

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

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

systemctl restart nginx

刷新主页,观察变化

替换模块

sub_module
目的:网页内容替换

实验步骤:
启动替换1

vim /etc/nginx/conf.d/default.conf
server {
sub_filter nginx '1111';
sub_filter_once on;
location / {
root   /usr/share/nginx/html;
index  index.html index.htm;
}

说明
替换模块 将nginx 替换成 1111
单次替换 开启

重启服务,测试页面
1.只替换了一处。
2.将单次替换关闭,再次刷新页面,即可看见全文替换。
sub_filter_once off

文件读取

原理介绍:
sendfile:
未使用sendfile() 的传统网络传输过程:
硬盘 >> kernel buffer >> user buffer>> kernel socket buffer >>协议栈
在这里插入图片描述
使用 sendfile() 来进行网络传输的过程:
硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈

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

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

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

模块的启用

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

文件压缩

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

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

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;
}
systemctl restart nginx

页面缓存

ngx_http_headers_module

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

语法:

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

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

启用缓存
观察浏览器缓存
1 开启浏览器缓存,浏览页面。(默认)
第一次返回状态码200.页面对象全文传输
第二次返回状态304.页面对象部分传输。
2 禁用缓存。浏览页面
返回码200.全文传输
理解浏览器缓存作用。
3 解析缓存原理
在这里插入图片描述
理解nginx服务器缓存
4 开启服务器缓存

vim /etc/nginx/nginx.conf
    location / {
        root   /app/tianyun.me;
        index  index.html index.htm;
        expires 24h;
    }

5 再次浏览页面,观察相应头中出现服务器回复的缓存时间
6 理解nginx服务器启动缓存时间,加速浏览。
缺点是时效性降低。

防盗链

模块:
ngx_http_referer_module
语法:

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

日志原理介绍:
log_format main '$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “KaTeX parse error: Double superscript at position 37: … '̲status b o d y b y t e s s e n t " body_bytes_sent " bodybytessent"http_referer” ’
‘“ h t t p u s e r a g e n t " " http_user_agent" " httpuseragent""http_x_forwarded_for”’;

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

展现盗链现象,启动防盗链实验步骤:
1 搭建一个a.com网站在主页中插入图片

vim index.html
<img src='1.jpg' />

注意要将1.jpg图片拷贝至网站主目录。
2 搭建一个b.com网站在主页中盗链A网站的图片

vim index.html
<img src='http://A网站的域名或者地址/1.jpg' />
盗用链接

注意网站主目录中,根本没有图片。
3 访问两个网站页面。均能正常显示图片。

4 注意b.com网站的日志日志正常。
192.168.100.254 - - [20/Sep/2017:15:10:27 +0800] “GET / HTTP/1.1” 200 42 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0” “-”

5 注意a.com网站的日志
日志不正常。日志莫名其妙的产生了。
观察referer字段,发现被盗链了。
192.168.100.254 - - [20/Sep/2017:15:10:27 +0800] “GET /1.jpg HTTP/1.1” 200 1635350 “http://192.168.100.20/” “Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0”
6 启动a.com防盗链功能

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

重启服务
7 再次访问b.com网站,盗链失败。
8 如果希望某些网站能够使用(盗链)资源:

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_names   192.168.100.*  ~tianyun ~\.google\. ~\.baidu\.;
        if ($invalid_referer) {
            return 403;
        }
    }

9 再次盗链,合法盗链成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值