将nginx同时作为负载均衡和Web缓存服务器

运维 服务器运维
Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成。最新的Nginx 0.8.32版本,proxy_cache和fastcgi_cache已经比较完善,完全可以取代Squid,同时作为负载均衡服务器和Web缓存服务器来使用。

Nginx从0.7.48版本开始,支持了类似Squid的缓存功能。这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意URL链接,同时也支持404/301/302这样的非200状态码。虽然目前官方的Nginx Web缓存服务只能为指定URL或状态码设置过期时间,不支持类似Squid的PURGE指令,手动清除指定缓存页面,但是,通过一个第三方的Nginx模块,可以清除指定URL的缓存。

Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反向代理时,对后端内容源服务器进行缓存,后者主要用于对FastCGI的动态程序进行缓存。两者的功能基本上一样。

最新的Nginx 0.8.32版本,proxy_cache和fastcgi_cache已经比较完善,加上第三方的ngx_cache_purge模块(用于清除指定URL的缓存),已经可以完全取代Squid。我们已经在生产环境使用了 Nginx 的 proxy_cache 缓存功能超过两个月,十分稳定,速度不逊于 Squid。

在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能、清除指定URL缓存的功能。而在性能上,Nginx对多核CPU的利用,胜过Squid不少。另外,在反向代理、负载均衡、健康检查、后端服务器故障转移、Rewrite重写、易用性上,Nginx也比Squid强大得多。这使得一台Nginx可以同时作为“负载均衡服务器”与“Web缓存服务器”来使用。

1、Nginx 负载均衡与缓存服务器在 Linux 下的编译安装:

ulimit -SHn 65535   
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.00.tar.gz   
tar zxvf pcre-8.00.tar.gz   
cd pcre-8.00/   
./configure   
make && make install   
cd ../   
 
wget http://labs.frickle.com/files/ngx_cache_purge-1.0.tar.gz   
tar zxvf ngx_cache_purge-1.0.tar.gz   
 
wget http://nginx.org/download/nginx-0.8.32.tar.gz   
tar zxvf nginx-0.8.32.tar.gz   
cd nginx-0.8.32/   
./configure --user=www --group=www --add-module=../ngx_cache_purge-1.0 --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module   
make && make install   
cd ../   
   
 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

2、/usr/local/webserver/nginx/conf/nginx.conf 配置文件内容如下:

user www www;   
 
worker_processes 8;   
 
error_log /usr/local/webserver/nginx/logs/nginx_error.log crit;   
 
pid /usr/local/webserver/nginx/nginx.pid;   
 
#Specifies the value for maximum file descriptors that can be opened by this process.   
worker_rlimit_nofile 65535;   
 
events   
{   
use epoll;   
worker_connections 65535;   
}   
 
http   
{   
include mime.types;   
default_type application/octet-stream;   
 
charset utf-8;   
 
server_names_hash_bucket_size 128;   
client_header_buffer_size 32k;   
large_client_header_buffers 4 32k;   
client_max_body_size 300m;   
 
sendfile on;   
tcp_nopush on;   
 
keepalive_timeout 60;   
 
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;   
 
gzip on;   
gzip_min_length 1k;   
gzip_buffers 4 16k;   
gzip_http_version 1.1;   
gzip_comp_level 2;   
gzip_types text/plain application/x-javascript text/css application/xml;   
gzip_vary on;   
 
#注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区   
proxy_temp_path /data0/proxy_temp_dir;   
#设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天清理一次缓存,硬盘缓存空间大小为30GB。   
proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;   
 
upstream backend_server {   
server 192.168.8.43:80 weight=1 max_fails=2 fail_timeout=30s;   
server 192.168.8.44:80 weight=1 max_fails=2 fail_timeout=30s;   
server 192.168.8.45:80 weight=1 max_fails=2 fail_timeout=30s;   
}   
 
server   
{   
listen 80;   
server_name www.yourdomain.com 192.168.8.42;   
index index.html index.htm;   
root /data0/htdocs/www;   
 
location /   
{   
#如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。   
proxy_next_upstream http_502 http_504 error timeout invalid_header;   
proxy_cache cache_one;   
#对不同的HTTP状态码设置不同的缓存时间   
proxy_cache_valid 200 304 12h;   
#以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内   
proxy_cache_key $host$uri$is_args$args;   
proxy_set_header Host $host;   
proxy_set_header X-Forwarded-For $remote_addr;   
proxy_pass http://backend_server;   
expires 1d;   
}   
 
#用于清除缓存,假设一个URL为http://192.168.8.42/test.txt,通过访问http://192.168.8.42/purge/test.txt就可以清除该URL的缓存。   
location ~ /purge(/.*)   
{   
#设置只允许指定的IP或IP段才可以清除URL缓存。   
allow 127.0.0.1;   
allow 192.168.0.0/16;   
deny all;   
proxy_cache_purge cache_one $host$1$is_args$args;   
}   
 
#扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。   
location ~ .*\.(php|jsp|cgi)?$   
{   
proxy_set_header Host $host;   
proxy_set_header X-Forwarded-For $remote_addr;   
proxy_pass http://backend_server;   
}   
 
access_log off;   
}   
}   
   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.

3、启动 Nginx:

/usr/local/webserver/nginx/sbin/nginx   
 
  • 1.
  • 2.

4、清除指定的URL缓存示例:

原文地址:http://blog.s135.com/nginx_cache/

【编辑推荐】

  1. 20个Nginx Web服务器最佳安全实践
  2. 安装Ubuntu nginx及其配置安装Php和mysql
  3. python编程在nginx中的使用方法
责任编辑:yangsai 来源: blog.s135.com
相关推荐

2012-04-02 15:43:45

nginxtomcat

2009-07-22 10:25:37

2018-03-14 11:13:35

Web服务器Nginx

2018-11-05 09:34:43

2010-06-29 11:21:58

Web服务器

2011-11-22 21:26:59

pfSense配置Web服务器负载均衡

2018-10-26 09:52:25

Nginx服务器负载均衡

2019-03-27 08:43:17

Nginx负载均衡服务器

2010-11-19 12:53:53

梭子鱼负载均衡

2012-10-19 10:33:51

负载均衡服务器负载均衡

2010-05-06 15:55:40

2010-09-15 14:50:57

集群负载均衡Tomcat

2010-04-22 22:51:36

2018-10-12 08:43:54

2018-10-14 08:39:52

NginxTomcat服务器

2010-05-05 18:44:27

服务器负载均衡

2010-05-05 18:28:16

负载均衡服务器

2020-03-31 20:57:50

负载均衡Web服务器开源

2022-01-12 08:49:33

CaddyWeb服务器Go语言

2019-09-12 09:22:58

Nginx负载均衡服务器
点赞
收藏

51CTO技术栈公众号