今日、うちのサイトがアクセス出来ないようになっていた。
SSHで接続できなかったので、直接コンソールを使って見てみた所、Apacheが必死にメモリが足りないよ的なエラーを吐き出していました。
ログイン後にコマンドすら打てない状態になってたので、再起動させて何とか復旧しました。
こんな状態になったのは初めてだったんだけど、鯖の少ないメモリを何とかやりくりして動かしているのだから仕方が無いか・・・。
一番メモリが動きそうなのはApache2なので、設定を眺めていたらMaxRequestsPerChildが0と書いてあった。
このMaxRequestsPerChildは長い期間起動させっぱなしのプロセスはメモリリークを起こす可能性があるので、この項目の回数を処理したらプロセスを再起動させてくれるのだが、0になってるとやってくれない。
とりあえず、適当に50にしてみた。
他の項目もいじりたいけど、起動最大数とかは下げた記憶があるんだよね・・・。
ともかくデフォルトだと再起動はしてくれないので、次にセットアップするような機会があったら忘れないようにしよう。

カテゴリ/タグ:私の記憶領域 /    
コメント (0)

Web鯖で特定の人間だけに見せたい領域がある場合パスワード認証をかけるわけだが、昔ならBasic認証を使ってパスワードをかけるようだが、安全ではないので変わりにDigest認証を使うらしい。
以下、その方法。

まず、対象のディレクトリに対する設定。
やり方は二種類あって、「設定ファイルに直接書き込む方法」と「.htaccessを使う方法」があります。
公開されているディレクトリが絶対パスが「/www」で、認証をかけたいディレクトリが「/www/test」だった場合を想定。
以下、設定ファイルを使う場合。

<Directory "/www/test">
    AuthType Digest
    AuthName "private zone"
    AuthDigestDomain /test/
    AuthUserFile /etc/apache2/.htdigest
    Require valid-user
</Directory>

以下、.htaccessを使う場合。
対象のディレクトリに.htaccessを作って書き込む。

AuthType Digest
AuthName "private zone"
AuthDigestDomain /test/
AuthUserFile /etc/apache2/.htdigest
Require valid-user

AuthNameは領域を示す文字列で、認証を求めたユーザのダイアログに表示されたり、保護する範囲(後述)を決めたりする。
AuthUserFileは認証するユーザが書かれたファイルで、コマンドで作成する。
このファイルは何処にでも置けるので、外部から見えない位置に置いておくのが良い。
Requireはアクセスできるユーザを指定する事が出来ます。
「user hoge」を指定した場合は、ユーザhogeのみがアクセス出来るようになり、「valid-user」の場合はAuthUserFileに書かれているユーザ全てがアクセス出来るようになる(「group hoge」という指定もあるが、説明が増えるのでここでは省く)。
AuthDigestDomainは対象ディレクトリを指定する所だと思うが、省略しても動く謎の設定。
説明を読んだ感じでは、保護するディレクトリのルートは最低でも指定した方が良いらしい(指定しないと、無駄なヘッダーのやり取りが発生したりする)。
他のホストと認証を共有したりする時も使用するそうだが、使う事も無いと思うので保護するルートディレクトリのみを書いておけばよいだろう。

認証するユーザを作成します。
htdigestというコマンドを使用して作成します。
ファイルの作成する場所は「/etc/apache2/.htdigest」で、領域は「private zone」、ユーザ名は「hoge」を例とします。

# htdigest -c /etc/apache2/.htdigest "private zone" hoge

新規作成時のみオプション「-c」を付けてください。
ここで領域が出てきましたが、このユーザ(hoge)が認証に成功した場合、ここで指定された領域(private zone)と設定ファイルのAuthNameで書かれた領域が一致したディレクトリは、認証の有効期限(ブラウザ終了とか)が続く限り認証作業を省略してアクセスする事が出来ます。
これを使えば細かく制御が出来そうです。

カテゴリ/タグ:私の記憶領域 /    
コメント (0)

WordPressの重さに耐え切れず、スペックをアップさせたWeb鯖に載せ替えた時の記録。

使用OS:DebianLinux(lenny)

OSのインストールは最低限でデスクトップ環境のチェックは外して、標準システムのみ。
特筆するべき点はないので、普通にインストールする。

いらないサービスを削除する。
どんなポートが待機しているかは「netstat -lap」で確認する。
portmap関係とsmtpあたりが稼動していると思われる。
portmap関係は使わないし停止。
smptはexim4が稼動してると思うが、私はqmail派なので停止して後でqmailを入れ直す。

# apt-get remove portmap exim4-base

netstatで確認すると、しばらくsunrpcが見えているが時間が経つと消えているはず。
これで開いているポートは無くなるはずなので、必要な物を入れていく。
デフォルトのapt-getの設定だとqmailが入らないので、/etc/apt/sources.listの各行に「contrib non-free」を追加して以下のコマンドを打っておく。

# apt-get update

椅子に座って作業したいので、リモートログインのsshを入れる(笑)
これでディスプレイも取り外せます。

# apt-get install ssh

ftpでファイル転送する為にproftpdを入れる。
途中でstandaloneかinetdのどちらで起動するか訊かれるので、特に常時使うものじゃないのでinetdを選んどきましょう。

# apt-get install proftpd

インストール完了後に設定ファイル/etc/proftpd/proftpd.confをいじって、「ListOptions ”-la”」にしてドット付きのファイルを表示できるようにしておく。
そういえばセットアップしてる途中で気がついたんだが、debianのTCP Wrapperってデフォルトは何も書いてないんだな・・・。
適切に設定してあげてください。

データベースのMySQLをインストールする。
インストール中にMySQLのrootパスワードを訊かれるので、適宜入力しておく。

# apt-get install mysql-server

設定ファイルが/etc/mysql/my.cnfにあるので、接続時にDNSを見に行かないようにする「skip-name-resolve」を入れて、各種設定をいじって使用メモリを上げときます。
今回は旧鯖よりデータを保存されているファイルを直接コピー&ペーストで突っ込むので、メンテナンスユーザーのパスワードで引っかかるので、まずMySQLを停止して/etc/mysql/debian.cnfのパスワード部分を旧鯖のパスワードに書き換えた後に、/var/lib/mysql以下を旧鯖から持ってきて置き換えれば、移転完了である。
作業はMySQLをちゃんと止めて行う事。

ようやくApache2を入れる。
PHP5も一緒に入れて、WordPressも動くように準備しておく。

# apt-get install apache2 php5 php5-gd php5-mysql

何も訊かれずに全部入っていくので、インストール終了までやる事なし。
php5-gdを入れないと画像のサムネイルとか作れないので忘れずに入れておこう。
バーチャルホストの設定やらなんやらをやって、再起動。

コンタクトフォームとかコメント書かれた時にメールを飛ばしてくれるようにする為にMTAにqmailを入れる。
パッケージ化されていないのでソースを持ってきてビルドする事になる。
まあ、apt-getで持ってこれるからコマンドを一杯打つだけだ。

# apt-get install qmail-src ucspi-tcp-src
# build-ucspi-tcp
# build-qmail

build中に色々訊かれるが、エンターを押していけばちゃんと入ってくれる。
入れ終わったら、/etc/qmail内に設定を書いていけば終了。

これで稼動するはずです。
後はバックアップ体制を整えたりとかすればオッケーだ。

表向きの鯖のDebianをetchからlennyにした時の影響でApache2でこんなエラーが出るようになった。

NameVirtualHost *:80 has no VirtualHosts

一応、そのままでも動いている雰囲気。
むかーしにそんなエラーがあったと思うんだけど、ピンと来たので探してみたら、やっぱりあった。
Apache2の設定にports.confという設定ファイルがあって、そこに「NameVirtualHost *:80」があった。
どうも、中身が書き換わったっぽい?
この記事のような設定をしてあった場合、NameVirtualHostの設定が二つになるのでエラーになるらしい。
ports.confのNameVirtualHostを#でコメントアウトしちゃえばエラーが出なくなります。

なんか、大規模バージョンアップで毎回エラーが出て困るな。
他にもエラー出てたし・・・。

カテゴリ/タグ:私の記憶領域 /  ,    
Apache2で「NameVirtualHost *:80 has no VirtualHosts」の対処 はコメントを受け付けていません

鯖を立て替えたので、ついでに忘れてた事をメモしていく。
問題はWeb鯖がちんだら、これが見れないということか・・・。

同一IPで違うサイトを運営するには、バーチャルホストを使わないと実現できない。
URLの違いで判別する設定。
設定ファイルを/etc/apache2/sites-availableに作って、/etc/apache2/sites-enabledでリンクを作れば実行される。
その際に、既存の設定は反映させないようにリンクを消しておく。(デフォの設定は使わないし、NameVirtualHostの設定が既に書いてあるから、怒られる)
VirtualHostタグをいくつも付けていけば、その分だけホストが増設できる。
ServerNameの部分でサイトの振り分けを認識してくれる。
Log関係は分かりやすいように名前を変えておこう。
ServerSignatureはバージョン情報とか出したくないので隠す為にOffにしとく。

NameVirtualHost *
<VirtualHost *>
        ServerName ホスト名(www.maocat.jpとか)
        ServerAdmin メールアドレス
        DocumentRoot ドキュメントの場所
        ErrorLog /var/log/apache2/error.log
        CustomLog /var/log/apache2/access.log combined
        ServerSignature Off
</VirtualHost>

追記(2009/10/15)
NameVirtualHostの記述はApache2のバージョンによっては、ports.confに既に書かれている場合があるので、その時は書かなくても良い。
Debianはlennyからのバージョンで変わってるっぽいです。
エラー内容とかは、この記事に書いておいた。
NameVirtualHostの後ろのパラメータが「*:80」の場合は、VirtualHostタグの*の部分も「*:80」にしておく事。

カテゴリ/タグ:私の記憶領域 /    
コメント (2)