如何将nginx中的某些页面缓存为反向代理

时间:2014-05-07 21:22:16

标签: caching nginx reverse-proxy cache-control

好吧,我有这样的site.conf文件:

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_path /etc/nginx/cache/pag levels=1:2 keys_zone=APP:100m inactive=1m;
proxy_temp_path /etc/nginx/cache/tmp;

add_header X-Cache $upstream_cache_status;

server {
 listen 80;

 root   /etc/nginx/html;
 index  index.html index.htm;

 server_name www.example.com;

 error_page  404              /404.html;

 location  /404.html {
    internal;
 }

 location / {
    proxy_pass http://127.0.0.1:8080/;
    proxy_cache APP;
    proxy_cache_valid 200 1m;
    proxy_cache_methods POST;
    expires 1m;
 }
}

使用此配置,所有内容(包括POST请求方法)都会缓存1分钟,确定。

我需要什么?我需要只有这些页面可以缓存:

1) www.example.com
2) www.example.com/index.html
3) www.example.com/test/page.html
4) www.example.com/test/text.txt (this is a file requested by POST thru page.html, and i need it cached also)
5) www.example.com/test/page2.php?var1=val1&var2=val2 (val1 and val2 are dynamics)

我的问题是:我需要在location /中添加哪些内容才能匹配1-5项内容?像这样:

location (1-5 items match) {
    proxy_pass http://127.0.0.1:8080/;
    proxy_cache APP;
    proxy_cache_valid 200 1m;
    proxy_cache_methods POST;
    expires 1m;
 }

其他页面(未缓存)将自动重定向到127.0.0.1:8080。我知道这可以这样做:

 location / {
    proxy_pass http://127.0.0.1:8080/;
 }

注意1:其他PHP页面接收POST | GET请求方法,但我不需要它在缓存中,只在上面。

注意:2 127.0.0.1:8080是运行PHP的apache服务器,因此我可以请求PHP页面。

1 个答案:

答案 0 :(得分:0)

由于apache在同一主机上运行,​​只需提供您不希望通过nginx缓存的html文件。至于php页面,在你的应用程序中发送正确的过期标题,一切都会正常工作。