美文网首页我爱编程nginx
Nginx常见使用场景-WEB服务(四)

Nginx常见使用场景-WEB服务(四)

作者: andpy | 来源:发表于2018-05-25 08:58 被阅读32次

    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
    

    相关文章

      网友评论

        本文标题:Nginx常见使用场景-WEB服务(四)

        本文链接:https://www.haomeiwen.com/subject/rlhyjftx.html