Nginx优化
一、静态资源优化
1.静态资源
2.静态资源缓存
1.Etag:服务器上的文件唯一标示
2.Last-Modified:服务器上的文件最后修改时间
3.Expires:文件缓存过期时间
4.Cache-Control:文件多久过期
5.If-None-Match:浏览器上的文件唯一标示
6.If-Modified-Since:浏览器上的文件最后修改时间
1、配置缓存过期时间
# 模块 ngx_http_headers_module.html (默认开启的)
#语法
Syntax: expires [modified] time;
expires epoch | max | off;
Default: expires off;
Context: http, server, location, if in location
#配置
[root@web01 conf.d]# vim linux12.cache.com.conf
server {
listen 80;
server_name linux12.cache.com;
location ~* \.(png|jpg|gif)$ {
root /mm/cache;
expires 10d; # 此配置默认关闭了nginx 的 Expires 以及 Cache-Control
#这里打开是设置了 Expires 文件缓存10天,以及 Cache-Control 10天过期
# 默认10天之后缓存失效
}
}
[root@web01 mm]# mkdir /mm/cache
[root@web01 mm]# cd /mm/cache
[root@web01 cache]# rz
[root@web01 cache]# ll
-rw-r--r-- 1 www www 140135 Mar 27 18:32 8.png
## 授权
[root@web01 ~]# chown -R www.www /mm/index.html
## nginx -t检查并重启
[root@web01 ~]# systemctl restart nginx
# 配置本地hosts
10.10.0.7 linux12.cache.com
2、配置不走缓存
1.使用无痕模式
2.开启浏览器上面的 Disable cache # 右键点击检查/ Disable cache #选择这个
3.配置nginx关闭缓存
[root@web01 conf.d]# vim linux12.cache.com.conf
server {
listen 80;
server_name linux12.cache.com;
location ~* \.(png|jpg|gif)$ {
root /mm/cache;
etag off; #关闭服务器上的文件唯一标示,浏览器于服务器的 etag 对不上,就不会走这个缓存。
add_header Cache-Control no-cache; #请求头以及缓存关闭
if_modified_since off; #不开启浏览器上的 If-Modified-Since 文件最后修改时间,所以和服务器的 If-Modified 对不上
}
}
3.静态资源读取优化
#1. 文件高效读取
#高效传输,上nginx访问数据,就只需要在用户空间(应用程序)内进行,不需要通过内核空间传回给用户空间(CPU,硬件等).
'配置在'`/etc/nginx/nginx.conf`'的主配置文件里'
'在http层配置,默认为关闭,'`sendfile on;`'为开启 '
Syntax: sendfile on | off;
Default: sendfile off;
Context: http, server, location, if in location
# 2.文件高效传输
#将多个数据打个包,一次推送,大文件适合此配置,需要开启 sendfile
'配置在'`/etc/nginx/nginx.conf`'的主配置文件里'
'在http层配置,默认为关闭状态,'`tcp_nopush on;`'不过停老师说会变慢。。。'
Syntax: tcp_nopush on | off;
Default: tcp_nopush off;
Context: http, server, location
# 3.长连接
#开启长链接,这里的长链接是客户通过浏览器,访问服务器的网页。一次请求,可以有多次连接,在规定的时间内,可以不用建立TCP链接。
'配置在'`/etc/nginx/nginx.conf`'的主配置文件里'
'在http层配置,默认为开启状态'
Syntax: keepalive_timeout timeout [header_timeout];
Default: keepalive_timeout 75s;
Context: http, server, location
# 4.长连接传输
#来一条数据传输一条数据,需要开启 keepalive
'配置在'`/etc/nginx/nginx.conf`'的主配置文件里'
'在http层配置,默认为关闭状态,需要开启'`keepalive`',一般配这个'
Syntax: tcp_nodelay on | off;
Default: tcp_nodelay on;
Context: http, server, location
# 5.静态资源压缩
'静态资源压缩配置语法
#开启压缩
'配置在'`/etc/nginx/nginx.conf`'的主配置文件里'
'默认为关闭状态, '`gzip on;`'为开启静态资源压缩,需要和他嵌套的语法配合才有用。
Syntax: gzip on | off;
Default: gzip off;
Context: http, server, location, if in location
#指定压缩静态文件的类型,可指定多个
'最好配置在'`/etc/nginx/nginx.conf`'的主配置文件里。与'`gzip on; gzip_http_version 1.1;`'配合。
'表示需要进行压缩的文件类型。'`gzip_types image/jpeg image/gif image/png;`',表示对此服务的,jpg,gif,png,进行压缩。'
Syntax: gzip_types mime-type ...;
Default: gzip_types text/html;
Context: http, server, location
#指定压缩的级别,压缩比例
'最好配置在'`/etc/nginx/nginx.conf`'的主配置文件里。
''`gzip_comp_level 5;`',开启的压缩的恩济为5
Syntax: gzip_comp_level level;
Default: gzip_comp_level 1; #共1-9个级别,一般我们设置3-5
Context: http, server, location
#压缩后传输使用的协议
'最好配置在'`/etc/nginx/nginx.conf`'的主配置文件里。
'gzip_http_version 1.1;'
Syntax: gzip_http_version 1.0 | 1.1;
Default:
Context: http, server, location
## 珍贵的例子 --- r压缩配置
[root@web01 cache]# vim /etc/nginx/conf.d/linux12.gzip.com.conf
server {
listen 80;
server_name linux12.gzip.com;
location ~* \.(png|jpg|gif)$ {
root /mm/cache;
gzip on; #开启压缩
gzip_types image/jpeg image/gif image/png; #指定压缩文件的类型
gzip_comp_level 4; #指定压缩的级别,压缩比例
gzip_http_version 1.1; #压缩后传输使用的协议
}
location ~* \.txt$ {
root /mm/cache;
gzip on;
gzip_types text/plain;
gzip_comp_level 5;
gzip_http_version 1.1;
}
}
## 授权
[root@web01 ~]# chown -R www.www /mm/
## nginx -t检查并重启
[root@web01 ~]# systemctl restart nginx
# 配置本地hosts
10.10.0.7 linux12.gzip.com
二、防资源盗链
1.配置被盗连的网站
[root@web01 mm]# cat /etc/nginx/conf.d/linux12.beidaolian.com.conf
server {
listen 80;
server_name linux12.daolian.com;
# location ~* / { #两者都可以
location / {
root /mm;
index index.html;
}
}
#准备站点和文件
[root@web01 mm]# vim index.html
2021加油,被盗
## 授权
[root@web01 ~]# chown -R www.www /mm/
## nginx -t检查并重启
[root@web01 ~]# systemctl restart nginx
# 配置本地hosts
10.10.0.7 linux12.beidaolian.com
[root@web01 mm]# ll
total 996
-rw-r--r-- 1 www www 857244 Apr 11 19:36 404.png
-rw-r--r-- 1 www www 140135 Mar 27 18:32 8.png
http://linux12.beidaolian.com/404.png #这样的话可以看到404.png的图片了
2.配置盗链的网站
[root@lb01 conf.d]# vim linux12.daolian.com.conf
server {
listen 80;
server_name linux12.daolian.com;
location / {
root /mm;
index index.html;
}
}
#准备站点
[root@lb01 mm]# vim index.html
<html>
<body>
<img src="http://linux12.beidaolian.com/404.png"
</body>
</html>
## 授权
[root@web01 ~]# chown -R www.www /mm/
## nginx -t检查并重启
[root@web01 ~]# systemctl restart nginx
# 配置本地hosts
10.10.0.5 linux12.daolian.com
3.配置hosts访问测试
10.10.0.5 linux12.daolian.com
10.10.0.7 linux12.beidaolian.com
#windows访问
http://linux12.daolian.com/
4.配置防盗链
ngx_http_referer_module #模块
# 防盗链语法,
# 说白了就是判定,用户的请求,是否从自己的域名定位到这里。
Syntax: valid_referers none | blocked | server_names | string ...;
Default: —
Context: server, location
none #nginx日志中referer部分为空
blocked #nginx日志中referer部分没有协议
server_names #nginx日志中referer部分为指定的域名
string #nginx日志中referer部分为指定的域名(可以使用正则表达式)
## 配置域名查看 用curl linux12.daolian.com
[root@web01 nginx]# cat /etc/hosts
10.10.0.5 linux12.daolian.com
10.10.0.7 linux12.beidaolian.com
`# 案列
[root@web01 conf.d]# vim linux12.beidaolian.com.conf
server {
listen 80;
server_namelinux12.beidaolian.com;
location / {
root /mm;
index index.html;
}
location ~* \.jpg$ {
root /mm;
valid_referers none blocked server_names; #开启防盗链模块,判断域名不上来着自己网站则重定向到500.后端错误。
if ($invalid_referer) {
return 500;
}
}
}
6.伪造请求头
#模拟请求头为 http://linux12.daolian.com 访问图片
[root@lb01 ~]# curl -e "http://linux12.daolian.com" -I http://mm12.beidaolian.com/404.png
HTTP/1.1 500 Internal Server Error
Server: nginx/1.18.0
Date: Tue, 15 Dec 2020 02:51:41 GMT
Content-Type: text/html; charset=utf8
Content-Length: 177
Connection: close
#模拟请求头为 http://linux12.beidaolian.com 访问图片
[root@lb01 nginx]# curl -I http://linux12.beidaolian.com/404.png
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sun, 11 Apr 2021 14:22:41 GMT
Content-Type: image/png
Content-Length: 857244
Last-Modified: Sun, 11 Apr 2021 12:15:06 GMT
Connection: keep-alive
ETag: "6072e84a-d149c"
Accept-Ranges: bytes
7.允许多个域名盗链
[root@web01 conf.d]# vim linux12.beidaolian.com.conf
server {
listen 80;
server_name linux12.beidaolian.com;
location / {
root /mm;
index index.html;
}
location ~* \.jpg$ {
root /mm;
valid_referers none blocked server_names *.baidu.com;
if ($invalid_referer) {
return 500;
}
}
}
[root@lb01 ~]# curl -e "http://www.baidu.com" -I http://mm12.beidaolian.com/404.png
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sun, 11 Apr 2021 14:22:41 GMT
Content-Type: image/png
Content-Length: 857244
Last-Modified: Sun, 11 Apr 2021 12:15:06 GMT
Connection: keep-alive
ETag: "6072e84a-d149c"
Accept-Ranges: bytes