CentOS7にMastodonをインストールしたときにハマったこと
すごく何となくMastdonインスタンスを立てたくなったので、週末を3つほど使って悪戦苦闘してました。
インストールはこちらのサイトを元に進めました。
要点が纏まっていて助かりました。
しかしながら、最後の「http://<ホスト名>:3000/」で動作確認するところがどうしてもうまく行きませんでした。
[root@localhost live]# curl http://localhost:3000 <html><body>You are being <a href="https://localhost/">redirected</a>.</body></html>
「http://<ホスト名>:3000/」にアクセスすると「https://<ホスト名>/」にリダイレクトされるのですが、webコンテナはHTTP用の3000ポートしか外部にNATしていないので、リダイレクト先のHTTPSポート(433)にアクセスできないという状況です。
よくよく調べてみると、HTTPプロトコルには要求時にUpgrade:と言うヘッダを付けるとHTTP用のポートを使ってHTTPSで通信できる機能があるらしく、Mastodonはそれを採用しているようです。
動作確認に使ってたChromeやcurlは要求時にこのUpgrade:ヘッダを付けないので上手く行かなかったと言う話でした。
RFC 2817 - Upgrading to TLS Within HTTP/1.1
結論として、Webサーバのnginxはリバースプロキシとして動作するときにUpgrade:ヘッダを付けられるようなので、Mastodon公式サイトの設定例を元にnginxを立ち上げてみました。
documentation/Production-guide.md at master · tootsuite/documentation · GitHub
結果、無事サインアップの画面が表示されました。
ミッションコンプリ。
Mastodonをインストールするだけでも各種最先端技術に振り回されて満身創痍になってしまったので、運用はもうちょっと経験値が貯まってからにしようと思います。