サブドメインをワイルドカードに対応させる
みなさんこんにちは。
意識高い系エンジニアの僕です。
よく見かける[任意の文字列].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-contrib
はsinatra
でcookie扱う時に必要みたいだったので入れました
※ AmazonEC2のAmazon Linuxを使っています
この検証のゴール
- サブドメインの部分を任意に変えてアクセスできる
- アクセスしたサブドメイン部分の文字列を取得して画面に表示してみる
- サブドメイン間でcookieを共有できる事を確認する
実現方法
ドメインの設定
対象のドメインに対してワイルドカードを有効にします。
今回はAレコードとして* を設定して対応しました。
設定値:*.proletariat.jp
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/
public
とtmp
ディレクトリは空です。
- 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
にしています。
サブドメイン部分の文字列が表示され、アクセスカウントもサブドメイン間で共有されているのを確認しました。
ワイルドカードのサブドメインを運用する上での注意事項
- localhostでcookieが共有されないようです(主に開発時に困る)
- プロキシなどを使えば対応できるようです
- SSL証明書
- SSL証明書はワイルドカードのドメインに対応したものが必要になります
- Ajaxクロスドメインリクエスト制約の問題
- ドメインが違うため、サブドメイン間でのAjaxリクエストができません。
- Access-Control-Allow-OriginをWebサーバ側で設定するなどの対応が必要です。
新しいことや難しい課題に挑戦することにやりがいを感じ、安定やぬるい事は退屈だと感じます。 考えるより先に手が動く、肉体派エンジニアで座右の銘は諸行無常。 大事なのは感性、プログラミングにおいても感覚で理解し、感覚で書きます。
TAG
- Android
- AWS
- Bitrise
- CodePipeline
- Firebase
- HTML
- iOS
- IoT
- JavaScript
- KPI
- Linux
- Mac
- Memcached
- MGRe
- MGReのゆるガチエンジニアブログ
- MySQL
- PHP
- PICK UP
- PR
- Python
- Ruby
- Ruby on Rails
- SEO
- Swift
- TIPS
- UI/UX
- VirtualBox
- Wantedly
- Windows
- アクセス解析
- イベントレポート
- エンジニアブログ
- ガジェット
- カスタマーサクセス
- サーバ技術
- サービス
- セキュリティ
- セミナー・展示会
- テクノロジー
- デザイン
- プレスリリース
- マーケティング施策
- マネジメント
- ラボ
- リーンスタートアップ
- 企画
- 会社紹介
- 会社紹介資料
- 勉強会
- 実績紹介
- 拡張性
- 採用
- 日常
- 書籍紹介
- 歓迎会
- 社内イベント
- 社員インタビュー
- 社長ブログ
- 視察
- 開発環境