SSL化したVPSでConoHaのロードバランサーを導入する方法
SharetubeをSSL化してロードバランサーを導入したかったんですが、ぶっつけ本番でやるのは少々厳しいので、ひとまずテストを行ってからやろうと思いこの記事を書いています。結論、ぶっつけ本番でやらなくてよかったと心の底から思ってます。
やっぱり練習大事。
環境
・ドメインはお名前.comで管理・ConoHaのVPSを2台
・1台目で最低限の構築をしている(必要なポート解放、Webサーバ、SSL化)
・1台目のイメージを取得
・2台目は1台目のイメージで作成
はじめに
上記の状態から始めます。わからない方は
まずこの記事を読んでください。
VPSの構築をマスターする手順書 in ボクとサーバの2週間戦争。
http://sharetube.jp/article/4642/
このまとめは Programmer box の記事です ProgrammerBOX -プログラマーボックス-http:programmerbox.comプログラマーボックスは主にPHP,CSS3,JavaScriptのコード...
ConoHa(コノハ)のVPSでSSL証明書の取得を行いHTTP通信できるようにし...
http://sharetube.jp/article/12274/
はじめに ボタンをポチポチ押してSSL化する方法ではなくコマンドを使用して構築する方法を説明いたしますのである程度のサーバサイドの知識がある向けに書きます。 VPSの構...
まずはじめにヘルスモニタリストの作成する
プロトコルはPINGで作成しましょう。
https://www.conoha.jp/guide/loadbalancer.php
ConoHaのVPSはひと月630円から。最新CPU搭載、超高速SSDを採用した、高性能なのにかんたんに使えるVPSです。今だけお得なキャンペーンも実施中。
案外雑に説明いたしますので細かい説明は公式を見てください。
ロードバランサーを作成・設定する
バランシング先の設定を行う
バランシング元ポートの設定
バランシング元ポートっていうのがあるのですが、こちらを80と443ともに設定。バランシング方法の設定
ラウンドロビンとリーストコネクションがあるのですが、開発・テストの場合はまずラウンドロビンにしましょう。本番になったらリーストコネクションに切り替えましょう。ヘルスモニタの設定
こちらは先ほど作成したヘルスモニタで設定。バランシング先IPアドレスの設定
先に作成しておいたVPS2台分のIPアドレスを設定。
追記 httpにもhttpsにも対応する方法
上記のロードバランサー はSSL化したサーバーでhttpsですがこのままですとhttpでサイトに行きますとエラーになってしまいます
それを回避する意味合いと httpにもhttpsにも対応する意味合いで
バランシング元ポート80も443で設定したIPアドレスと同じ設定をしてください。
ラウンドロビンとは?
分散対象の仮想サーバーに順番にアクセスを振り分ける方式です。静的なコンテンツの多いWebサイトに向いています。
リーストコネクションとは?
最も少ないセッションの仮想サーバーにアクセスを振り分けます。セッションの保持が行われるWebサイトに向いています。
VPS側の設定
ロードバランサーのパケット転送方法はDSR方式です。VPSからクライアントへ直接パケットを転送する必要があり、ネットワークの設定を変更する必要があります。ここではCentOS6.6を例に、設定方法をご説明します。ループバックインターフェイスを追加する方法とiptablesの設定を行う方法の二つがあります。
ループバックインターフェイスを設定する方法
ループバックインターフェイスの設定ファイルを編集します。設定したVPS2台共に設定してください。
設定ファイル開く
vi /etc/sysconfig/network-scripts/ifcfg-lo:0
開いて下記を記述して保存する
DEVICE=lo:0
IPADDR=[ロードバランサーのバーチャルIPアドレス]
NETMASK=255.255.255.255
ONBOOT=yes
network再起動
service network restart
最後の仕上げにロードバランサーのIPアドレスでお名前.comに行きDNSを設定をする
最初でもいいのですが、ここに持ってきました。お名前.comさんにログインして
ドメイン設定のページに行き
DNS関連機能の設定→DNSレコード設定に行きましょう。
これで設定完了です。DNSの設定は時間がかかるのではじめにやっておいたほうがいいかもしれません。
追記 メールサーバは別に立てる
メールサーバーも利用したいって方はimap、mail、pop、smtpを
VPS3台目のIPアドレスでDNS設定を行いましょう。
追記 通信をhttpsに統一するには
いろんな手法があると思いますが、スクリプト管理するのが一番楽です(ここではphp)フレームワークを使用すれば絶対に通すファイルがありますのでそこにこれを記述するだけで自動でhttpsに統一されます。
フレームワークを使用しない場合でもインクルードさせるマスター、クラスなどを決めて
全てのファイルで読み込むようにするだけで自動でhttpsに統一されます。
$https = "https://";
$https_HTTP_HOST = $https.$_SERVER["HTTP_HOST"]."/";
$REQUEST_URI = $_SERVER["REQUEST_URI"];
$url = $https_HTTP_HOST.$REQUEST_URI;
if( preg_match("/^www./", $_SERVER["HTTP_HOST"]) ) {
$https_HTTP_HOST = $https.preg_replace("/^www./", "", $_SERVER["HTTP_HOST"]);
$url = $https_HTTP_HOST.$REQUEST_URI;
header("Location: $url", true, 301);
exit;
if( preg_match("/index.php
$REQUEST_URI = preg_replace("/index.php
$url = $https_HTTP_HOST.$REQUEST_URI; header("Location: $url", true, 301);
exit;
// ルート
if( preg_match("/^/$/", $_SERVER["REQUEST_URI"]) ) {
// ルート以外
else if( preg_match("////", $_SERVER["REQUEST_URI"]) ) {
$REQUEST_URI = preg_replace("///", "", $REQUEST_URI);
$REQUEST_URI = $REQUEST_URI;
$url = $https_HTTP_HOST.$REQUEST_URI;
header("Location: $url", true, 301);
exit;
}
if($_SERVER["HTTPS"] == null) {
$https = "https://";
$https_HTTP_HOST = $https.$_SERVER["HTTP_HOST"];
$REQUEST_URI = $_SERVER["REQUEST_URI"];
$url = $https_HTTP_HOST.$REQUEST_URI;
header("Location: $url", true, 301);
exit;
?>
urlゆらぎも取り除くことによってSEO対策にもなるのでPVを狙うのであれば必須です。
追記 サーバを再起動してから正常に動かすためのコマンド
ロードバランサー (今回のやり方)を使用したサーバでは再起動するとhttpdがエラーとなり正常に動きません。理由は
httpdが異常終了などをして古いhttpdプロセスが残っていることが原因です。
ですので、ささっとこのhttpdプロセスをキルしましょう。
lsofコマンドで古いプロセスを表示
lsof -i
表示例
httpd 27512 apache 4u IPv6 90360 0t0 TCP *:http (LISTEN)
httpd 27520 apache 4u IPv6 90360 0t0 TCP *:http (LISTEN)
ここで言うと27512, 27520のidのプロセスが残っておりますのでキルしましょう。
killコマンドで削除
kill -9 27512
kill -9 27520
キルを行いましたらhttpdを再起動しましょう。
httpd再起動
service httpd restart
これでhttpdエラーを正常にする事に成功しました。
SSL化の記事はこちら
ConoHa(コノハ)のVPSでSSL証明書の取得を行いHTTP通信できるようにし...
http://sharetube.jp/article/12274/
はじめに ボタンをポチポチ押してSSL化する方法ではなくコマンドを使用して構築する方法を説明いたしますのである程度のサーバサイドの知識がある向けに書きます。 VPSの構...
練習で使用したのは会社のサイトです
あれ?ロードバランサーを使用するとスクレイピングがうまくいかないのかもしれません。スクレイピング機能強化する際に要研究です。
スペースナビの公式ホームページ。営業進捗サービス運営、メディア運営、マイニング、マイニングリグ販売を手がける株式会社です。
こちらが正しい表示です。