zoukankan      html  css  js  c++  java
  • Linux-Nginx服务调优(下)

    目录(接上):

    6.来源访问控制

    7.FastCGI

    8.expires缓存


    9.gzip

    10.IP和301优化

    来源访问控制:

    这个需要ngx_http_access_module模块支持,不过,默认会安装

    [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf           //写法类似Apache

            location ~^/(xuegod)/{

            allow 192.168.1.0/24;

            deny all;

            }

     

     

    接着上面的实验,就可以访问了,下面是针对整个网站的写法,对/限制就OK

      location /{

            allow 192.168.1.0/24;

            deny all;

            }

    当然可以写IP,可以写IP段,但是注意次序,上下匹配

    同时,也可以通过if语句控制,给以友好的错误提示

            if($remote_addr = 192.168.1.38){

            return404;

            }

     

    FastCGI:

    Nginx没有配置factcgi,你使用nginx是一个失败的方法

    配置之前。了解几个概念:

    Cache:写入缓存区

    Buffer:读取缓存区

    Fastcgi是静态服务和动态服务的一个接口

    fastcgi_connect_timeout 300;    #指定链接到后端FastCGI的超时时间。

    fastcgi_send_timeout 300;       #FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间。

    fastcgi_read_timeout 300;       #指定接收FastCGI应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间。

    fastcgi_buffer_size 64k;        #指定读取FastCGI应答第一部分需要用多大的缓冲区,这个值表示将使用164KB的缓冲区读取应答的第一部分(应答头),可以设置为fastcgi_buffers选项指定的缓冲区大小。

    fastcgi_buffers 4 64k#指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求,如果一个php脚本所产生的页面大小为256KB,那么会分配464KB的缓冲区来缓存,如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于磁盘。一般这个值应该为站点中php脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“8 16K”“4 64k”等。

    fastcgi_busy_buffers_size 128k; #建议设置为fastcgi_buffer的两倍,繁忙时候的buffer

    fastcgi_temp_file_write_size 128k#在写入fastcgi_temp_path时将用多大的数据库,默认值是fastcgi_buffers的两倍,设置上述数值设置小时若负载上来时可能报502Bad Gateway

    fastcgi_cache gnix; #表示开启FastCGI缓存并为其指定一个名称。开启缓存非常有用,可以有效降低CPU的负载,并且防止502的错误发生,但是开启缓存也可能会引起其他问题,要很据具体情况选择

    fastcgi_cache_valid 200 302 1h; #用来指定应答代码的缓存时间,实例中的值表示将200302应答缓存一小时,要和fastcgi_cache配合使用

    fastcgi_cache_valid 301 1d;     #301应答缓存一天

    fastcgi_cache_valid any 1m;     #将其他应答缓存为1分钟

    fastcgi_cache_min_uses 1;       #请求的数量

    fastcgi_cache_path              #定义缓存的路径

     

    修改nginx.conf配置文件,在http标签中添加如下:

    fastcgi_connect_timeout 300;

    fastcgi_send_timeout 300;

    fastcgi_read_timeout 300;

    fastcgi_buffer_size 64k;

    fastcgi_buffers 4 64k;

    fastcgi_busy_buffers_size 128k;

    fastcgi_temp_file_write_size 128k;

    #fastcgi_temp_path /data/ngx_fcgi_tmp;

    fastcgi_cache_path /data/ngx_fcgi_cache   levels=2:2   #缓存路径,levels目录层次2级

    keys_zone=ngx_fcgi_cache:512m  #定义了一个存储区域名字,缓存大小

    inactive=1d max_size=40g;      #不活动的数据在缓存中多长时间,目录总大小

     

    在server location标签添加如下:

          location ~ .*.(php|php5)?$

          {

          fastcgi_pass 127.0.0.1:9000;

          fastcgi_index index.php;

          include fastcgi.conf;

          fastcgi_cache ngx_fcgi_cache;

          fastcgi_cache_valid 200 302 1h;

          fastcgi_cache_valid 301 1d;

          fastcgi_cache_valid any 1m;

          fastcgi_cache_min_uses 1;

          fastcgi_cache_use_stale error timeout invalid_header http_500;

          fastcgi_cache_key http://$host$request_uri;

          }

     

    fastcgi cache资料:

    官方文档:

    http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_cache

     

     expires缓存:

    缓存,主要针对于图片,css,js等元素更改机会比较少的情况下使用,特别是图片,占用带宽大,我们完全可以设置图片在浏览器本地缓存365d,css,js,html可以缓存个10来天,这样用户第一次打开加载慢一点,第二次,就非常快了!缓存的时候,我们需要将需要缓存的拓展名列出来!

    xpires缓存配置在server字段里面

    location ~.*.(gif|jpg|jpeg|png|bmp|swf)$

          {

          expires      3650d;

          }

    location ~.*.(js|css)?$

          {

          expires      30d;

          }

     

    同时也可以对目录及其进行判断:

    location ~^/(images|javascript|js|css|flash|media|static)/{

          expires 360d;

          }

    location ~(robots.txt){

          expires 7d;

          break;

          }

    expire功能优点

    (1)expires可以降低网站购买的带宽,节约成本

    (2)同时提升用户访问体验

    (3)减轻服务的压力,节约服务器成本,甚至可以节约人力成本,是web服务非常重要的功能。

    expire功能缺点:

    被缓存的页面或数据更新了,用户看到的可能还是旧的内容,反而影响用户体验。

    解决办法:

    第一个 缩短缓存时间,例如:1天,不彻底,除非更新频率大于1天

    第二个 对缓存的对象改名

    a.图片,附件一般不会被用户修改,如果用户修改了,实际上也是更改文件名重新传了而已

    b.网站升级对于js,css元素,一般可以改名,把css,js,推送到CDN。

    网站不希望被缓存的内容

    1)广告图片

    2)网站流量统计工具

    3)更新频繁的文件(google的logo)

      gzip:

    使用gzip压缩功能,可能为我们节约带宽,加快传输速度,有更好的体验,也为我们节约成本,所以说这是一个重点

    Nginx启用压缩功能需要你来ngx_http_gzip_module模块,apache使用的是mod_deflate

    一般我们需要压缩的内容有:文本,js,html,css,对于图片,视频,flash什么的不压缩,同时也要注意,我们使用gzip的功能是需要消耗CPU的!

    gzip on;        #开启压缩功能

    gzip_min_length  1k;    #设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length(内容长度)中获取,默认值是0,不管页面多大都进行压缩,建议设置成大于1K,如果小与1K可能会越压越大。

    gzip_buffers     432k;#压缩缓冲区大小,表示申请4个单位为32K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。

    gzip_http_version 1.1;#压缩版本(默认1.1,前端为squid2.5时使用1.0)用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可

    gzip_comp_level 9;  #压缩比例,用来指定GZIP压缩比,1压缩比最小,处理速度最快,9压缩比最大,传输速度快,但是处理慢,也比较消耗CPU资源。

    gzip_types  text/css text/xml application/javascript;   #用来指定压缩的类型,‘text/html’类型总是会被压缩。

    gzip_vary on;   #vary header支持,该选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过nginx压缩的数据

    那么配置压缩的过程中,会有一下参数

    gzip on;

    gzip_min_length  1k;

    gzip_buffers     432k;

    gzip_http_version 1.1;

    gzip_comp_level 9;

    gzip_types  text/css text/xml application/javascript;

    gzip_vary on;

     

     

    IP和301优化:

    有时候,我们发现访问网站的时候,使用IP也是可以得,我们可以把这一层给屏蔽掉,让其直接反馈给403,也可以做跳转

    跳转的做法:

    server {

            listen 80 default_server;

            server_name        localhost;

            rewrite ^ http://www.baidu.com$request_uri?;

    }

    403反馈的做法

    server {

            listen 80 default_server;

            server_name     localhost;

            return 403

    }

     

    301跳转的做法,如我们域名一般在解析的过程中,a.com一般会跳转到www.a.com

    301跳转的做法,如我们域名一般在解析的过程中,a.com一般会跳转到www.a.com

    server {

        listen       80;

        root        /usr/share/nginx/html/;

        server_name  www.a.com a.com;

                    if($host='a.com'){

                            rewrite ^/(.*)$ http://www.a.com/$1 permanent;

                            }

     

    错误页面的提示

    对于自定义的错误页面,我们只需要将errorpage写入到配置文件

     error_page   404  /404.html;

    防止DDOS攻击:

    通过使用limit_conn_zone进行控制单个IP或者域名的访问次数

    root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

    http字段中配置

       limit_conn_zone $binary_remote_addr zone=addr:10m;

    server的location字段配置

        location / {

                root   html;

                limit_conn addr 1;

    [root@vampire~]# ab -c 2 -t 1 http://192.168.1.63/xuegod/index.html

    [root@vampire~]#tail -n100 /usr/local/nginx/logs/access_log

     

     

  • 相关阅读:
    C#磁吸屏幕窗体类库
    准备
    我写的诗
    How to turn off a laptop keyboard
    How to tell which commit a tag points to in Git?
    Why should I care about lightweight vs. annotated tags?
    How to get rid of “would clobber existing tag”
    Facebook, Google and Twitter threaten to leave Hong Kong over privacy law changes
    The need for legislative reform on secrecy orders
    Can a foreign key be NULL and/or duplicate?
  • 原文地址:https://www.cnblogs.com/Vampire-MIn/p/13085069.html
Copyright © 2011-2022 走看看