utsusemiというプロキシサーバを書いた

github.com

これは何?

リクエストが来たとき、バックエンド①が404ならバックエンド②にアクセスして、バックエンド②が404ならバックエンド③にアクセスして…みたいなプロキシサーバ。

開発用の画像配信サーバに画像がなかったときに、本番にアクセスしにいく、みたいな用途で使います。

それnginxで(ry

できます。 なんかこんなQAがあって、

server {
  listen 80;
  location / {
    proxy_pass http://foo.bar.dev/
    proxy_intercept_errors on;
    error_page 404 =200 /production/$uri;
  }

  location /production {
    internal;
    rewrite ^/production/(.*) /$1 break;
    proxy_pass http://foo.bar.prod/
  }
}

こんな設定にしたら、できました。

が、バックエンドが三つは無理でした。 できるのかもしれないけど、わからなかった。。。

それvarnishで(ry

できます。 return (restart);とかでできます。 というか、もともとそうやって実装されてたんですけど、オーバーキル感があるので、結局、自前で実装しました。

でまあ、utsusemiというプロキシサーバをGoで書きました。 Golang便利。

こういう設定を書いて、起動すると

#port = 11080

[[backend]]
target = "http://httpstat.us/404"
#ok = [200]

[[backend]]
target = "https://www.google.co.jp"
#ok = [200]

[[backend]]
target = "https://s.yimg.jp"
#ok = [200]

yahooの画像にもgoogleの画像にもlocalhost:11080でアクセスできます。

その他

はてなブログ、tomlのsyntax highlightをサポートしてくれないかなー (nginxをサポートしてて驚いた。すばらしい)