nginx の knowhow

nginx すごいですね。conf がめちゃくちゃになるのが難点ですが。apache よりはマシですかね。
nginx + ngx_postgres + postgresql + ajax もすごいですね。 cgi とか fcgi とか wsgi とかなにそれ食えるの状態。

現在、"$" をエスケープする方法はない

http://forum.nginx.org/read.php?2,218536,218556#msg-218559

    geo $d {
        default "$";
    }

    set $var '$d'; # とかするしかない。

    if ($foo ~ '^foo$'){ # これは大丈夫だったりする
        return 200;
    }

ngx_postgres などキャッシュ機能がない addon を使用するときは自分に向けて reverse proxy する

ngx_postgres はすげー便利ですがキャッシュ機能が見当たらないので reverse proxy で loopback して無理やりキャッシュします。
なんか奇妙な感じですが。

user  www-data;
http {
    # required: chwon www-data:www-data /var/cache/nginx/loopback
    proxy_cache_path /var/cache/nginx/loopback
        keys_zone=loopback:4m max_size=50m;
    # required: chown www-data:www-data /var/tmp/nginx
    proxy_temp_path /var/tmp/nginx;
    proxy_cache_key $scheme://$host$request_uri$is_args$args;
    server {
        location /foo/ {
            proxy_cache loopback;
            proxy_cache_valid 1m;
            proxy_pass http://127.0.0.1:80/path/;
        }
    }
}

正規表現で文字列を抽出するときは if を使用する

if ($foo ~ "^(\d+)-(\d+)$"){
    set $var "$1,$2";
}

ファイルを URL にマッピングする

ディレクトリじゃなくてファイルを直接指定したい時に。

location = /path/to/file { # "=" は必須です
    default_type "text/html"; # 指定しないと default_type の値が使用されます
    alias /home/www-data/html/file.html;
}

application/json

nginx デフォルトの mime.types ファイルには json がないので次の行を追加しましょう。

application/json                      json;
# nginx.conf などでこのように指定するのはダメ。types は 2 回以上使用できない
types {
    application/json                      json;
}