一.随机主页
微更新 random_index_module
1.目的:将主页设置成随机页面,是一种微调更新机制
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;
}
}
systemctl restart nginx
刷新主页,观察变化.注意隐藏文件并不会被随机选取
二.替换模块sub_module
1.目的:网页内容替换 —— 如果我们用模板生成网站的时候,因为疏漏或者别的原因造成代码不如意,但是此时因为文件数量巨大,不方便全部重新生成,那么这个时候我们就可以用此模块来暂时实现纠错。另一方面,我们也可以利用这个实现服务器端文字过滤的效果。
2.启动替换1
vim /etc/nginx/conf.d/default.conf 启动nginx默认页面
在server{下面插入
sub_filter nginx 'QianFeng';
sub_filter_once on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
替换模块 将nginx 替换成 QianFeng
单次替换 开启,重启服务,测试页面
将单次替换关闭,再次刷新页面,即可看见全文替换
sub_filter_once off
三.文件读取
文件读取
模块
统称
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
原理介绍
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;
}
默认启动,无需验证
四.文件压缩
1.原理介绍
启动该模块,使文件传输前进行压缩,提升传输效率。
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
3.启用模块
观察未压缩传输
cd /usr/share/nginx/html 主目录
rz 上传
拷贝tar包至网站主目录
tar cvf etc.html /etc 压缩包的后缀使用.html
拷贝文本至文件主目录
启用压缩功能
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对于静态文件的处理模块
systemctl restart nginx 重启
观察压缩传输 注意缓存 ,压缩包和图片类对象本身已经自带压缩功能。所以压缩比例较小低。文本类对象在压缩试验中,压缩比例体现优越。
五.页面缓存
1.模块
ngx_http_headers_module
expires起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求要配置expires,可以在http段中或者server段中或者location段中加入。Nginx(expires 缓存减轻服务端压力)。
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"的值
3.原理介绍
无缓存,每次访问服务器,均是全文传输。
开启缓存可以加速浏览网站。
4.启用缓存
观察浏览器缓存
开启浏览器缓存,浏览页面。(默认)
第一次返回状态码200.页面对象全文传输
第二次返回状态304.页面对象部分传输。
禁用缓存。浏览页面
返回码200.全文传输
理解浏览器缓存作用。
解析缓存原理
理解nginx服务器缓存
开启服务器缓存模块
vim /etc/nginx/nginx.conf
location / {
root /usr/share/nginx/html
index index.html index.htm;
expires 24h;
}
再次浏览页面,观察响应头中出现服务器回复的缓存时间
理解nginx服务器启动缓存时间,加速浏览。
缺点是时效性降低。
5.防盗链
模块
ngx_http_referer_module
语法
Syntax: valid_referers none | blocked | server_names | string …;
Default: —
Context: server, location
日志原理介绍
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模块可以控制这一点。防止非法盗链现象。
启动防盗链:展现盗链现象,启动防盗链
1) 搭建一个a.com网站
创建文件夹: mkdir /a.com
准备配置文件指向文件夹
vim /etc/nginx/conf.d/a.com.conf
server {
listen 80;
server_name a.com;
location / {
root /a.com;
index index.html ;
}
}
在主页中插入图片
vim /a.com/index.html
<img src='1.jpg' />
注意要将1.jpg图片拷贝至网站主目录。
加域名解析,重启nginx
2) 搭建一个b.com网站
创建b.com.conf配置文件
mkdir /b.com
vim /etc/nginx/conf.d/b.com.conf
server {
listen 80;
server_name b.com;
location / {
root /b.com;
index index.html ;
}
}
在主页中盗链A网站的图片
vim /b.com/index.html
<img src='http://A网站的域名或者地址/1.jpg' />
盗用链接
注意网站主目录中,根本没有图片。
重启nginx
3)访问两个网站页面。均能正常显示图片
4)分离日志
vim /etc/nginx/nginx.conf
记得把access改成你要分离网站日志的名,重启
日志不正常。日志莫名其妙的产生了。
观察referer字段,发现被盗链了。
日志正常。
5) 启动a.com防盗链功能
location / {
root /a.com;
index index.html index.htm;
valid_referers none blocked *.a.com;
if ($invalid_referer) {
return 403;
}
} 重启服务,再次访问b.com网站,盗链失败。
如果希望某些网站能够使用(盗链)资源:
生产环境
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;
}
}
6.连接状态 stub_status_module
目的:展示用户和nginx链接数量信息。
查询模块是否安装:nginx -V 2>&1 | grep stub_status
启动状态模块
- 访问默认站点的状态模块(注意:错误验证)
http://192.168.152.189/nginx_status 未启用 - 配置状态模块 vim /etc/nginx/conf.d/default.conf
server {请写在server内
location /nginx_status {
stub_status;
allow all;
}
} 启用该模块
- 重启服务再次访问
systemctl restart nginx
观察连接数 和请求数。
解释
Active connections: 22 当前活动的连接数
server accepts handled requests
服务器接受处理请求
17 17 24
17 总连接数connection(TCP)
TCP三次握手/四次断开
17 成功的连接数connection (TCP)
失败连接=(总连接数-成功连接数)
24 总共处理的请求数requests(HTTP)
connection 连接数,tcp连接
request http请求,GET/POST/DELETE/UPLOAD
Reading: 2 读取客户端Header的信息数 请求头
Writing: 1 返回给客户端的header的信息数 响应头
Waiting: 19 等待的请求数,开启了keepalive