常见Nginx中间架构:静态资源web服务;代理服务;负载均衡调度SLB;动态缓存。本文记录Nginx作为静态资源WEB服务的配置以及示例。
1、静态资源
Nginx作为WebServer可以接收客户端的静态资源的请求,然后通过静态资源的存储得到这些文件返回给客户端。常常用在对于静态资源的处理、请求、动静分离等场景。静态资源指非服务器动态运行生成的文件,包括HTML、CSS、JS、JPEG、GIF、PNG、FLV、MPEG、TXT等任意下载文件。
2、静态资源服务场景-CDN
请求静态资源常常用到CDN这项技术:北京的用户请求一个文件,假如文件放在了新疆,新疆离北京的距离比较远,直接请求的话延时很长。如果新疆有一个Nginx节点作为资源存储中心,分发给其他省的Nginx节点,北京的用户根据DNS就可以请求距离近的省份的Nginx的静态文件了。以下是简单的CDN架构图:
3、静态资源Web服务配置语法
Syntax:sendfile on | off;
Default:sendfile off;
Context:http,server,location,if in location
作用:开启sendfile
Syntax:tcp_nopush on | off;
Default:tcp_nopush off;
Context:http,server,location
作用:sendfile开启的情况下,提高网络包的传输效率,nopush不是立马把包推送给客户端,多个包整合后一次性发送出去。
Syntax:tcp_nodelay on | off;
Default:tcp_nodelay on;
Context:http,server,location
作用:在keepalive连接下,提高网络包的传输实时性。不等待,实时发送,要求实时性比较高的场景。
Syntax:gzip on | off;
Default:gzip off;
Context:http,server,location,if in location
作用:压缩传输,服务端压缩,浏览器端解压。
Syntax:gzip_comp_level level;
Default:gzip_comp_level 1;
Context:http,server,location
作用:控制压缩比
Syntax:gzip_http_version 1.0|1.1;
Default:gzip_http_version 1.1;
Context:http,server,location
作用:指定gzip的http协议版本
4、演示压缩与预读功能
http_gzip_static_module:预读gzip功能。假如读文件的/aaa.txt文件,开启了该功能会优先读/aaa.txt.gz文件
http_gunzip_module:应用支持gunzip的压缩方式,不支持gip的开启gunzip模块,基本用不到。
1)准备文件:
/opt/app/code/images/wei.png;
/opt/app/code/doc/access.txt(内容多些,方便看效果);
/opt/app/code/download/test.img;
2)新建:/etc/nginx/conf.d/static_server.conf
location ~ .*.(jpg|gif|png)$ { root /opt/app/code/images; } location ~ .*.(txt|xml)$ { root /opt/app/code/doc; } location ~ ^/download { tcp_nopush on; root /opt/app/code; }
分别定义了3个访问路径:
以 jpg、gif、png 结尾的文件访问 /opt/app/code/images;
以 txt、xml 结尾的访问 /opt/app/code/doc;
以 download 开头的访问 /opt/app/code;
检查语法并重新加载,测试:http://192.168.7.151/wei.png,图片239KB;http://192.168.7.151/access.txt,文本175KB;
cd到目录 /opt/app/code/download,执行压缩命令,现在该目录中只有 test.img.gz
[root@localhost download]# gzip ./test.img
测试:http://192.168.7.151/download/test.img,找不到文件
现在重新修改 /etc/nginx/conf.d/static_server.conf 文件
location ~ .*.(jpg|gif|png)$ { 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; root /opt/app/code/images; } location ~ .*.(txt|xml)$ { gzip on; gzip_http_version 1.1; gzip_comp_level 1; 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; root /opt/app/code/doc; } location ~ ^/download { gzip_static on; tcp_nopush on; root /opt/app/code; }
检查语法并重新加载,测试:http://192.168.7.151/wei.png,图片233KB;http://192.168.7.151/access.txt,文本23.5KB;
测试:http://192.168.7.151/download/test.img,能找到文件