美文网首页我爱编程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