为什么要做web cache,我想大家最主要的是解决流量的压力。随着网站流量的提升,如果只是单台机器既处理静态文件,
又处理动态脚本,显然效率很难上升,不能处理日益上涨的流量压力。与此同时某些网站的页面内容并不是经常变化,
因此我们可以分两层架构来组织网站。前端web缓存+后端web服务器,可以参看这里配置nginx反向代理配置
前端web缓存有多重方式实现,原理就是队请求结果页面静态化并设置一个超时期限,缓存页面过期后,新请求
到达时重新到后端web服务器获取内容更新;没有nginx前比较流行的方法是squid,但squid不能充分利用处理器
的多核特性,越来越多的网站选用nginx来做前端的web缓存。
要想使用nginx的缓存功能要保证nginx添加了proxy模块。我们可以使用-V选项(大写的V,小写的v是看版本号的)
来查看nginx的编译参数。我使用的是默认的参数编译的,如下所示:
root@SNDA-172-17-12-117:/usr/local/nginx# ./nginx -V
nginx version: nginx/1.2.3
built by gcc 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)
TLS SNI support enabled
configure arguments: --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.21 --with-zlib=/usr/local/src/zlib-1.2.7
nginx的所有模块必须在编译的时候添加,不能再运行的时候动态加载,默认的编译选项下包含的模块,如果你不是显示的用参数关闭它。
nginx默认安装的模块如下
模块名称 | 描述 | 版本 | 如何禁用 |
Core | Control ports, locations, error pages, aliases, and other essentials. | --without-http | |
Access | Allow/deny based on IP address. | --without-http_access_module | |
Auth Basic | Basic HTTP authentication. | --without-http_auth_basic_module | |
Auto Index | Generates automatic directory listings. | --without-http_autoindex_module | |
Browser | Interpret "User-Agent" string. | 0.4.3 | --without-http_browser_module |
Charset | Recode web pages. | --without-http_charset_module | |
Empty GIF | Serve a 1x1 image from memory. | 0.3.10 | --without-http_empty_gif_module |
FastCGI | FastCGI Support. | --without-http_fastcgi_module | |
Geo | Set config variables using key/value pairs of IP addresses. | 0.1.17 | --without-http_geo_module |
Gzip | Gzip responses. | --without-http_gzip_module | |
Headers | Set arbitrary HTTP response headers. | ||
Index | Controls which files are to be used as index. | ||
Limit Requests | Limit frequency of connections from a client. | 0.7.20 | --without-http_limit_req_module |
Limit Zone | Limit simultaneous connections from a client. Deprecated in 1.1.8, use Limit Conn Instead. | 0.5.6 | --without-http_limit_zone_module |
Limit Conn | Limit concurrent connections based on a variable. | --without-http_limit_conn_module | |
Log | Customize access logs. | ||
Map | Set config variables using arbitrary key/value pairs. | 0.3.16 | --without-http_map_module |
Memcached | Memcached support. | --without-http_memcached_module | |
Proxy | Proxy to upstream servers. | --without-http_proxy_module | |
Referer | Filter requests based on | --without-http_referer_module | |
Rewrite | Request rewriting using regular expressions. | --without-http_rewrite_module | |
SCGI | SCGI protocol support. | 0.8.42 | --without-http_scgi_module |
Split Clients | Splits clients based on some conditions | 0.8.37 | --without-http_split_clients_module |
SSI | Server-side includes. | --without-http_ssi_module | |
Upstream | For load-balancing. | --without-http_upstream_ip_hash_module (ip_hash directive only) | |
User ID | Issue identifying cookies. | --without-http_userid_module | |
uWSGI | uWSGI protocol support. | 0.8.40 | --without-http_uwsgi_module |
X-Accel | X-Sendfile-like module. |
proxy模块中常用的指令时proxy_pass和proxy_cache.
nginx的web缓存功能的主要是由proxy_cache、fastcgi_cache指令集和相关指令集完成,proxy_cache指令负责反向代理
缓存后端服务器的静态内容,fastcgi_cache主要用来处理FastCGI动态进程缓存(这里我不是很清楚这两个指令的区别,
好像功能上都差不多,尤其后面这句话的意思,是我翻译过来的)。
确认proxy模块安装好后,下面对nginx的配置文件进行设置,重点部分如标红字体所示。
这是我的nginx.conf配置文件。
配置文件中以proxy_开头的指令我们大都可以字面意思得到理解。请务必注意一点proxy_cache_path和proxy_temp_path设置的目录需要在同一分区,因为它们之间是硬链接的关系。
最后启动nginx,来迎接着激动人心的时刻吧。我已经迫不及待了。如果文章哪里有问题或者你遇到了什么麻烦,可以留言让我知道。