Apache で大量アクセスが来たとき負荷を上げない設定

Apache で同時接続数の設定(2.2 では MaxClients、2.4 では MaxRequestWorkers)より大量アクセスが来たとき負荷を上げないためのちょっとした工夫について書きます。

MaxClients をいくら下げてもサーバー負荷が下がらないじゃないか!とお困りの諸氏に …

それはとても簡単で、ListenBacklog を少なめ(例えば 1 とか)に設定します。

Apache のマニュアルには、こう書かれていますが・・・
———-
ListenBacklog
保留状態のコネクションのキューの最大長です。 一般的には調整する必要はありませんし、調整は望ましくありません。 しかし、TCP SYN フラッドアタックの状況下におかれる場合に、 増やした方が望ましいシステムもあります。 listen(2) システムコールのバックログパラメータを ご覧下さい。
———-
これを読むと、ListenBacklog は調整不要、するとしても大きくする方向で、と思ってしまいますよね。
でも違います。逆です。
続きを読む

Apache2.4 PHP7等ミドルウェア各種対応

下記ミドルウェアの取扱が可能になりました。
以下は CentOS7 はもちろん、CentOS6 においてもインストール/設定が可能です。
(現使用環境の条件によってはできない場合があります)

・Apache 2.4
(Prefork / Worker / Event ともに可)

・PHP 7
(mod_php / php-fpm ともに可)

・MySQL 5.6
(旧バージョンからのアップデートではデータベースが引き継げないことがあります)

mod_dosdetector でDoS攻撃を503 ビジーにする方法

WebサイトへのDoS攻撃に対処するため mod_dosdetector-fork をインストールしてみたけど、RewriteRule で 503 に飛ばせないとお嘆きの諸氏に。

■ mod_dosdetector-fork インストール

(1) ビルド環境などの準備

yum -y install make gcc gcc-c++
yum -y install unzip
yum -y install httpd-devel
yum -y install git

(2) Apache2.2環境にインストール

Apache 2.2で使用したい場合は maint-1.0.0 を入れる。

cd /usr/local/src
wget https://codeload.github.com/tkyk/mod_dosdetector-fork/zip/maint-1.0.0
mv maint-1.0.0 mod_dosdetector-fork-maint-1.0.0.zip
unzip mod_dosdetector-fork-maint-1.0.0.zip
cd mod_dosdetector-fork-maint-1.0.0

make
make install

(3) Apache2.4環境にインストール

Apache 2.4で使用したい場合は git で最新を入れる。

cd /usr/local/src
git clone git://github.com/tkyk/mod_dosdetector-fork.git
cd mod_dosdetector-fork

make
make install

続きを読む

Apache 2.4 LocationでBasic認証

ちょっとした小ネタです。

例えば phpPgAdmin.conf がこんなふうになってるとき、

Alias /phpPgAdmin /usr/share/phpPgAdmin

<Location /phpPgAdmin>
    <IfModule mod_authz_core.c>
        # Apache 2.4
        Require all granted
    </IfModule>
</Location>

この場所に .htaccess を置いてBasic認証書いても効きません。
それは、Location の “Require all granted” が優先だから。

そんなときは、Location を Directory に変更すれば、.htaccess が優先されます。

Alias /phpPgAdmin /usr/share/phpPgAdmin

<Directory /usr/share/phpPgAdmin>
    <IfModule mod_authz_core.c>
        # Apache 2.4
        Require all granted
    </IfModule>
</Directory>

Apache2.4 インストールと設定(CentOS 6)

CentOS 6 に Apache2.4 PHP 5.6 を yum でインストールする方法を紹介します。

■ Apache2.4インストール (IUS版)

(1) 外部リポジトリIUSを使用

リポジトリIUSからインストール可能です。

# rpm -Uvh https://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ius-release-1.0-14.ius.centos6.noarch.rpm

(2) Apache2.4インストール

リポジトリIUSを使用するとパッケージ名が違います。
httpd は httpd24u、mod_ssl は mod24u_ssl です。

# yum install httpd24u mod24u_ssl

httpdの自動起動(CentOS 6)

# chkconfig httpd on

続きを読む

Webサーバーの同時接続数と Google Analytics セッション数(訪問数)の違い

Webサーバーの同時接続数と Google Analytics セッション数(訪問数)の違いについて書きます。

■ Webサーバーの同時接続数とは

Webサーバー(Apache や Nginx)の同時接続数とは、同時アクセス数と言い換えてもいいですが、その言葉の通り Webサーバーに同時に接続しているブラウザ数(=ユーザー数)です。
これは表示されたページを眺めている人の数でなく、今まさにページを読み込んで表示している人の数です。

この数値はサーバーの負荷分析と必要十分なスペックを考察する上で非常に重要な値です。
同時接続数がいくらの時にサーバーのロードアベレージがいくらかはだいたい比例します。
サーバーがアクセスピーク時に瞬間的にどれだけの負荷に耐えられるかを決めるのは、瞬間的にどれだけの同時接続数をさばけるかにかかっています。

Webサイト運営の指標に1日のトータルのページビューや Google Analytics のセッション数やリアルタイムのアクティブユーザー数がありますが、これはWebサイト運営に必要なサーバースペックを決める観点からは参考程度にしかならず、本当に必要なデータは同時接続数です。

続きを読む

自己署名SSLサーバー証明書の作成

自己署名のSSLサーバー証明書の作成方法を書きます。

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

■ 自己署名のSSLサーバー証明書とは

通常 SSLサーバー証明書は然るべき認証局(VeriSignとかジオトラストとか)が発行し、それには電子署名が施されており、コモンネーム(運用するFQDN=フルドメイン名)が確かなものであると証明します。
この電子署名を認証局にやってもらわずに自分で OpennSSL の機能で施すことが自己署名です。

自己署名の証明書は信頼性に欠けるとしてブラウザなどのクライアントソフトウェアではエラーや警告メッセージが表示され、フィッシングサイト、怪しいサイトであるような印象を与えます。
しかしながらデータの暗号化という観点だけを見れば認証局が署名したものと全く同等であり、暗号化の観点でセキュリティは劣りません。
ですからデータの暗号化が目的なだけなら自己署名でよい場合もあります。
続きを読む

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

続きを読む