Apache Workerモードで接続数アップ

Apache 2.2系の動作モードについて書きます。

■ Prefork と Worker

Apache 2.2系には動作モードが2種類あります。
Apache にはマルチプロセッシングモジュール(MPM)というものがあって、これを切り替えることで動作モードを切り替えます。

MPM には Prefork と Worker があります。

Preforkモード

これがデフォルト。
マルチプロセス、シングルスレッドモードです。
1接続=1プロセスです。
1人の1アクセスがサーバー上でApacheプロセスを1つ起動します。
もう1回アクセスすると別のApacheプロセスをもう1つ起動します。

Workerモード

マルチプロセス、マルチスレッドモードです。
1接続=1スレッドです。
1プロセスのスレッド数は ThreadsPerChild(デフォルト 25)で指定します。
1人の1アクセスがサーバー上のApacheプロセス内のスレッドを1つ起動します。
もう1回アクセスすると同Apacheプロセスのスレッド上限に余裕があればスレッドをもう1つ起動します。
こちらのほうが圧倒的にメモリ消費は少なくレスポンスのスピードが速いです。
続きを読む

Apache 同一IPからの同時複数接続制限

Apacheに対してダウンローダーなどで同時に複数接続してくる数を制限する設定について書きます。

同一IPからのApacheの接続を制限する拡張モジュール mod_limitipconn を使います。

■ mod_limitipconn インストール

(1) インストール

# yum install mod_limitipconn

(2) 設定

/etc/httpd/conf.d/limitipconn.conf


LoadModule limitipconn_module modules/mod_limitipconn.so

ExtendedStatus On

<IfModule mod_limitipconn.c>
    MaxConnPerIP 5
</IfModule>

※上記の例では、同一IPから同時には5接続まで許可します。

※サーバーへのアクセスは人単位では識別できず、接続元IPアドレスでしか識別できないことに注意が必要です。同じ地域に住む同じインターネット接続プロバイダのアクセスポイントを利用する複数の人々を1と数えるので、同一IPから1接続などあまり少ない接続数で制限すると問題です。せめて3~5以上にする必要があると思われます。

Tomcat 7 インストールと設定

CentOS/RHELに Tomcat 7 を yum でインストールする方法と、初期設定、デプロイの方法を書きます。

■ yum リポジトリ追加

準備として yum-priorities が必要

# yum install yum-priorities

yum リポジトリは JPackage

http://www.jpackage.org/
http://www.jpackage.org/browser/rpm.php?jppversion=6.0&id=13826

# rpm -Uvh http://mirrors.dotsrc.org/jpackage/6.0/generic/free/RPMS/jpackage-release-6-3.jpp6.noarch.rpm

続きを読む

Webサイトのアクセス数増加と必要メモリ

Webサイトのアクセス数が増加するのは単純に嬉しいものです。
商用サイトなら売り上げに関わってきますのである程度の認知度とアクセス数は必要不可欠と言えます。
アフェリエイト目的(広告収入目的)のサイトは特にアクセス数増加が収入に比例してくるので何が何でも増やしたいところでしょう。

ところで、Webサイトのアクセス数と、それに耐えうるサーバーのスペックについて、一般の方々はどれくらいの認識を持っているでしょうか?

大抵の人は、とても夢見がちです。

よくあるレンタルサーバー(専用サーバーじゃなく、root権限のないサーバー、他のユーザーと同居の共用サーバー)を使用していて、「あなたのホームページはサーバーに負荷をかけるから」ということで上位プランへ変更のお願いや、やんわりと出て行ってくれるように勧告を受けた人が、次にVPSや専用サーバーに移るとき、10万ページビューとか、ゆくゆくは100万ページビューなんてことを考えている場合があります。
専用サーバーで1ユーザーで独占使用になるのだから、最低クラスよりちょっと上のクラスを借りておけば大丈夫かな、なんて思うようです。

ところが現実は厳しいです。

Webサイトのアクセス数増加に耐えられるサーバーとして考えるべき点は、大きく3つ、メモリとCPUとディスクの速さがあります。
今回はメモリについて書きます。

■ Webサイトのアクセス数と消費メモリ

まず必要なメモリの問題があります。
これは単純でわかりやすい話です。
続きを読む

DNSラウンドロビンで負荷分散

複数のサーバーに同じコンテンツを置いて、DNSラウンドロビンで負荷分散する方法について書きます。

複数のサーバーに同じコンテンツを置くには、それぞれのサーバーにFTPでアップロードするか、なんらかの方法で同期させます。
lsyncd + rsyncd を使って自動同期させる方法もあります。別の投稿で書いていますので参考にしてください。

■ DNSラウンドロビン

DNSラウンドロビンとは、非常に単純な方法です。

設定としては、DNSサーバーあるいはレンタルDNSのゾーン設定において、1つのホスト名のゾーンタイプ A (IPアドレスの指定)を複数行設定し、1つのホスト名に複数のIPアドレスを割り付けます。

これだけです。

例)

domain.com.zone


...
...

www 	IN	A	111.111.111.111
www 	IN	A	111.111.111.222
www 	IN	A	111.111.111.333

A を複数設定しておくと、DNS正引きに対して設定されたIPアドレスのいずれかが返されます。

この例で、http://www.domain.com へのアクセスは、ときに 111.111.111.111、またときには 111.111.111.222 または 111.111.111.333 のサーバーへのアクセスになります。
完全にではありませんが、まあまあ、おおよそ均等にアクセスされると期待できますので負荷分散になります。

続きを読む

ワイルドカードSSLの申請

ワイルドカードSSLサーバー証明書の申請と設置方法を書きます。

(知ってる人には、何を今更な話ですが …)

前提条件として Apache / mod_ssl は普通に使える環境であるものとします。

■ ワイルドカードSSLサーバー証明書とは

FQDNのホスト名(サブドメイン名)の部分が何でも使えるSSLサーバー証明書のことです。

例)
www.very-cute.net
www2.very-cute.net
test.very-cute.net
demo.very-cute.net
shop.very-cute.net
hogehoge.very-cute.net
arecore.very-cute.net
...
など

これの申請方法、設置方法は、ワイルドカードじゃない普通のものとほとんど変わらず、CSRを作るときの1点だけが違います。

続きを読む

SSLの申請と設置

SSLサーバー証明書の申請と設置方法を書きます。

前提条件として Apache / mod_ssl は普通に使える環境であるものとします。

■ 事前準備

(1) OpenSSLがインストールされているか確認

# openssl version

OpenSSL 1.0.0-fips 29 Mar 2010
などと表示されればOK.

インストールされていなければインストール
# yum install openssl

(2) 申請書、証明書の保存場所を作成しておく

Apache の conf のパスに移動して

# cd /etc/httpd/conf/

# mkdir ssl.key
# mkdir ssl.csr
# mkdir ssl.crt

続きを読む

Apache チューニングの基本

Apache チューニングの基本的な考え方と設定について書きます。

(1) 基本的な考え方

ホームページのレスポンスを良くするには、まずは KeepAlive On!
そしてあとは MaxClient の調整。
これが基本です。

KeepAlive の正しいドキュメントはこれですが↓
http://httpd.apache.org/docs/2.2/ja/mod/core.html#keepalive

本来 KeepAlive とは一定時間接続をキープするという設定です。
接続をキープする時間を KeepAliveTimeout で設定します。

HTMLファイルとその中のimgタグは別リクエストなのは周知の事実ですが、それを踏まえて上記のマニュアルを見てください。

On にすると、複数のリクエストが(imgタグも)同じ TCP の接続で送られます。
逆に Off だと1リクエスト毎に(imgタグ毎に)1接続ずつ必要です。

接続をキープする時間が長すぎるとホームページから去った人の接続も解放されず溜まっていきます。
それはそれで問題で、KeepAliveTimeout 2 くらいがよいとされています。

続きを読む

Apache2.2 インストールと設定

CentOS/RHELに Apache2.2 を yum でインストールする方法と、いつもやる最低限の初期設定を書きます。

■ Apache2.2 と mod_ssl (yum配布版rpm)

(1) インストール

SSLを入れない理由もないので mod_ssl も同時に入れます。

# yum  -y install httpd mod_ssl

(2) ファイル構成

/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/README
/etc/httpd/conf.d/ssl.conf
/etc/httpd/conf.d/welcome.conf

この中で重要なのはメインの設定ファイル httpd.conf です。
SSLの設定は ssl.conf で行います。

続きを読む

サービス化してない apache のログローテート

logrotate というツールがあります。

これはサーバーのログを定期にファイル名を変更して世代管理してくれるものです。

特に apache のログは定期的な整理、削除をしないと肥大化していってディスクを食いつぶしますのでこの手のツールは必須と言えます。

ところで、apache が yum でインストールされていれば話は簡単ですが、特定バージョンのソースを持ってきてビルドしてインストールしてある場合はちょっと困ったことになります。

普通、logrotate をインストールすると、自動的に apache のログ整理用の設定ファイルが出来ますが、apache がビルドインストールだと、それがうまくいきません。
標準の apache のインストール先にモジュールが無いのがいけないでしょうか。

そんなときの対処方法を書いておきます。

(1) logrotate ファイル構造

/etc/logrotate.conf
/etc/logrotate.d/
	acpid
	httpd
	mgetty
	munin
	・
	・
	・
	サービスやモジュール毎の設定ファイル諸々

続きを読む