美文网首页
nginx笔记(二)

nginx笔记(二)

作者: 蜡笔没了小新_e8c0 | 来源:发表于2019-06-30 14:36 被阅读0次

    1 文件读取

    Syntax:sendfile on | off;
    Default:sendfile off;
    Context:http,server,location.if in location

    1.1

    Syntax:tcp_nopush on | off;
    Default:tcp_nopush off;
    Context:http,server,location

    作用:sendfile开启的情况下,提高网络包的传输效率。

    1.2

    Syntax:tcp_nodelay on | off;
    Default:tcp_nodelay off;
    Context:http,server,location

    作用:keepalive连接下,提高网络包的传输实时性。

    2 文件压缩

    Syntax:gzip on | off;
    Default:gzip off;
    Context:http,server,location,if in location;

    作用:压缩传输

    2.1 压缩级别

    Syntax:gzip_comp_level level;
    Default:gzip_comp_level 1;
    Context:http,server,location

    2.2 控制gzip版本

    Syntax:gzip_http_version 1.0|1.1;
    Default:gzip_http_version 1.1;
    Context:http,server,location

    3 扩展Nginx压缩模块

    • http_gzip_static_module : 预读gzip功能
    • http_gunzip_module : 应用支持gunzip的压缩方式

    4 实例

    • 在/etc/nginx/conf.d/下创建一个static_server.conf文件
    • 修改内容如下:
    server {
        listen       81;
        server_name  localhost;
    
        sendfile on;
    
        #charset koi8-r;
        #access_log  /var/log/nginx/host.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/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;
       }
    
    }
    
    • 在/opt/app/code/images下放置一张图片

    • 通过“IP:81/图片名称”的方式访问图片


      测试结果
    • 修改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/jpg image/jpeg image/gif image/png;
            root /opt/app/code/images;
        }
    
    
    测试结果

    发现图片大小只少了18KB(gzip主要是对文本进行压缩)。

    • 测试文本的压缩变化,在/opt/app/code/doc防止一个txt文件,并通过网址进行访问


      测试压缩
    • 修改static_server.conf

        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;
        }
    
    QQ图片20190629161523.png

    从237KB压缩到了1.7KB。

    5 Nginx缓存

    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;
        }
    

    6 Nginx跨站访问

    Syntax:add_header name value [always];
    Default:—
    Context:http,server,location,if in location

    • Access-Control-Allow-Origin
    • Access-Control-Allow-Methods

    7 防盗链

    Syntax:valid_referers none | blocked | server_names | string ...;
    Default:—
    Context:server,location

    none:允许没有http_refer的请求访问资源
    block:允许不是http://开头的,不带协议的请求访问资源

    • 示例
            valid_referers none blocked 203.195.133.72;
            if ( $invalid_referer ) {
                return 403; 
            }
    

    8 代理

    Syntax:proxy_pass URL
    Default:—
    Context:location,if in location,limit_except

    • 示例:
      proxy_pass http://localhost:8888;
    

    9 负载均衡

    9.1 示例

    • 首先监听三个端口
    server {
        listen       91;
        server_name  localhost;
    
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
    
        location / {
            root   /opt/app/code;
            index  index.html index.htm;
        
    
    • 创建负载均衡配置文件:
        upstream ljc{
            server 203.195.133.72:91;
            server 203.195.133.72:92;
            server 203.195.133.72:93;
        }
    server {
        listen       84;
        server_name  localhost;
    
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
    
        location / {
            proxy_pass http://ljc;
        }
    
        #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;
        }
    
    • 重启服务
    • 访问IP:84,发现会以轮询的方式切换页面。

    9.2 upstream参数

    • down:当前的server暂时不参与负载均衡
    • backup:预留的备份服务器
    • max_fails:允许请求失败的次数
    • fail_timeout:经过max_fails失败后,服务暂停的时间
    • max_conns:限制最大的接收的连接数

    9.3调度算法

    • 轮询:按时间顺序逐一分配到不同的后端服务器
    • 加权轮询:weight值越大,分配到的访问几率越高
    • ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP的固定访问一个后端服务器
    • url_hash:按照访问的URL的hash结果来分配请求,使每一个URL定向到同一个后端服务器
    • least_conn:最少链接数,哪个机器连接数少就分发
    • hash关键数值:hash自定义的key

    ip_hash是基于remote_addr的,所以有些代理的请求无法确定实际的Ip地址。

    9.4 缓存

    Syntax:porxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time],
    Default:—
    Context:http

    Syntax:proxy_cache zone | off;
    Default:proxy_cache off;
    Context:http,server,location

    缓存的时间
    Syntax:proxy_cache_valid [code ...] time;
    Default:—
    Context:http,server,location

    缓存的维度
    Syntax:proxy_cache_key String;
    Default:proxy_cache_key schemeporxy_host$request_uri;
    Context:http,server,location

    • 示例:
    
        upstream ljc2{
            server 203.195.133.72:91;
            server 203.195.133.72:92;
            server 203.195.133.72:93;
        }
        proxy_cache_path /opt/app/cache levels=1:2 keys_zone=imooc_cache:10m max_size=10g inactive=60m use_temp_path=off;
    server {
        listen       85;
        server_name  localhost;
    
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
    
        location / {
            proxy_cache imooc_cache;
            proxy_pass http://ljc2;
            proxy_cache_valid 200 304 12h;   #如果返回状态是200或者是304则缓存12小时
            proxy_cache_valid any 10m;    #其余缓存10分钟
            proxy_cache_key $host$uri$is_args$args;     #设置缓存key
            add_header Nginx-Cache "$upstream_cache_status";
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;   #如何符合以上情况会转发到另一个upstream
        }
    
        #error_page  404              /404.html;
    
    

    9.5 补充

    • 如何清理指定缓存?
      1.rm -rf缓存目录内容
      2.第三方扩展模块ngx_cache_purge

    • 如何让部分页面不缓存

    Syntax:proxy_no_cache string...;
    Default:—
    Context:http,server,location

    相关文章

      网友评论

          本文标题:nginx笔记(二)

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