memo

2011-08-05

nginx で cocproxy みたいなこと

cocproxy とかいうのを使うと、よそのサイトの一部ファイルを書き換えたりできて便利ですよ、という話を聞いた。 部分置換とかはキツそうだけど、ファイル置き換えくらいなら nginx 単体でも似たようなことが出来そうな気がしたので、考えてみた。

nginx-cocproxy.conf:

daemon off;
error_log  /dev/stderr debug;

worker_processes  1;

pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    client_body_temp_path temp/client;
    proxy_temp_path       temp/proxy;
    fastcgi_temp_path     temp/fastcgi;
    uwsgi_temp_path       temp/uwsgi;
    scgi_temp_path        temp/scgi;

    access_log  /dev/stdout;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       3128;
        server_name  _;

        resolver 127.0.0.1;

        location / {
            root files;

            # XXX: basename 取る方法が分からん
            try_files /$http_host/$uri $uri @origin;
        }

        location @origin {
            proxy_pass $scheme://$http_host$request_uri;
        }
    }
}

nginx -p ./ -c nginx-cocproxy.conf みたいに起動してブラウザの proxy に設定してやれば、

  1. ./files/example.com/test/foo/bar.css

  2. ./files/test/foo/bar.css

の順でファイルを探して置き換えてくれる。

  • ./files/bar.css

  • ./files/example.com/bar.css

からも探せるようにする。