当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪nginx中配置proxy_cache使用内存的方法      nginx用作反向代理,可以缓存代理的内容,配置如下:   代码如下: proxy_cache_path /data/nginx_cache/ levels=1:2 keys_zone=cache0:10m; proxy_temp_path /data/nginx_cache_tmp/; proxy_buffer_size 8k; proxy_buffering on; proxy_.........
    ▪学习nginx的proxy_cache指令      1 proxy_cache 语法:proxy_cache zone_name; 默认值:None 使用字段:http, server, location 设置一个缓存区域的名称,一个相同的区域可以在不同的地方使用。 在0.7.48后,缓存遵循后端的”Expires”, “C.........
    ▪nginx反向代理与varnish缓存配置      一、Nginx 反向代理 1、 安装条件: Nginx: http://sysoev.ru/nginx/nginx-0.6.32.tar.gz SSL: http://www.openssl.org/source/openssl-0.9.8g.tar.gz Pcre: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.7.tar.gz Zlib: http://www.zl.........

[1]nginx中配置proxy_cache使用内存的方法
    来源: 互联网  发布时间: 2013-12-24

nginx用作反向代理,可以缓存代理的内容,配置如下:
 

代码如下:
proxy_cache_path /data/nginx_cache/ levels=1:2 keys_zone=cache0:10m;
proxy_temp_path /data/nginx_cache_tmp/;
proxy_buffer_size 8k;
proxy_buffering on;
proxy_buffers 8 8k;
proxy_cache cache0;
proxy_cache_key “$host$uri$is_args$args”;
proxy_cache_valid 1s;

nginx本身不提供缓存到内存的功能,不过可以通过使用技巧来做,就是利用/dev/shm – 虚拟内存。

首先确认/dev/shm是否被mount了,df命令可以看到一行:
tmpfs 8215004 16 8214988 1% /dev/shm,这台linux是16G内存,所以一半就是8G
使用上说,跟普通磁盘无区别,先创建目录:
 

代码如下:
mkdir /dev/shm/nginx_cache;
mkdir /dev/shm/nginx_cache_tmp;

再mount到一个硬盘目录,由于不是块设置,需要用bind参数:
 

代码如下:
mount –bind /dev/shm/nginx_cache /data/nginx_cache;
mount –bind /dev/shm/nginx_cache_tmp /data/nginx_cache_tmp;
 

再mount看一下,会有下面几行:
 

代码如下:
tmpfs on /dev/shm type tmpfs (rw)
/dev/shm/nginx_cache on /data/nginx_cache type none (rw,bind)
/dev/shm/nginx_cache_tmp on /data/nginx_cache_tmp type none (rw,bind)
 

相当于实现了将代理内容缓存到内存,提高了响应速度。


    
[2]学习nginx的proxy_cache指令
    来源: 互联网  发布时间: 2013-12-24

1 proxy_cache
语法:proxy_cache zone_name;
默认值:None
使用字段:http, server, location
设置一个缓存区域的名称,一个相同的区域可以在不同的地方使用。
在0.7.48后,缓存遵循后端的”Expires”, “Cache-Control: no-cache”, “Cache-Control: max-age=XXX”以及其他等。然而,目前nginx会忽略一些缓存控制指令,如:”private”和”no-store”,同样,nginx在缓存过程中不会处理”Vary”头,为了确保一些私有数据不被所有的用户看到,后端必须设置 “no-cache”或者”max-age=0″头,或者proxy_cache_key包含用户指定的数据如$http_cookie_xxx,在proxy_cache_key中使用一部分cookie的值可以防止缓存私有数据,所以可以分别指定location以便分开私有数据和公有数据。
缓存指令依赖代理缓冲区(buffers),如果proxy_buffers设置为off,缓存不会生效。

2 proxy_cache_key
语法:proxy_cache_key line;
默认值:$scheme$proxy_host$request_uri;
使用字段:http, server, location
指令指定了包含在缓存中的缓存关键字。
 

代码如下:
proxy_cache_key "$host$request_uri$cookie_user";
proxy_cache_key "$scheme$host$request_uri";

3 proxy_cache_path
语法:proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];
默认值:None
使用字段:http
指令指定缓存的路径和一些其他参数,缓存的数据存储在文件中。缓存的文件名和key为代理URL的MD5 码。levels参数指定缓存的子目录数,例如:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;

文件名类似于:
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
所有活动的key和元数据存储在共享的内存区域中,这个区域用keys_zone参数指定,如果在inactive参数指定的时间内缓存的数据没有被请求则被删除,默认inactive为10分钟。
cache manager进程控制磁盘的缓存大小,在max_size参数中定义,超过其大小后最少使用数据将被删除。
区域的大小按照缓存页面数的比例进行设置,一个页面(文件)的元数据大小按照操作系统来定,FreeBSD/i386下为64字节,FreeBSD/amd64下为128字节,当区域满了以后key将按照LRU(最近最少使用算法)进行处理。
proxy_cache_path和proxy_temp_path应该使用在相同的文件系统上。

4 proxy_cache_methods
语法:proxy_cache_methods [GET HEAD POST];
默认值:proxy_cache_methods GET HEAD;
使用字段:http, server, location
GET/HEAD用来装饰语句,即你无法禁用GET/HEAD即使你只使用下列语句设置:
proxy_cache_methods POST;

5 proxy_cache_min_uses
语法:proxy_cache_min_uses the_number;
默认值:proxy_cache_min_uses 1;
使用字段:http, server, location
多少次的查询后应答将被缓存,默认1。

6 proxy_cache_valid
语法:proxy_cache_valid reply_code [reply_code ...] time;
默认值:None
使用字段:http, server, location
为不同的应答设置不同的缓存时间,例如:
 

代码如下:
proxy_cache_valid  200 302  10m;
  proxy_cache_valid  404      1m;
  proxy_cache_valid  5m;
  proxy_cache_valid  200 302 10m;
  proxy_cache_valid  301 1h;
  proxy_cache_valid  any 1m;

7 proxy_cache_use_stale
为了防止缓存失效(在多个线程同时更新本地缓存时),你可以指定’updating’参数,它将保证只有一个线程去更新缓存,并且在这个线程更新缓存的过程中其他的线程只会响应当前缓存中的过期版本。

代码及configure配置:
在ngx_http_proxy_module.c里面定义了每个指令的钩子(即callback),它们在读取配置文件时会被调用。在configure的时候只需要把“HTTP_CACHE”设置为YES(可以找到auto/options里面HTTP_CACHE那行)。“proxy_cache_purge”指令需要下载nginx add-ons里面的“Cache Purge”模块,并在configure的时候用"--add-module="来加载代码。

配置文件例子:
 

代码如下:
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  65;
    tcp_nodelay on;
    proxy_temp_path  /data/proxy_temp_path;
    proxy_cache_path /data/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
    upstream haha {
  server 127.0.0.1:8001 weight=2;
  server 10.10.10.57    weight=1;
    }
    server {
        listen       80;
        server_name  www.;
location ~ \.html$ {
             proxy_pass http://127.0.0.1:8002;
}
        location / {
             proxy_cache cache_one;          
             proxy_cache_valid 200 304 12h;  
             proxy_cache_valid 301 302 1m;
             proxy_cache_valid any 1m;
             proxy_cache_key $host$uri$is_args$args;
             proxy_pass http://haha;
            }
      location ~ /purge(/.*)
           {
             allow       127.0.0.1;
             allow       10.10.10.67;
             deny        all;
             proxy_cache_purge    cache_one   $host$1$is_args$args;
           }
     }

    
[3]nginx反向代理与varnish缓存配置
    来源: 互联网  发布时间: 2013-12-24

一、Nginx 反向代理
1、 安装条件:
Nginx: http://sysoev.ru/nginx/nginx-0.6.32.tar.gz
SSL: http://www.openssl.org/source/openssl-0.9.8g.tar.gz
Pcre: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.7.tar.gz
Zlib: http://www.zlib.net/zlib-1.2.3.tar.gz

2、 安装:
Ssl安装:
 

代码如下:
[root@RedhatAS4U4-Oracle oracle]# tar -zxvf openssl-0.9.8g.tar.gz
[root@RedhatAS4U4-Oracle oracle]# cd openssl-0.9.8g
[root@RedhatAS4U4-Oracle openssl-0.9.8g]#./config --prefix=/usr/local/openssl/
[root@RedhatAS4U4-Oracle openssl-0.9.8g]# make
[root@RedhatAS4U4-Oracle openssl-0.9.8g]# make install

Pcre 安装:
 

代码如下:
[root@RedhatAS4U4-Oracle oracle]# tar -zxvf pcre-7.7.tar.gz
[root@RedhatAS4U4-Oracle oracle]# cd pcre-7.7
[root@RedhatAS4U4-Oracle pcre-7.7]# ./configure --prefix=/usr/local/pcre
[root@RedhatAS4U4-Oracle pcre-7.7]# make
[root@RedhatAS4U4-Oracle pcre-7.7]# make install

Make 时报错:
libtool: ignoring unknown tag CXX
libtool: unrecognized option `-DHAVE_CONFIG_H'
Try `libtool --help' for more information.
make[1]: *** [pcrecpp.lo] Error 1
make[1]: Leaving directory `/home/beijing/pcre-7.7'
make: *** [all] Error 2

原因:
pcre-7.7 configuration summary:
    Install prefix .................. : /usr/local/pcre
    C preprocessor .................. : gcc -E
    C compiler ...................... : gcc
    C++ preprocessor ................ :
    C++ compiler .................... :
    Linker .......................... : /usr/bin/ld
    C preprocessor flags ............ :
    C compiler flags ................ : -O2
    C++ compiler flags .............. :
    Linker flags .................... :
    Extra libraries ................. :

没有装GCC C++包:
gcc-c++-3.4.6-8.i386.rpm libstdc++-devel-3.4.6-8.i386.rpm

Zlib 安装:
 

代码如下:
[root@RedhatAS4U4-Oracle oracle]# tar -zxvf zlib-1.2.3.tar.gz
[root@RedhatAS4U4-Oracle oracle]# cd zlib-1.2.3
[root@RedhatAS4U4-Oracle zlib-1.2.3]#
[root@RedhatAS4U4-Oracle zlib-1.2.3]# make
[root@RedhatAS4U4-Oracle zlib-1.2.3]# make install

Nginx 安装:
 

代码如下:
[root@RedhatAS4U4-Oracle oracle]# tar -zxvf nginx-0.6.32.tar.gz
[root@RedhatAS4U4-Oracle oracle]# cd nginx-0.6.32
[root@RedhatAS4U4-Oracle nginx-0.6.32]# ./configure  --prefix=/usr/local/nginx --with-http_ssl_module --with-pcre=/root/pcre-7.7 --with-zlib=/root/zlib-1.2.3 --with-http_stub_status_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-openssl=/root/openssl-0.9.8g
[root@RedhatAS4U4-Oracle nginx-0.6.32]# make
[root@RedhatAS4U4-Oracle nginx-0.6.32]# make install

3、配置:
[root@RedhatAS4U4-Oracle oracle]# cat /usr/local/nginx/conf/nginx.conf
 

代码如下:

user  nobody nobody;
worker_processes  30;
error_log  logs/error.log notice;
pidlogs/nginx.pid;
events {
use epoll;
worker_connections      40960;
 }

http {
 include       mime.types;
 default_type  application/octet-stream;
 log_format main  '$remote_addr - $remote_user [$time_local] '
 '"$request" $status $bytes_sent '
 '"$http_referer" "$http_user_agent" '
 '"$gzip_ratio"';
 keepalive_timeout  150;
 server_names_hash_bucket_size  64;

upstream cache {
 ip_hash;
 server 10.167.26.166:8080;   //varnish server 1
 server 10.167.26.3;
  }

server {
 listen  10.167.26.5:80;
 server_name    cacti.;
 access_log  logs/cacti.wizardial.com.access.log  main;
 location / {
   proxy_pass      http://cache;
   proxy_redirecthttp://cacti./ /;
   proxy_set_headerHost $host;
   proxy_set_headerX-Real-IP $remote_addr;
   proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_headerX-Is-EDU  0;

client_max_body_size 50m;
client_body_buffer_size 256k;
proxy_connect_timeout 10;
proxy_send_timeout 15;
proxy_read_timeout 15;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}

server {
 listen  10.167.26.5:81;
 server_name nginxstatus. 10.167.26.5;
 location /NginxStatus {
    stub_status on;
    access_log   off;
    allow   210.22.7.147;
    allow    127.0.0.1;
    deny all;
 }
}
}
 

以上配置为nginx 做反向代理,监听10.167.26.5:80的IP,接收cacti.wizardial.com 的域名请求,转发到后端varnish缓存服务器。

4、 优化:
修改open files数

显示open files数
[root@RedhatAS4U4-Oracle oracle]# ulimit -a
core file size  (blocks, -c) 0
data seg size   (kbytes, -d) unlimited
file size  (blocks, -f) unlimited
pending signals    (-i) 1024
max locked memory       (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
……

修改open files数
 

代码如下:
[root@RedhatAS4U4-Oracle oracle]# ulimit -n 8192
 

 
优化Linux内核参数
[root@RedhatAS4U4-Oracle oracle]# vi /etc/sysctl.conf

在末尾增加以下内容:
 

代码如下:
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000    65000

使配置立即生效:
 

代码如下:
[root@RedhatAS4U4-Oracle oracle]# /sbin/sysctl -p

不停止Nginx服务的情况下平滑变更Nginx配置
 

代码如下:
[root@RedhatAS4U4-Oracle oracle]# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

二、Varnish 缓存
Varnish优点:
  1、Varnish采用了“Visual Page Cache”技术,在内存的利用上,Varnish比Squid具有优势,它避免了Squid频繁在内存、磁盘中交换文件,性能要比Squid高。
  2、Varnish的稳定性非常好
  3、通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存,这一点是Squid不能具备的。

Varnish网站缓存加速器安装:
1、创建www用户和组,以及Varnish缓存文件存放目录(/var/InfiNET/cache):
 

代码如下:
[root@RedhatAS4U4-Oracle oracle]# /usr/sbin/groupadd www -g 48
[root@RedhatAS4U4-Oracle oracle]# /usr/sbin/useradd -u 48 -g www www
[root@RedhatAS4U4-Oracle oracle]# mkdir -p /var/InfiNET/cache
[root@RedhatAS4U4-Oracle oracle]# chmod +w /var/InfiNET/cache
[root@RedhatAS4U4-Oracle oracle]# chown -R www:www /var/InfiNET/cache

2、创建Varnish日志目录(/var/logs/):
 

代码如下:
[root@RedhatAS4U4-Oracle oracle]# mkdir -p /usr/local/varnish/logs
[root@RedhatAS4U4-Oracle oracle]# chmod +w /usr/local/varnish/logs
[root@RedhatAS4U4-Oracle oracle]# chown -R www:www /usr/local/varnish/logs

3、编译安装varnish:
下载:
http://sourceforge.net/project/showfiles.php?group_id=155816&package_id=173643&release_id=563022
 

代码如下:

[root@RedhatAS4U4-Oracle oracle]# wget http://blog.s135.com/soft/linux/varnish/varnish-1.1.2.tar.gz
[root@RedhatAS4U4-Oracle oracle]# tar zxvf varnish-1.1.2.tar.gz
[root@RedhatAS4U4-Oracle oracle]# cd varnish-1.1.2
[root@RedhatAS4U4-Oracle oracle]# ./configure --prefix=/usr/local/varnish
[root@RedhatAS4U4-Oracle oracle]# make && make install

./configure -enable-debugging-symbols -enable-developer-warnings -enable-dependency-tracking --prefix=/usr/local/varnish
 

注意,我在进行make步骤时,出现如下错误:
"varnishhist.c:35:20: error: curses.h: No such file or directory"
造成该问题的原因是因为系统中少了ncurses-devel包

4、创建Varnish配置文件:
 

代码如下:

[root@RedhatAS4U4-Oracle oracle]# vi /usr/local/varnish/vcl.conf
backend myblogserver {
   set backend.host = "10.167.26.3";
   set backend.port = "80";
}

acl purge {
       "localhost";
       "127.0.0.1";
       "10.167.0.0"/16;

"210.22.7.147"/32;
}

sub vcl_recv {
       if (req.request == "PURGE") {
  if (!client.ip ~ purge) {
  error 405 "Not allowed.";
  }
  lookup;
       }

       if (req.http.host ~ "^cacti.chinarenservice.com") {
  set req.backend = mymonitorserver;
  if (req.request != "GET" && req.request != "HEAD") {
  pipe;
  }
  else {
  lookup;
  }
       }
       else {
  error 404 "Zhang Yan Cache Server";
  lookup;
       }
}

sub vcl_hit {
       if (req.request == "PURGE") {
  set obj.ttl = 0s;
  error 200 "Purged.";
       }
}

sub vcl_miss {
       if (req.request == "PURGE") {
  error 404 "Not in cache.";
       }
}

sub vcl_fetch {
       if (req.request == "GET" && req.url ~ "\.(txt|js|gif|jpg||jpeg|tom|swf|css)$") {
  set obj.ttl = 3600s;
       }
       else {
  set obj.ttl = 30d;
       }
}

注释:
(1)、Varnish通过反向代理请求后端IP为10.167.26.3,端口为80的apache服务器;
(2)、Varnish允许localhost、127.0.0.1、10.167.0.***源IP通过PURGE方法清除缓存;
(3)、Varnish对域名为cacti.chinarenservice.com的请求进行处理,非cacti.chinarenservice.com域名的请求则返回“freeke Cache Server”;
(4)、Varnish对HTTP协议中的GET、HEAD请求进行缓存,对POST请求透过,让其直接访问后端Web服务器。之所以这样配置,是因为POST请求一般是发送数据给服务器的,需要服务器接收、处理,所以不缓存;
(5)、Varnish对以.txt和.js等结尾的URL缓存时间设置1小时,对其他的URL缓存时间设置为30天。

5、启动Varnish
 

代码如下:
[root@RedhatAS4U4-Oracle oracle]# limit -SHn 51200
[root@RedhatAS4U4-Oracle oracle]# /usr/local/varnish/sbin/varnishd -n /var/InfiNET/cache -f /usr/local/varnish/vcl.conf -a 0.0.0.0:80 -s file,/var/InfiNET/cache/varnish_cache.data,1G -g www -u www -w 30000,51200,10 -T 127.0.0.1:3500 -p client_http11=on

6、启动varnishncsa用来将Varnish访问日志写入日志文件:
 

代码如下:
[root@RedhatAS4U4-Oracle oracle]# /usr/local/varnish/bin/varnishncsa -n /var/InfiNET/cache -w /usr/local/varnish/logs/varnish.log &

7、配置开机自动启动Varnish
[root@RedhatAS4U4-Oracle oracle]# vi /etc/rc.local
 

代码如下:
ulimit -SHn 51200
/usr/local/varnish/sbin/varnishd -n /var/InfiNET/cache -f /usr/local/varnish/vcl.conf -a 0.0.0.0:80 -s file,/var/InfiNET/cache/varnish_cache.data,1G -g www -u www -w 30000,51200,10 -T 127.0.0.1:3500 -p client_http11=on
/usr/local/varnish/bin/varnishncsa -n /var/InfiNET/cache -w /usr/local/varnish/logs/varnish.log &


FAQ:
1、配置 泛域名 的主机
很多二级域名,比如 xx.    ,一个一个加好麻烦。squid 或者nginx 都支持 . 的
if (req.http.host ~ "^www.") {
改成
if (req.http.host ~ ".") {

2、附varnish多站点配置
 

代码如下:

backend www {
  set backend.host = "www.";
  set backend.port = "80";
}
backend blog {
  set backend.host = "blog.";
  set backend.port = "80";
}

backend image {
   set backend.host = "image.";
   set backend.port = "80";
}

sub vcl_recv {
    if (req.http.host ~ "^(www.)?$") {
        set req.http.host = "www.";
        set req.backend = www;
    } elsif (req.http.host ~ "^blog.$") {
        set req.backend = blog;
      } elsif (req.http.host ~ "^image.$") {
        set req.backend = image;
      } else {
    error 404 "Unknown host";
}

您可能感兴趣的文章:
Nginx负载均衡与反向代理的例子(图文)
Nginx Proxy 代理配置图片缓存的实例参考
nginx正向代理配置简单一例
nginx反向代理配置简单示例
学习Nginx反向代理实现简单负载均衡(图文)
nginx缓存html静态文件 解析php及反向代理IIS的配置
nginx中配置proxy正向代理
Nginx实现简单的反向代理
nginx创建反向代理和虚拟主机的例子
nginx的反向代理配置与优化
nginx反向代理与负载均衡
Nginx 反向代理的小例子
nginx反向代理与缓存详解
nginx反向代理配置一例
Nginx反向代理Nginx
nginx反向代理配置和优化
Nginx Proxy代理和图片缓存配置
nginx配置反向代理的简单示例


    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3