名前空間上でサブドメインを使用するのはいつですか?すなわちhttp://admin.foo.comVShttp : //foo.com/admin
または、api.foo.comとfoo.com/apiの外観も気に入っています。また、サブドメインの設定には少し注意が必要です。
名前空間上でサブドメインを使用するのはいつですか?すなわちhttp://admin.foo.comVShttp : //foo.com/admin
または、api.foo.comとfoo.com/apiの外観も気に入っています。また、サブドメインの設定には少し注意が必要です。
フォルダまたはサブドメイン内に別のアプリをマウントすることはWebサーバーにとって大きな問題ではありませんが、Railsアプリに/ adminアプリケーションと通常のアプリケーションの両方が含まれている場合、1つをサブドメインとして提供するのは難しくなります。
ありがたいことに、Railsルーターはこの点で非常に柔軟性があり、両方のシナリオをかなりうまくサポートします。
TLDR:Railsはルーティングエンジンを介して両方の方法をサポートしており、現時点では個人的な好みに依存します(ただし、サブドメインオプションはパスヘルパーではうまく機能しないと思われます)
/adminルート
ルートを実現するために/admin
、Railsはルーティングでの名前空間の概念をサポートしています。routes.rb
したがって、Railsアプリに/ admin領域がある場合は、次のように記述します。
namespace :admin do
resources :users
resources :posts
end
次に、/admin領域のコントローラーをcontrollers/ admin / .rbに配置し、クラスのプレフィックスとしてAdminを付ける必要があります(のようにAdmin::PostsController
)。
ほとんどのアプリケーションの管理領域は通常のアプリケーションのモデルと対話する可能性が高いため、名前空間を実行するのが最も便利な方法であると言って間違いないでしょう。
サブドメインルート
しかし、名前空間はサブドメインでも使用できます。
Railsルーターは、constraint
ブロックを定義し、これらのブロック内に名前空間を定義できます。したがって、上からadmin.example.comサブドメインでのみ名前空間をホストする場合は、次のように実行できます。
constraints(:subdomain => /admin/) do
namespace :admin do
resources :users
resources :posts
end
end
(私は制約機能について知りませんでしたが、このブログ投稿はそれを非常によく説明しているようです)
これには明らかに、admin.example.comとwww.example.comを同じRailsアプリケーションに提供するようにWebサーバーを構成する必要があります。
セッション(Cookieを介して達成)が引き継がれるかどうかはわかりませんが、これは理解できると思います。
もう1つの答えは実用性の問題に対処したと思いますが、純粋にセキュリティの観点からです。
管理者をサブドメインに配置することは、XSS攻撃からより隔離されているため、 Railsセキュリティガイドで推奨されています。
管理インターフェースをadmin.application.comなどの特別なサブドメインに配置し、独自のユーザー管理を備えた別のアプリケーションにします。これにより、通常のドメインwww.application.comから管理者Cookieを盗むことは不可能になります。これは、ブラウザの同一生成元ポリシーが原因です。www.application.comに挿入された(XSS)スクリプトは、admin.application.comのCookieを読み取れない場合があります。その逆も同様です。
したがって、セキュリティの観点から、管理者をサブドメインに配置する方が安全な場合があります。