Nginx缓存加速

 

【centos6.5】

一、Nginx缓存加速

1.0环境搭建:

1.0.1  nginx支持类似squid的缓存功能

    把URL以及相关信息当成key,用MD5编码哈希后,把数据文件保存在硬盘上。只能为指定的URL或者状态码设置过期时间,并不支持类似squid的purge命令来手动清除指定缓存页面。

    可通过第三方的ngx_cache_ourge来清除指定的URL缓存。

    Nginx的缓存加速功能是由proxy_cache和fastcgi_cache两个功能模块完成。

1.0.2  nginx缓存加速特点

      缓存功能也十分稳定,运行速度不逊于squid,对多核CPU的利用率比其他的开源软件也要好,支持高并发请求数,能同时承受更多的访问请求。

1.0.3  squid是一个高性能的代理缓存服务器,squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。

用途:用来缓冲internet数据

运行系统:windows,AIX,Digital Unix等

      Squid是一种用来缓冲internet数据的软件。它是这样实现其功能的,接收来自人们需要下载的目标(object)的请求并适当的处理这些请求。也就是说,如果一个人想下载一web页面,他请求squid为它取得这个页面。squid随之连接到远程服务器并向这个页面发出请求。然后,squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,squid可以简单地从磁盘中读到它,那样数据迅疾就会传输到客户机上。当前的squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其他类型的东西。

本案例通过nginx的代理功能实现对后端网站访问的缓存加速

Nginx  192.168.1.137  pcre  nginx  ngx_cache_purge

Web   192.168.1.136  httpd

1.1安装配置nginx缓存服务器

[root@nginx ~]# useradd -M -s /sbin/nologin nginx

[root@nginx ~]# mkdir /media/cdrom

[root@nginx ~]# umount /dev/sr0

[root@nginx ~]# mount /dev/sr0 /media/cdrom

mount: block device /dev/sr0 is write-protected, mounting read-only

[root@nginx ~]# cd /etc/yum.repos.d/

[root@nginx yum.repos.d]# mkdir a

[root@nginx yum.repos.d]# mv C* a/

[root@nginx yum.repos.d]# cp a/*M* ./

[root@nginx yum.repos.d]# sed -i '20 s/0/1/' CentOS-Media.repo

[root@nginx yum.repos.d]# yum -y clean all

[root@nginx yum.repos.d]# yum makecache

[root@nginx yum.repos.d]# cd

[root@nginx ~]# yum -y install pcre-devel zlib-devel gcc gcc-c++ nginx rewrite、正则表达功能依赖于pcre库】

[root@nginx ~]# ls

anaconda-ks.cfg     nginx-1.6.0.tar.gz          模板  文档  桌面

install.log         ngx_cache_purge-2.0.tar.gz

[root@nginx ~]# tar xf nginx-1.6.0.tar.gz  -C /usr/src/

[root@nginx ~]# tar xf ngx_cache_purge-2.0.tar.gz -C /usr/src/

[root@nginx ~]# cd /usr/src/ng

nginx-1.6.0/         ngx_cache_purge-2.0/

[root@nginx ~]# cd /usr/src/nginx-1.6.0/

[root@nginx nginx-1.6.0]#

[root@nginx nginx-1.6.0]#./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-pcre --add-module=/usr/src/ngx_cache_purge-2.0/ && make && make install

[root@nginx nginx-1.6.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

[root@nginx nginx-1.6.0]# cd /usr/local/nginx/conf/

[root@nginx conf]# cp nginx.conf{,.bak}

[root@nginx conf]# vim nginx.conf

user  nginx nginx;【以nginx用户和组运行】

worker_processes  1;【启动进程数,根据物理CPU个数设置】

error_log  logs/error.log  crit;【定义错误日志,级别为crit】

pid        logs/nginx.pid;【打开文件的最大句柄数,最好与ulimit -n的值保持一致,使用ulimit -SHn进行设置】

worker_rlimit_nofile 65535;

 

events {

        use epoll;【nginx使用了最新的epoll网络I/O模型】

    worker_connections  65535;【每个工作进程允许最大的同时连接数】

}

http {

    include       mime.types;【mime.types内定义各文件类型映像】

    default_type  application/octet-stream;【设置默认类型是二进制流,若没有设置,比如加载PHP时,是不预解析,用浏览器访问则出现下载窗口】

sendfile        on;【打开系统函数sendfile(),支持下载】

    tcp_nopush     on;【只有先打开Linux下的tcp_cork,sendfile打开时才有效】

 

    keepalive_timeout  65;【会话保持时间,设置低一些可以让nginx持续工作的时间更长】

        tcp_nodelay on;【不要缓存数据,而是一段一段的发送一一当需要及时发送数据时,就应该设置这个属性,这样发送一小块数据信息时就不能立即得到返回值】

        client_body_buffer_size 512k;【指定连接请求实体的缓存大小】

        proxy_connect_timeout 5;【代理连接超时时间,单位秒】

        proxy_read_timeout 60;【代理接收超时】

        proxy_send_timeout 5;【代理发送超时】

        proxy_buffer_size 16k;【代理缓存文件大小】

        proxy_buffers 4 64k;【代理缓存区的数量大小,默认一个缓冲区大小与页面大小相等】

        proxy_busy_buffers_size 128k;【高负荷下缓冲区大小】

        proxy_temp_file_write_size 128k;【代理临时文件大小】

        proxy_temp_path /var/cache/nginx/cache_temp;【代理临时文件存放目录】

        proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;【代理缓冲存放路径,第一层目录只有一个字符,是由levels=1:2设置,总共二层目录,子目录名字由而个字符组成,键值名称为cache_one(名字随意),在内存中缓存的空间大小为200MB,1天内没有被访问的缓存将自动清除,硬盘缓存空间为30GB】

【proxy_temp_path与proxy_cache_path指定的路径必须在同一分区】

        upstream backend_server {

        server 192.168.1.136:80 weight=1 max_fails=2 fail_timeout=30s;【上游服务器节点,权重1(数字越大权重越大),30秒内访问失败次数大于等于2次,将在30秒内停止访问此节点,30秒后技术器清零,可以重新访问】

        }

server {

        listen       80;

        server_name  www.amber.com 192.168.1.137;

        index index.html index.htm;

        charset utf-8;

 

        location / {

        proxy_next_upstream http_502 http_504 error timeout invalid_header;【如果后端服务器返回502、504、错误等错误,自动跳转到upstream负载均衡池中的另一台服务器,实现故障转移】

        proxy_cache cache_one;

        proxy_cache_valid 200 304 12h;【对不同的HTTP状态吗设置不同的缓存时间】

        proxy_cache_key $host$uri$is_args$args;【以域名、URI、参数组合成web缓存的key值,nginx根据key值哈希,存储缓存内容到二级缓存目录内】

        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-For $remote_addr;

        proxy_pass http://backend_server;【指定跳转服务器池,名字要与upstream设定的相同】

        expires 1d;

        }

        location ~ /purge(/.*){【用于清除缓存】

        allow 127.0.0.1;【设置允许清除缓存的主机IP或网段】

        allow 192.168.1.0/24;

        deny all;

        proxy_cache_purge cache_one $host$1$is_args$args;

        }

location ~ .*\.(php|jsp|cgi)?$ {【扩展名以php、jsp、cgi结尾的动态应用程序不缓存】

                proxy_set_header Host $host;

        proxy_set_header X-Forwarded-For $remote_addr;

        proxy_pass http://backend_server;

        }

        access_log off;

 

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

}

保存退出

[root@nginx conf]# mkdir /var/cache/nginx

[root@nginx conf]# ulimit -SHn 65535

[root@nginx conf]# nginx -t【此时会自动生成两个缓存目录,属组为nginx

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[root@nginx conf]# ll /var/cache/nginx/

总用量 8

drwx------. 2 nginx root 4096 5月   6 06:50 cache_temp

drwx------. 2 nginx root 4096 5月   6 06:50 proxy_cache

[root@nginx conf]# nginx

[root@nginx conf]# netstat -anpt|grep 80

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      5323/nginx         

tcp        0      0 192.168.1.137:22            192.168.1.1:8809            ESTABLISHED 2160/sshd

[root@nginx conf]# cd

[root@nginx ~]# vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

 [root@nginx ~]# service iptables restart

iptables:将链设置为政策 ACCEPT:filter                    [确定]

iptables:清除防火墙规则:                                 [确定]

iptables:正在卸载模块:                                   [确定]

iptables:应用防火墙规则:                                 [确定]

2、安装web服务器,建立测试页

[root@web ~]# rpm -qa httpd

httpd-2.2.15-29.el6.centos.x86_64

[root@web ~]# sed -n '276p' /etc/httpd/conf/httpd.conf

#ServerName www.example.com:80

[root@web ~]# sed -i '276 s/#//' /etc/httpd/conf/httpd.conf

[root@web ~]# sed -n '276p' /etc/httpd/conf/httpd.conf

ServerName www.example.com:80

[root@web ~]# /etc/init.d/httpd start

正在启动 httpd:                                           [确定]

[root@web ~]# netstat -anpt|grep 80

tcp        0      0 192.168.1.136:22            192.168.1.1:8807            ESTABLISHED 2165/sshd          

tcp        0      0 :::80                       :::*                        LISTEN      2765/httpd

[root@web ~]# echo 111 > /var/www/html/index.html

[root@web ~]# cat /var/www/html/index.html

111

[root@web ~]# service httpd restart

\停止 httpd:                                              [确定]

正在启动 httpd:                                           [确定]

[root@web ~]# vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

 [root@web ~]# service iptables restart

iptables:将链设置为政策 ACCEPT:filter                    [确定]

iptables:清除防火墙规则:                                 [确定]

iptables:正在卸载模块:                                   [确定]

iptables:应用防火墙规则:                                 [确定]

3、测试nginx缓存服务器

Nginx缓存加速_第1张图片

[root@nginx ~]# ll /var/cache/nginx/proxy_cache/

总用量 8

drwx------. 3 nginx nginx 4096 5月   6 07:13 1

drwx------. 3 nginx nginx 4096 5月   6 07:08 b

[root@nginx ~]# ls /var/cache/nginx/proxy_cache/

1/ b/

[root@nginx ~]# ls /var/cache/nginx/proxy_cache/1/1f/

1e4e7bc13dd12671a4c8c55296fc81f1

测试删除缓存文件

Nginx缓存加速_第2张图片

Nginx缓存加速_第3张图片

[root@nginx ~]# ls /var/cache/nginx/proxy_cache/1/1f/

[root@nginx ~]#

[root@nginx ~]# ls /var/cache/nginx/proxy_cache/b/bb/

[root@nginx ~]#

 

实验补充:

哈希值

哈希算法是将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且及其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上来说基本上是不可能的。消息身份验证代码(MAC)哈希函数通常与数字签名一起用于对数据的签名,而消息检测代码(MDC)哈希函数则用于数据完整性。

随机数生成:许多加密操作不可分割的组成部分

以便:使生成的秘钥很难再现

示例:哈希函数以确保数据完整性

URI

IMS用户的身份标识

URI(统一资源标识符)就是在IMS网络中IMS用户的“名字”,也就是IMS用户的身份标识。

中文名:统一资源标识符

外文名:Uniform Resource Identifier

IMS网络里的URI有TEL  URI和SIP   URI两种格式

TEL  URI的格式:“tel:”+tel格式的号码

SIP URI的格式:sip:+“用户名称@域名/IP地址端口”

 

你可能感兴趣的:(web服务篇)