随机主页
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 再次盗链,合法盗链成功。