• follow us in feedly
scroll_icon
shuffle_button
SSL化したVPSでConoHaのロードバランサーを導入する方法

サムネイル出典:

殿堂

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

Author:
ProgrammerboxProgrammerbox
Posted date:
Update date:2019年05月08日
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に統一されます。
<?php
	$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|index.html/", $_SERVER["REQUEST_URI"]) ) {
	 $REQUEST_URI = preg_replace("/index.php|index.html/", "", $_SERVER["REQUEST_URI"]);
	 $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 | grep http

# 表示例
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の最新記事をお届けします

著者プロフィール
Programmerbox

Sharetube中の人「マツオカソウヤ」がプログラミング・webデザインなどの情報をまとめるチャンネル。