原文出处:http://blog.chenlb.com/2010/04/nginx-proxy-cache.html
动态网站使用缓存是很有必要的。前段时间使用了 nginx proxy_stroe 来保存静态页面,以达到缓存的目的。当然 proxy stroe 用来做缓存是不够好的方案。
缓存这一块当然还有 squid 之类的独立缓存服务器。如果使用 nginx 为 web 服务器,还要加个 squid 来缓存,是觉得多了一个 http 请求层。幸好 nginx 0.7 有了 proxy_cache 来做这个缓存的事。
之前来有个 ncache 是新浪员工开发的 nginx 模块(好像只能在 nginx 0.6 中编译无运行)。已经停止维护了,已经被加到 nginx 标准库里了。昨天还不知道 proxy_cache 就是 ncache 的功能时,还在努力匹配 ncahce,浪费了N多时间,最终没看到可以缓存。后来尝试 proxy_cache 才解决,且使用简单。
安装 Nginx 请看:安装 Nginx 配置负载均衡,如果没有 pcre 库,可以到http://sourceforge.net/projects/pcre/files/ 下载(我用的是 8.02)。
nginx 0.7.65 默认安装就可以了。
安装好后开始匹配 proxy_cache,先准备后台服务器的文件,如是 time.jsp,内容:
<%=new java.util.Date() %>
conf/nginx.conf:
user nobody;
worker_processes 1;
error_log logs/error.log;
pid logs/nginx.pid;
events {
worker_connections 1024;
use epoll;
}
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" "$request_body" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_time"';
sendfile on;
keepalive_timeout 60;
proxy_cache_path /var/cache0 levels=1:2 keys_zone=pnc:100m inactive=2h max_size=10g;
upstream backend {
server 192.168.1.2:8080 weight=6;
#server 192.168.1.3:8080 weight=4;
}
server {
listen 80;
server_name localhost;
access_log logs/access.80.log main;
location / {
proxy_cache pnc;
proxy_temp_path /var/nginx_temp;
#proxy_cache_key "$request_uri$request_body";
#proxy_cache_methods GET POST;
proxy_cache_valid 200 304 1m;
proxy_pass http://backend;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
启动 nginx 后,打开浏览器,可以狂刷 Ctrl + F5,可以看到一样的页面。一分钟后再会一个新的页面。
是 proxy_cache_valid 200 304 1m; 告诉 nginx 后台返回的结果是 200 或 304 的响应,用 1m(分钟)的缓存。
proxy_cache_key 默认是 "$scheme$host$request_uri"。
proxy_cache_methods 默认是 GET HEAD。
当要缓存 post 请求后,要用 proxy_cache_methods POST 来打开。并且 proxy_cache_key 要对,post 的请求 query string 是在请求体内,所以加 $request_body 作为 key 的一部分。要用 post ,上面匹配去了注释就可以了。
这些匹配指令详情请看官方:http://wiki.nginx.org/NginxHttpProxyModule,
中文版:http://wiki.nginx.org/NginxChsHttpProxyModule
分享到:
相关推荐
《Nginx Cache Purge:高效管理Web缓存的利器》 在当今互联网环境中,Web服务器的性能优化至关重要,而缓存技术则是其中的关键一环。Nginx,以其高性能、稳定性以及模块化的特性,成为了许多网站首选的反向代理和...
ngx_cache_purge 是 nginx 模块,此模块可以清理 nginx 的 FastCGI、proxy、 SCGI 和 uWSGI 的缓存。配置指令(相同位置语法)fastcgi_cache_purgesyntax: fastcgi_...示例:nginx扩展模型ngx_cache_purge缓存清理插件
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; server { ... location /purge { allow 192.168.0.0/24; # 只允许特定IP段进行缓存清理 deny all; proxy_cache_purge...
以下是一个简单的示例配置,展示了如何使用 ngx_cache_purge 模块: ```nginx http { ... proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; server { ... location /purge...
启用Nginx的缓存功能,需要配置 `proxy_cache_path` 和 `proxy_cache`。以下是一个简单的配置示例: ```nginx proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m; ...
7. **版本兼容性**:ngx_cache_purge-1.3 版本可能只适用于特定版本的Nginx,因此在使用前需要检查其与你的Nginx版本的兼容性。 通过集成ngx_cache_purge插件,你可以有效地管理和优化Nginx的缓存策略,确保用户...
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; server { location /static/ { proxy_cache my_cache; proxy_cache_bypass $http_pragma; proxy_cache_revalidate on;...
在编译安装Nginx时,需要添加ngx_cache_purge模块,然后在配置中使用`proxy_cache_purge`指令来清除指定的缓存。 总结来说,Nginx的proxy_store和proxy_cache模块提供了灵活的图片缓存策略,可以根据实际需求选择...
以上只是一些基本的Nginx负载均衡配置示例,实际使用中可能还需要结合其他高级特性,如URL重写、SSL/TLS终止、限速、限制访问等,来构建更复杂的Web服务架构。对于"conf"文件中的具体配置,可以根据需求进行详细解读...
proxy_cache_path /var/cache/nginx/proxy levels=1:2 keys_zone=PROXY:10m max_size=10g inactive=60m; server { location /images/ { proxy_pass http://upstream_server; proxy_cache PROXY; proxy_cache_...
3. **缓存(proxy_cache)**:Nginx可以作为缓存服务器,对静态资源进行缓存,减少对后端服务器的请求。 通过深入理解和实践这些Nginx的配置优化、负载均衡和动静分离技术,你可以构建一个高效、稳定且可扩展的Web...
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; server { listen 80; server_name example.com; location ~* \.(jpg|jpeg|png|gif|css|js)$ { proxy_cache my_cache;...
3. **缓存控制**:可以使用`proxy_cache_bypass`、`proxy_no_cache`等指令决定是否跳过缓存,以及何时更新缓存。 4. **缓存刷新**:对于动态内容,有时需要手动清除特定缓存。Nginx提供`proxy_cache_revalidate`...
使用Nginx的proxy_cache模块可以缓存动态内容,减轻后端服务器压力。配置示例: ```nginx location ~ \.php$ { proxy_cache my_cache; proxy_pass http://127.0.0.1:9000; ... } upstream backend { server...
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; proxy_temp_path /var/tmp/nginx; server { listen 80; location / { proxy_pass http://backend; proxy_cache my_...
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; server { listen 8080; server_name localhost; location / { proxy_pass http://example.com; proxy_set_header ...
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; server { location / { proxy_pass http://example.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $...
proxy_cache_path /data/nginx/cache/one levels=1:2 keys_zone=one:10m max_size=10g; proxy_cache_key $host$request_uri; server { server_name www.jb51.net jb51.net; root /home/www.jb51.net/web; index ...
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; proxy_cache_key "$scheme$request_method$host$request_uri"; proxy_cache_valid 200 60m; proxy_cache_valid 404 1m; ...
- 使用`git clone https://github.com/arut/nginx-rtmp-module.git`克隆RTMP模块源码。 - 将RTMP模块编译并添加到Nginx中,命令如下: ``` --add-module=/path/to/nginx-rtmp-module ``` - 如果需要支持H.264...