- 连接状态
- 随机主页
- 替换模块
- 文件读取
- 文件压缩
- 页面缓存
- 防盗链
1.连接状态:stub_status_module
1.1目的
展示用户和nginx链接数量信息。
1.2查询模块是否安装
nginx -V 2>&1 | grep stub_status --with-http_stub_status_module
1.3启动状态模块
(一)访问默认站点的状态模块 (状态模块未启用)
(二) 配置状态模块
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/UPLOADReading: 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 locationSyntax: gzip_comp_level level;
Default: gzip_comp_level 1;(1~9)
Context: http, server, locationSyntax: 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 locationepoch:指定“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 后面加的网址是白名单。