Andy's Blog » nginx ssi proxy_pass, nginx proxy, nginx ssi proxy, Nginx 局部缓存 SSI, SSI Proxy, proxy_cache_valid, ssi 缓存, proxy_cache_valid any, proxy_cache_valid 3m, 增加ssi的缓存时间, SSI Proxy代理, windwos nginx gzip cache » Nginx proxy_cache 反向代理缓存 + SSI 自由部署

Nginx proxy_cache 反向代理缓存 + SSI 自由部署

好久没写技术文章了,Blog被墙很久,一直也懒得上来记录一些东西

先写个tip,nginx 反代要缓存后端发过来的数据,并gzip保存,需要设置2个地方

gzip_http_version 1.0;
proxy_set_header Accept-Encoding 'gzip';

如果 gzip_http_version 1.1 则不会压缩

OK, 进入正题
为了让前端保存的缓存不会因为后端程序的小改动而频繁更新,就用到了 ssi

要详细说的话,会很长,懒得打字,只记要点

1. 缓存 gzip 与 ssi 不能鱼与熊掌兼得,可惜

2. 举例:
后端程序输出的页面里包含

<!--#include virtual="/ssi/test.html"-->

前端如果不开 ssi,上面这句就是 html 注释
然后在前端 /ssi/ 目录里放 test.html 文件
再然后,/ssi/test.html 文件里,还可以再 include 动态文件

<!--#include virtual="/ssi/test.php"-->

3. 放点配置文件,不解释

# author: http://21andy.com
# backend
server {
    listen 8888;
    server_name backend;
    root  /mnt/hgfs/www/test_back.com;
    include server.conf;
    location / {
        try_files $uri $uri/ /index.php;
    }
}

# proxy & upstream setting
proxy_temp_path    /mnt/hgfs/www/proxy/temp;
proxy_cache_path   /mnt/hgfs/www/proxy/main  levels=2  keys_zone=main:10m  inactive=10d max_size=100m;
proxy_cache_path   /mnt/hgfs/www/proxy/21andy   levels=2  keys_zone=main:10m  inactive=10d max_size=100m;
upstream backend {
    server    127.0.0.1:8888 weight=8 max_fails=2 fail_timeout=20s;
    server    127.0.0.1:9999 weight=2 max_fails=2 fail_timeout=20s;
}
proxy_next_upstream     http_502 http_503 http_504 error timeout invalid_header;

# frontend
server {
    listen 80;
    root  /mnt/hgfs/www/test.com;
    server_name www.test.com test.com *.test.com;
    if ($host != 'www.test.com') {
        rewrite ^(.*)$ http://www.test.com$1 permanent;
    }

    index index.html index.php;
    ssi on; # outside location for global

    # cache uri begin with /21andy/
    location ~* ^/21andy/ {
        proxy_cache             21andy;
        proxy_cache_valid       200 301 302 30d;
        proxy_cache_valid       any 3m;
        proxy_pass              http://backend;
    }

    # if file or directory EXISTS in frontend then output it directly
    # else get from backend and cache it to main
    try_files $uri $uri/ @cache;
    location @cache {
        proxy_cache             main;
        proxy_cache_valid       200 301 302 30d;
        proxy_cache_valid       any 3m;
        proxy_pass http://backend;
    }

    # cache homepage
    location =/ {
        proxy_cache             main;
        proxy_cache_valid       200 1h;
        proxy_pass http://backend;
    }

    # for SSI to be include php file
    location ~* \.php$ {
        try_files $uri =404;
        fastcgi_index index.php;
        fastcgi_pass  unix:/tmp/php-cgi.sock;
        include fastcgi_params;
    }

}

Incoming search terms:

Tags: nginx, gzip, proxy_cache, SSI

本文地址: http://www.21andy.com/new/20130522/2149.html