Railsの前段にNginxは必要なのか

  • このエントリーをはてなブックマークに追加

スポンサーリンク

はじめに

Railsアプリケーションの開発において、Nginxを前段に置くべきかどうか疑問に思っていました。

私が調べた限りでは、Nginxがなぜ必要なのか?といった必要である理由を書いている情報は見つかるのですが、無くても良い場合という情報があまり見つかりませんでした。

確かに2020年くらいまでは本番運用する際には、Nginxを前段に置いた構成が一般的だったと思います。

この記事では、Railsの生みの親であるDHHのコメント等を紹介しつつ、RailsアプリケーションにおいてNginxが本当に必要かどうかについて考察してみたいと思います。

Railsの設定はどうなっているのか

Railsには以下のように、環境変数によってpublic/assetsなどの静的ファイルをRailsが配信するか設定できる機能がありました。

config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

デフォルトではこの環境変数は設定されていないと思うので、falseになります。

Nginxを利用する場合は環境変数を設定せず、Nginx側の設定で静的ファイルを配信する感じですね。

Herokuを使っていると自動的にこの環境変数が設定されたりします。

個人的な意見

個人的にはクラウド環境であれば、CDNやロードバランサーなどを使えばNginxは不要だと思います。

Nginxのメンテナンスができるチームであれば良いですが、小規模チームの場合はNginxの管理コストが発生します。

あとAPIモードで開発している場合も特に不要かなと思います。

なので出来るだけマネージドサービスを使いつつ、Railsだけに集中して開発できる方が良いと思います。

DHHのコメント

Rails7.2のアップデート情報を見ていた時に、DHHが前述の設定をデフォルトでtrueにするプルリクエストを出しているのを見つけました。

https://github.com/rails/rails/pull/47137

詳細はプルリクエストを見ていただければと思いますが、以下のようなコメントが書いていました。

翻訳しています。

最新のデプロイメントでは、CDNやキャッシュLBを前面に使用する場合、NGINX/Apacheは必要ありません。 つまり、ファイルサービングもすぐに動作します。

https://github.com/rails/rails/pull/47137

DHHがこのようにコメントしていることから、クラウド環境であれば限りNginxは必要ないのかなと思います。

ちなみにこのプルリクエストはXでも紹介しています。

結論

AWSなどのクラウドサービスを使った構成であればNginxは必要ないと思います。

ただし、CDNやロードバランサーが使えない環境であればNginxがあった方がいいと思います。

個人的にはNginxの管理コストは無くしたいので、基本は使わない方針を取ると思います。

スポンサーリンク

  • このエントリーをはてなブックマークに追加