美文网首页
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