nginx笔记(二)

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容