リバースプロキシとHTTPSに関するDiscourseの議論

私は、Apache2 をコンテナ内の Unix ソケットへのリバースプロキシとして使用したテスト環境で、Apache2 を「問題なく」動作させることができました。

私が確認した唯一の違い(注:数時間のテストのみで、完全な検証ではありません)は以下の通りです。

  • Apache2 は、コンテナ内の共有ボリュームにある Unix ソケットへのシンボリックリンクでは動作しません。
  • 大まかなテストでは Apache2 はやや遅かったものの、その差はほとんどありませんでした。

個人的には、技術に関する宗教戦争は好まないため、「Apache2 は多くの問題を引き起こす」という意見には賛成できません。私のテスト中、Apache2 に起因する負の事象は一切発生しませんでした。

以下は、私が Apache2 で使用したコア設定です(HTTP 環境ですが、LETSENCRYPT とも問題なく動作しました)。

# cat discourse.example.conf
<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  ServerName  discourse.example.com
  DocumentRoot /website/discourse

  RewriteEngine On
  ProxyPreserveHost On
  ProxyRequests Off
  ProxyPass / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
  ProxyPassReverse  / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
  ErrorLog /var/log/apache2/discourse.error.log
  LogLevel warn
  CustomLog /var/log/apache2/discourse.access.log combined

  RewriteCond %{SERVER_NAME} =discourse.example.com
  RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

注:force_https が設定されているにもかかわらず HTTP でサービスが提供されてしまう事象が発生したのは、/uploads ディレクトリにファイルが存在しない場合のみでした。これはもちろん、Apache2 と nginx のどちらをリバースプロキシとして使用するかの問題とは無関係です。