2012/04/30

nginxをリバースプロキシとしてSubsonicを構築する

SubsonicをVPS上で稼働させることにしました。
そのままポート割り当てて公開してもいいのですが、
折角ですからSubsonicのオレオレ証明書ではなく、
nginxで利用している正規のSSL証明書を使うために、
nginxによるリバースプロキシを通してみることに。

Subsonicに一つのポートを割り当てて単独で動作させるのではなく、
nginxで動作しているサーバの"subsonic/"ディレクトリ下を割り当てることにします。

Java環境は導入済なので・・・

まずは...Subsonicをrpmパッケージでインストールします。
(2012/04/30現在の最新は、subsonic-4.6)

http://www.subsonic.org/pages/download.jsp
$ cd ~
$ wget http://downloads.sourceforge.net/project/subsonic/subsonic/4.6/subsonic-4.6.rpm
$ sudo rpm -ivh subsonic-4.6.rpm
これだけで自動的にSubsonicが動作しはじめます。お手軽です。


自動エンコードに必要なライブラリ類をyumでインストール。

$ sudo yum -y install lame flac faad2 vorbis-tools ffmpeg
(参照: http://sourceforge.net/apps/mediawiki/subsonic/index.php?title=Transcoders


次に、Subsonicの設定
を変更します。(/etc/sysconfig/subsonic)
$ sudo vi /etc/sysconfig/subsonic 
SUBSONIC_ARGS="--port=8100 --max-memory=100 --context-path=/subsonic"
こんな感じで、Subsonicのポート番号と、パスを指定しておきます。


さらに...nginxの設定に、Subsonicへのリバースプロキシを追加。

$ sudo vi /etc/nginx/nginx.conf

upstream Subsonic.backend {
server 127.0.0.1:8081;
}
server {
        listen       80;
        〜〜〜
        location ~ ^/subsonic(\/|).* {
                if ($server_port = 80){
                        rewrite (.*) https://$http_host$request_uri last;
                        break;
                }
                proxy_pass      http://Subsonic.backend;
                proxy_redirect  http://$http_host/subsonic/  https://$http_host/subsonic/;
                break;

        }
}
基本的には、proxy_passでSubsonicのアドレスを指定するだけなのでシンプルですね。
ここでは、HTTPでアクセスしたときにHTTPSへリダイレクトする記述と、
proxy_directを使って、Subsonicがリダイレクトさせようとしたときに
HTTPSへリダイレクトされるように記述をしておきました。


あとは、Subsonicとnginxの設定を反映させて・・・

$ sudo service subsonic restart
$ sudo service nginx restart

ブラウザからアクセスしてみます。
(http//〜〜〜/subsonic/)


とりあえず、うまく動作しているようです。


参考にさせていただきました。(感謝♪)