追記(2023.09.13)
X にて、この記事が引用されて多くの議論が投稿されました。
それらの多くは以下の通り「ALB等の利用できる環境の現代であればもうNginxコンテナは不要」という内容が多数です。
その上で、本文に入って頂ければと思います。一部「いいね」が多いポストを貼り付けさせていただきます。
本文にショートカットしたい場合は、ここをクリック
ここから本文
以前、チームで以下のような会話が生まれました。
「コンテナに nginx 立てずに、直で rails Appサーバに ALB から流せばいいじゃん?」
みたいな話。その際に理由を即座にレスできなかったので、調査しました。
- puma や Unicorn はあくまでAppサーバなのでユーザ直アクセス用途として設計されていない
- バッファリング処理が弱い
- バッファリング処理(処理速度や処理にかかる時間の違いを調整すること)
- nginxから静的ファイルを配信するような構成も後からできる
- App側で静的ファイルの配布すると遅いが、CloudFrontを持ち出すまでもないような構成の場合など
- 本番環境では様々なアクセスを想定して nginx を前段において裁くことを想定すべき
- Webサーバのアクセスログは解析とかする際に都合が良い
的な理由が多いです。ALB とか WAF でも事前に裁くことができますが...
ちなみに
config/environments/production.rb
には以下のようなコメントがあります。
# Apache or NGINX already handles this.
config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
つまりRails思想としては、Railsサーバーの手前(まさに前段)にApacheやNginxを設置する前提がベースだったと言えます。