12
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

サブドメインをワイルドカードに対応させる

Last updated at Posted at 2015-10-15

よく見かける[任意の文字列].example.comのような設定をしてみたいと考えたのですが、やったことが無かったので検証してみました。

動かすサンプルのWebアプリとしては、簡単に動かせるsinatraにしようと思います。
Webサーバは使い慣れたApacheを使います。
アプリケーションサーバとしてはPassengerを使います。

検証環境

  • Apache 2.2.29
  • Passenger 5.0.13
  • ruby 2.2.2
  • sinatra 1.4.6
  • sinatra-contrib 1.4.6

sinatra-contribsinatraでcookie扱う時に必要みたいだったので入れました
※ AmazonEC2のAmazon Linuxを使っています

この検証のゴール

  • サブドメインの部分を任意に変えてアクセスできる
  • アクセスしたサブドメイン部分の文字列を取得して画面に表示してみる
  • サブドメイン間でcookieを共有できる事を確認する

実現方法

ドメインの設定

対象のドメインに対してワイルドカードを有効にします。
今回はAレコードとして* を設定して対応しました。

設定値:*.proletariat.jp

e4ee797a-451e-494c-a0ca-606b60611f63 copy.png (59.5 kB)

CNAMEでも設定できるので、ELBなどを使っている場合はCNAMEで同様の設定をすれば良いと思います。

Apacheのインストール

yumでApacheをインストールしました。

Ruby環境のインストール

rubyはrbenvでインストール。
sinatra,sinatra-contrib,passengerははgemでインストールしました。

Apacheの設定

主にバーチャルホストの設定とPassengerの設定ですが、/etc/httpd/conf.dの下にそれぞれ分けて設定しました。

Apache実行ユーザとPassengerの実行ユーザはec2-userに変えてあります。
(本来はApacheの実行ユーザにec2-userを設定するのは不適切だと思います。)

passengerの設定

  • /etc/httpd/conf.d/passnger.conf
LoadModule passenger_module /home/ec2-user/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/passenger-5.0.13/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /home/ec2-user/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/passenger-5.0.13
  PassengerDefaultRuby /home/ec2-user/.rbenv/versions/2.2.2/bin/ruby
  PassengerUserSwitching off
  PassengerDefaultUser ec2-user
</IfModule>

バーチャルホストの設定

  • /etc/httpd/conf.d/vhost.conf
NameVirtualHost *:80
<VirtualHost *:80>
  ServerName *.proletariat.jp
  DocumentRoot /var/www/html/app/public
  RackEnv production
</VirtualHost>

sinatraの配置

以下の4つのファイルを配置します。

/var/www/html/app

  • config.ru
  • hello.rb
  • public/
  • tmp/

publictmpディレクトリは空です。

  • config.ru
require File.expand_path(File.dirname(__FILE__)) + '/hello'
run Sinatra::Application
  • hello.rb
require 'sinatra'
require 'sinatra/cookies'

set :cookie_options, { domain: '.proletariat.jp', path: '/' }

get '/' do
  cookies[:access_count] = cookies[:access_count].to_i + 1
  "Hello #{request.host.split('.').first}! 只今のアクセス回数#{cookies[:access_count].to_i}"
end

アクセス時にサブドメインの部分とアクセス回数を表示しています。

アクセス回数はサブドメイン間で共有されたcookieから表示しています。

cookieをサブドメイン間で共有させるために、cookieのドメイン設定を.proletariat.jpにしています。

スクリーンショット 2015-07-15 14.07.06.png (22.9 kB)

スクリーンショット 2015-07-15 14.07.24.png (23.8 kB)

サブドメイン部分の文字列が表示され、アクセスカウントもサブドメイン間で共有されているのを確認しました。

ワイルドカードのサブドメインを運用する上での注意事項

  • localhostでcookieが共有されないようです(主に開発時に困る)
    • プロキシなどを使えば対応できるようです
  • SSL証明書
    • SSL証明書はワイルドカードのドメインに対応したものが必要になります
  • Ajaxクロスドメインリクエスト制約の問題
    • ドメインが違うため、サブドメイン間でのAjaxリクエストができません。
    • Access-Control-Allow-OriginをWebサーバ側で設定するなどの対応が必要です。
12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?