MisskeyのリバースプロキシとしてApacheを使用する際の注意点

シュガータウンにMisskeyのインスタンスを立ててみました。 mi.sugattor.ga

Misskeyインストールのチュートリアルでは、基本的にリバースプロキシとしてnginxを使っています。
しかしシュガータウンではWebサーバが既にApache上で動いているため、リバースプロキシにApacheを使わざるを得ませんでした。
予想外に苦労したので備忘録として残しておきます。

導入mod

  • proxy
  • proxy_http
  • proxy_wstunnel(忘れないで)
  • rewrite (多分勝手に有効)
  • headers (多分勝手に有効)

ProxyPreserveHostはOnにする

これがOnじゃないと「http-signature verification failed and no LD-Signature.」とか「signature verification failed」が出てリモートフォローができない。
ソース: フォローできないMisskeyインスタンスがある · Issue #3656 · misskey-dev/misskey · GitHub

WebSocketのリバースプロキシを設定する

これがないとTLが自動で流れない。
ProxyPass /streaming ws://~~/streamingを入れてあげること。
なんかnginxはこういうの気にしなくてもいいらしい。

設定例

<VirtualHost *:443>
        ServerName example.tld
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyPass /streaming ws://[ローカルIPアドレス]:3000/streaming
        ProxyPassReverse /streaming ws://[ローカルIPアドレス]:3000/streaming
        ProxyPass / http://[ローカルIPアドレス]:3000/
        ProxyPassReverse / http://[ローカルIPアドレス]:3000/
</VirtualHost>

おまけ:サーバ自身へのcurlが成功すること

MisskeyのインスタンスのあるサーバからMisskeyのdefault.ymlで設定しているURLにcurlが成功する必要がある。
これができないと他インスタンスの絵文字やリアクションが表示されない。
curl https://[自分のインスタンスのURL]/で正しく表示されること。*1

私は/etc/hostsにサーバ自身のローカルIPアドレスとホスト名を書いて解決した。

*1:ただしMedia Proxyサーバを別で立てている場合はそのサーバにアクセスできること