SSL化したVPSでConoHaのロードバランサーを導入する方法

著者:
投稿日:
更新日:

SharetubeをSSL化してロードバランサーを導入したかったんですが、ぶっつけ本番でやるのは少々厳しいので、ひとまずテストを行ってからやろうと思いこの記事を書いています。


結論、ぶっつけ本番でやらなくてよかったと心の底から思ってます。

やっぱり練習大事。

環境

・ドメインはお名前.comで管理

・ConoHaのVPSを2台

・1台目で最低限の構築をしている(必要なポート解放、Webサーバ、SSL化)

・1台目のイメージを取得

・2台目は1台目のイメージで作成

はじめに

上記の状態から始めます。


わからない方は

まずこの記事を読んでください。

まずはじめにヘルスモニタリストの作成する

プロトコルはPINGで作成しましょう。

ロードバランサーを作成・設定する

バランシング先の設定を行う

バランシング元ポートの設定

バランシング元ポートっていうのがあるのですが、こちらを80と443ともに設定


バランシング方法の設定

ラウンドロビンとリーストコネクションがあるのですが、開発・テストの場合はまずラウンドロビンにしましょう。本番になったらリーストコネクションに切り替えましょう。

ヘルスモニタの設定

こちらは先ほど作成したヘルスモニタで設定。

バランシング先IPアドレスの設定

先に作成しておいたVPS2台分のIPアドレスを設定。

ロードバランサー設定はこんな感じで

			

追記 httpにもhttpsにも対応する方法

上記のロードバランサー はSSL化したサーバーでhttpsですが

このままですとhttpでサイトに行きますとエラーになってしまいます


それを回避する意味合いと httpにもhttpsにも対応する意味合いで

バランシング元ポート80も443で設定したIPアドレスと同じ設定をしてください。

ラウンドロビンとは?

分散対象の仮想サーバーに順番にアクセスを振り分ける方式です。静的なコンテンツの多いWebサイトに向いています。

出典:ラウンドロビン!リーストコネクション!Webサーバーの負荷軽...

	

リーストコネクションとは?

最も少ないセッションの仮想サーバーにアクセスを振り分けます。セッションの保持が行われるWebサイトに向いています。

出典:ラウンドロビン!リーストコネクション!Webサーバーの負荷軽...

	

VPS側の設定

ロードバランサーのパケット転送方法はDSR方式です。VPSからクライアントへ直接パケットを転送する必要があり、ネットワークの設定を変更する必要があります。ここではCentOS6.6を例に、設定方法をご説明します。


ループバックインターフェイスを追加する方法とiptablesの設定を行う方法の二つがあります。

出典:ロードバランサーを使う|VPSならConoHa

	

ループバックインターフェイスを設定する方法

ループバックインターフェイスの設定ファイルを編集します。

設定した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レコード設定に行きましょう。

TYPEはAで

サブドメインなしの設定で

ConoHaで立てたロードバランサーのIPアドレスを登録してください。

これで設定完了です。

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化の記事はこちら

練習で使用したのは会社のサイトです

あれ?ロードバランサーを使用するとスクレイピングがうまくいかないのかもしれません。

スクレイピング機能強化する際に要研究です。

著者プロフィール
Sharetube