引言
- 静态资源WEB服务
- 代理服务
- 负载均衡调度器SLB
- 动态缓存
本文介绍Nginx的第一种使用场景----静态资源WEB服务。
静态资源WEB服务

1.静态资源类型
非服务器动态运行生成的文件
| 类型 | 种类 |
|---|---|
| 浏览器端渲染 | HTML、CSS、JS |
| 图片 | JPEG、GIF、PNG |
| 视频 | FLV、MPEG |
| 文件 | TXT等任意下载文件 |
2.静态资源服务场景-CDN
它是一个内容分发的逻辑型的网络。

下面重点介绍Nginx静态资源WEB服务核心配置语法和对应的作用
3.配置语法-文件读取
Syntax: sendfile on|off;
Default:sendfile off;
Context:http,server,location.if in location;
引读:--with-file-aio异步文件读取,据说没有太多的作用。
Syntax: tcp_nopush on|off;
Default:;tcp_nopush off;
Context:http,server,location;
作用:sendfile开启的情况下,提高网络包的传输效率。
Syntax: tcp_nodelay on|off;
Default:;tcp_nodelay on;
Context:http,server,location;
数据包尽量的不要等待,实时的发送给用户。
作用:keepalive连接下,提高网络包的传输实时性。
压缩
Syntax: gzip on|off;
Default:;gzip on;
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;
扩展Nginx压缩模块
http_gzip_static_module -预读gzip功能
http_gunzip_moudle-应用支持gunzip的压缩方式(使用的较少)
示例内容:配置一份HTTP静态资源web服务器
server {
listen 80;
server_name www.gongxu8023.xin;
sendfile on;
#charset koi8-r;
access_log /var/log/nginx/static_access.log main;
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/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/gif image/png;
root /opt/app/code/doc;
}
location ~ ^/download {
gzip_static on;
tcp_nopush on;
root /opt/app/codel;
}
# 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;
}
}
gzip压缩算法对于文本的压缩效率是最高的(比起对图片的压缩)
浏览器缓存
web资源服务的另外一项功能就是浏览器的缓存。
HTTP协议定义的缓存机制(如:Expires;Cache=control等)


校验过期机制
| 校验是否过期 | Expires、Cache-Control(max-age) |
| 协议中Etag头信息校验 | Etag |
| Last-Modified头信息校验 | Last-Modified |

配置语法:expires
nginx中会设置一个expires属性,其实就是对http返回给客户端的response里面的头信息添加Cache-Control、Expires头。
Syntax:expires [modified] time;
expires epoch|max|off;
Default:expires off;
Context:http,server,location,if in location;
示例:
location ~ .*/.(html|htm)${
#expires 24h;
root opt/app/code
}
跨域访问
Nginx作为静态服务器的再一个功能:跨域访问。

为什么浏览器禁止跨域访问?
- 不安全,容易出现CSRF攻击

但是由于某些原因,企业通常会存在多个域名,所以有跨站访问的需求,Nginx怎么做?
Syntax:add_header name value [always];
Default:--;
Context:http,server,location,if in location;
Acess-Control-Allow-Origin
通常返回给客户 端的response的头信息中包含一个信息Acess-Control-Allow-Origin,意思是此站允许站外访问。因此add_header的name为Acess-Control-Allow-Origin,而它的value为允许站外访问的域名或ip地址信息。
示例:
location ~ .*/.(htm|html)${
add_header Access-Control-Allow-Origin http://jesonc.com;
add_header Access-Control-Allow-Methodd GET,POST,PUT,DELETE,OPTIONS;
root /opt/app/code;
}
防盗链
目的:防止资源被盗用
防盗链设置思路:
- 首要方式:区别哪些请求是非正常的用户请求。
基于http_refer防盗链配置模块
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/gif image/png;
valid_referers none blocked 116.62.103.228;
if($invalid_referer){
return 403;
}
root /opt/app/code/images;
}