再回首之Nginx(五)静态资源WEB服务


引言

  • 静态资源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攻击
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;
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容