最近は元気が無いがニコニコ動画は面白い。Youtube や Veoh に上がってる動画も面白い。
しかし、動画のファイルサイズは HTML/CSS/JavaScript に比べて大きすぎるためか、 キャッシュプロクシとは本当に相性が悪すぎる。Squid でキャッシュ保存するサイズを大きめに取って対処していたのだが、、、どうも気持ちが悪い。
ニコニコ動画限定だが専用のキャッシュサーバ「NicoProxy2」が出てきている。そのうち、動画専用キャッシュサーバがぼこぼこ出て来るんかいなぁ。
なので、Squid と NicoProxy2 を組み合わせてみた。
ユーザは外部サイトを Squid を通してアクセスする状況で、Squid がニコニコ動画の動画リクエストのみNicoProxy2 に委託するのが目的。
NicoProxy2の立ち上げ
手軽に launchd 経由で立ち上げたいので daemondo が含まれる MacPorts を入れてく。
ソースを取ってきて、適当な場所に置く。
# ls -l /opt/local/etc/nicoproxy/ total 24 -rw-r--r-- 1 root admin 321 Aug 5 16:36 conf.yml -rw-r--r-- 1 root admin 8062 Aug 5 18:58 nicoproxy.rb
もうこの状態で、conf.yml を弄れば、Proxy として機能すると思う。動作確認したら、launchd 用の定義ファイルとラッパースクリプトを書く。
/opt/local/etc/LaunchDaemons/org.macports.nicoproxy/org.macports.nicoproxy.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Debug</key> <false/> <key>Label</key> <string>org.macports.nicoproxy</string> <key>OnDemand</key> <false/> <key>ProgramArguments</key> <array> <string>/opt/local/bin/daemondo</string> <string>--label=nicoproxy</string> <string>--start-cmd</string> <string>/opt/local/etc/LaunchDaemons/org.macports.nicoproxy/nicoproxy.wrapper</string> <string>start</string> <string>;</string> <string>--stop-cmd</string> <string>/opt/local/etc/LaunchDaemons/org.macports.nicoproxy/nicoproxy.wrapper</string> <string>stop</string> <string>;</string> <string>--restart-cmd</string> <string>/opt/local/etc/LaunchDaemons/org.macports.nicoproxy/nicoproxy.wrapper</string> <string>restart</string> <string>;</string> <string>--pid=none</string> </array> <key>RunAtLoad</key> <false/> </dict> </plist>
/opt/local/etc/LaunchDaemons/org.macports.nicoproxy/nicoproxy.wrapper
#!/bin/sh prefix=/opt/local pidfile=/opt/local/var/run/nicoproxy.pid Start() { cd /opt/local/etc/nicoproxy ruby ./nicoproxy.rb & echo $! > $pidfile } Stop() { kill `cat $pidfile` } Restart() { Stop Start } Run() { case $1 in start ) Start ;; stop ) Stop ;; restart) Restart ;; * ) echo "$0: unknown argument: $1";; esac } Run $1
launchd に登録すれば、再起動しても自動的に上がってくれる筈?
# launchctl load -w /opt/local/etc/LaunchDaemons/org.macports.nicoproxy/org.macports.nicoproxy.plist ... # launchctl list | grep nicoproxy 62595 - org.macports.nicoproxy ... # ln -s /opt/local/etc/LaunchDaemons/org.macports.nicoproxy/org.macports.nicoproxy.plist /Library/LaunchDaemons/
まぁ、MacPorts に含まれていないのに、org.macports.XXXX なのは愛嬌ってことで。
Squid と連携する
Squid は、MacPorts のものを入れ、取り敢えず動かせる所まではやっておく。NicoProxy2 連携用に、次の設定を加える。但し、例では NicoProxy2 のポートは 25255に変えてあり、自身のホストがCNAMEとか追加して nicoproxy.example.com で引けるようになっているので、各自の環境に合わせる必要がある。
squid.conf
... # nico proxy acl nico url_regex -i ^http://www\.nicovideo\.jp/api/getflv/? acl nico url_regex -i ^http://.*\.nicovideo\.jp/smile\? cache_peer nicoproxy.example.com. parent 25255 0 proxy-only no-query cache_peer_access nicoproxy.example.com. allow nico never_direct allow nico
まとめ
NicoProxy2はon-the-flyでは転送しないのかぁ。。。
0 件のコメント:
コメントを投稿