nginx常见使用场景
- 静态资源web服务
- 代理服务
- 负载均衡调度器slb
- 动态缓存
静态资源web服务
一,静态资源类型:非服务器动态运行生成的文件
浏览器端渲染文件(html js css),图片,视频,文件等
二,静态资源服务场景-cdn
//配置语法
Syntax:sendfile on | off;
Default:sendfile off;
Context:http,server,location,if in location
//参考 -with-file-aio 异步文件读取 类似功能
//语法 该配置是在sendfile开启的情况下,提高网络包的传输的效率,原理是将多个包,等待攒集起来,一次性的发送出去,提高传输的效率
Syntax:tcp_nopush on | off;
Default:tcp_nopush off;
Context:http,server,location
//与tcp_nopush相反,及时不等待立马发送出去,要求实时性要求搞的场景;必须在 keepalive连接下,提高网络包的传输实时性
Syntax:tcp_nodelay on | off;
Default:tcp_nodelay on;
Context:http,server,location
//配置压缩可以节省带宽等 作用 压缩传输
Syntax:gzip on |off;
Defautl:gzip off;
Context:http,server,location,if in location
//压缩比
Syntax:gzip_comp_level level;
Default:gzip_comp_level 1;
Context:http,server,location
//配置gzip http协议的版本
Syntax:gzip_http_version 1.0|1.1;
Default:gzip_http_version 1.1;
Context:http,server,location
http_gzip_static_module
作用:预读gzip功能,gzip会将一个文件进行预压缩,在有请求的时候,直接将预压缩的文件返回,节省cpu的压缩时间,和请求时间。
http_gunzip_module
作用:应用支持gunzip的压缩方式,解决部分浏览器,不支持gzip压缩的方式,使用gunzip的方式,场景比较少.
配置示例:
server {
listen 80;
server_name 192.168.9.1 www.applelife.com;
#开启静态文件处理强能力
sendfile on;
#charset koi8-r;
#配置请求日志
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#图片等 访问的url是以jpg,png等图片结尾的url 匹配该目录 www.applelife.xyx/my.jpg
location ~.*\.(jpg|gif|png)${
#开启gzip
#gzip on;
#指定gzip http的版本
#gzip_http_version 1.1;
#指定gzip压缩比
#gzip_comp_level 2;
#指定需要压缩的格式
#gzip_types text/pain application/javascript application/x-javascript text/css/application/xml text/javascript application/x-http-php image/jpeg image/gif image/png;
root /opt/app/code/images;
}
#文档等 访问url 是已.txt ,xml结尾的 url 匹配该目录 www.applelife.xyx/my.txt
location ~ .*\.(txt|xml)${
#开启gzip
#gzip on;
#指定gzip http的版本
#gzip_http_version 1.1;
#指定gzip压缩比
#gzip_comp_level 2;
#指定需要压缩的格式
#gzip_types text/pain application/javascript application/x-javascript text/css/application/xml text/javascript application/x-http-php image/jpeg image/gif image/png;
root /opt/app/code/doc;
}
#文件等 url 是以 downlaod开头的 url匹配该规则 www.applelife.xyx/download/test.img 没有文件可以使用 gzip 文件全名 进行压缩
location ~^/download{
#gzip 文件的预读功能
gzip_static on;
#及时发送给出去
tcp_nopush on;
root /opt/app/code
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
浏览器本地缓存校验过期机制
- 校验是否过期 Expires(http1.0版本) ,Cache-Control(max-age)(http1.1版本)定义一个周期,定义本地缓存在多久是的时间内过期
- 协议中Etag头信息校验 Etag ,在本地缓存过期之后,校验etag是否过期,以字符串进行标识,常常优先校验
- Last-Modified头信息校验 Last-Modified:跟服务器本地文件时间戳校验,有更新,就行更新 传递的具体是时间格式
优先级为:Expires,Cache-Control ->Etag -> Last-Modified
image
配置缓存
添加 Cache-Control,Expires头;有些浏览器会更改这个规则, 自动添加 Cache-Control:max-age=0 每次都请求!
Syntax:expires [modified] time;
exprires epoch | max | off;
Default:expires off;
Context:http,server,location,if in location
//配置示例,所有的html,htm结尾的请求 缓存时间24h
location ~.*\.(htm|html)${
expires 24h;
root /opt/app/code;
}
跨域访问
不安全,容易出现csrf攻击,跨站式攻击
某些实际需求,需要打开跨域访问
//配置跨域访问
Syntax:add_header name value [always];
Default:-
Context:http,server,location,if in location
//http请求头,是否允许跨域访问
Access -Control -Allow -Origin
//示例
location ~.*\.(htm | html) ${
add_header Access-Control-Allow Origin http://www.baidu.com;
#允许所有的站点进行跨域访问
#add_header Access-Control-Allow Origin *;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
root /opt/app/code
}
防盗链
区分那些是正常的请求用户
配置 http_refer防盗链配置模块
//语法 允许那些 referers 信息过来访问,允许没有 referers信息过来访问,允许referers不是标准信息过来访问,只允许指定地址访问过来的访问
Syntax:valid_referers none | blocked |server_names | string ...;
Default:-
Context:server,location
//示例
location~.*\.(.jpg|gif|png)${
#指定地址的才可以访问,匹配规则
valid_referers none blocked 192.168.33.3 ~/google\./;
if ($invalid_referer){
return 403;
}
root /opt/app/code/images;
}
其他命令:
//使用gzip 对文件进行压缩 格式为test.img.gz
gzip ./test.img
网友评论