はじめに
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でも紹介しています。
railsの前段にnginxを配置するかどうか疑問だったけど、このプルリクを見るとデフォルトで静的ファイル配信を行うようになっているから、nginxの代わりにCDNを前段に置く構成で良さそうhttps://t.co/yztmAwHA2c
— Takuya Harayama (@harayama22) July 17, 2024
結論
AWSなどのクラウドサービスを使った構成であればNginxは必要ないと思います。
ただし、CDNやロードバランサーが使えない環境であればNginxがあった方がいいと思います。
個人的にはNginxの管理コストは無くしたいので、基本は使わない方針を取ると思います。
スポンサーリンク
コメント
Comments are closed.