2003-12-01(Mon) [長年日記]
_ [tDiary]tdiarytimes.rb フェードアウトを設定
ログの消去時間に近づくにつれ、縦棒の色をフェードアウトさせる
tdiary.conf に追加
@options['tdiarytimes.fadeout'] = true
_ tcpserver のオプション
/usr/local/bin/tcpserver -HRl0 -u 82 -g 81 -x /etc/tcp.smtp.cdb 0 smtp \ /var/qmail/bin/qmail-smtpd &
- H リモートホスト名を調べない。
- R IDENTを行わない。
- l0 ローカルホスト名を調べない
なんたら三原則みたい
ちなみに qmail 関係の UID,GID は FreeBSD の port を参考にした。
FreeBSD port 作成者のためのハンドブック - UID より抜粋
alias:*:81:81:QMail user:/var/qmail/alias:/nonexistent qmaill:*:83:81:QMail user:/var/qmail:/nonexistent qmaild:*:82:81:QMail user:/var/qmail:/nonexistent qmailq:*:85:82:QMail user:/var/qmail:/nonexistent qmails:*:87:82:QMail user:/var/qmail:/nonexistent qmailp:*:84:81:QMail user:/var/qmail:/nonexistent qmailr:*:86:82:QMail user:/var/qmail:/nonexistent
_ よく使う UID、GID
上記の qmail 関係の UID、GID のついでに利用しているサービスを抜粋
vpopmail:*:89:89::0:0:User &:/usr/local/vpopmail:/nonexistent pgsql:*:70:70:PostgreSQL pseudo-user:/usr/local/pgsql:/bin/sh mysql:*:88:88:MySQL Daemon:/var/db/mysql:/sbin/nologin
あと Apache を起動する httpd の UID、GID は 80
2003-12-02(Tue) [長年日記]
_ 高負荷対策
最低でも落とさない。あわよくば軽くなるように。
冗長化でも負荷分散でも「短期間に実現可能で低リスク」な方法。
Proxy を使う場合
眠いので簡単に。
Proxy使うの負荷分散は簡単だけど冗長化にならない。フェールオーバ付ければWebサーバの冗長化にはなるけどProxy部分が死んだら終わり。でも現実解に近い。
導入はそれこそ1時間程度でもできるだろうし。Poundとかmod_proxy+mod_rewriteとか。Squidは資料集める時間が・・・でも1日あれば出来ると思う。
マスター側はApacheのポートを8080などに変更して80でProxyを動かすだけ。スレーブ側は通常通りのWebサーバでいい。Proxyで2台に振り分ける。(Proxy専用機が用意できればマスター、スレーブともに通常のポートでいい)
2台のサーバを同時にアクセスするとなるとrsync等によるコンテンツ同期は使えない。
これは共有ディレクトリでコンテンツを共有することで解決できる。
ファイルの共有で思いつくのはSAMBA(SMB/CIFS)とNFSだがCIFSに関してはファイルロックが出来るのかどうか不明。Linuxならば実績の面でもNFSが妥当。
NFS は RedHat Linux ならば最初からインストールされているのでサービスを起動するだけでとりあえず利用可能。 セキュリティを考えるとRPCのポートを固定してiptablesで固める必要があるが、それを含めても2日あればできるか・・・
ここまででWebサーバの冗長化と負荷分散になる。
Proxy部分が死んだら・・・に対しては、Proxy2台用意してハートビート等をつかって冗長化すれば解決できる。ここまでやれれば御の字だけど・・・
自分で書かなくてもすばらしい資料がありました。
_ NFSに関する覚書
バージョン
カーネル2.4の現在の主流はNFSv3。カーネル2.2のころはNFSv2?
カーネル2.6 では NFSv4 が実装される予定。これは互換性よりも性能を重視して一から書き直されている。
カーネル2.4の現在でもNFSv4のクライアント機能がバックポートされている(らしい)
_ 某サイトのリニューアル
まずは現状のメニューを列挙して整理するところから
2003-12-03(Wed) [長年日記]
_ [Apache]ReverseProxy を使う場合のアクセス解析
リバースプロキシ(Pound)を使うとアクセスログに記録されるリモートIPがすべてプロキシのIPになってしまう。
Pound のドキュメントを読んだらその解決策が書いてあった。
Request Logging As a general rule, Pound passes all headers as they arrive from the client browser to the back-end server(s). There are two exceptions to this rule: Pound may add information about the SSL client certificate (as described below), and it will add an X-Forwarded-For header. The general format is X-Forwarded-for: client-IP-address. The back-end server(s) may use this extra information in order to create their log-files with the real client address (otherwise all requests will appear to originate from Pound itself, which is rather useless).
要は X-Forwarded-For というアクセス元の IP をログに記録すればよい
httpd.conf の以下の行を書き換える
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
combined
CustomLog logs/access_log combined
Analog 側に変更のいらない方法
%h を
\"%{X-Forwarded-For}i\"
に置き換える
本当のアクセス元が記録されないという決定的な問題がある。リバースプロキシ経由でない場合や別のプロキシ経由だった場合にもどうなるかわからない。
その代わり Analog 側では変更がいらない。
ログ分析(Analog)側で対応する
こっちのほうがスマート。
httpd.conf の LogFormat の最後に
\"%{X-Forwarded-For}i\"
を追加する
analog.cfg の LOGFORMAT(APACHELOGFORMAT) に変更が必要
2003-12-04(Thu) [長年日記]
_ Pound を選択した理由
20031202#c04 でツッコミをいただいたので自分でもあやふやだった部分を整理。
キャッシュサーバ(Squid)を利用しないのはなぜか
結論から言うと今回のケースではキャッシュサーバの利用は難しい。
その決定的な理由は100%動的ページだから。キャッシュが効く静的コンテンツは画像しかない。
検討段階では「動的といってもリアルタイムに更新してるわけではないから大丈夫」と思ってたけど、
ひとつのページが
- 認証ユーザ
- REMOTE_IP
- COOKIEの値
- セッション
によって違う内容を出力する場合(プッシュ型コンテンツ?)、キャッシュはそれぞれの条件について必要になる。
また、同じユーザでも何かアクションを起こすたびにページが変化する可能性がある。(Amazonのオススメ商品みたいに)
あとは
- アクセス数
アクセスはキャッシュサーバまでで、Webサーバにはアクセス記録が残らない。ではキャッシュサーバのログを取ればよいかというと、キャッシュサーバにすらアクセスされずブラウザのキャッシュが使用されてしまう場合もある。設定しだいで解決できる可能性あり。
- キャッシュとプロキシのセキュリティの確保
- フォームの確認ページや内部LANからのアクセスでのみ表示するページがキャッシュサーバに溜まってそれを他の人に見られたら?
- プロキシ経由で他のサーバにアタックされたら?(踏み台)
- その他もろもろを防御する必要あり。キャッシュだけでも大変、プロキシのセキュリティ確保はもっと大変。しかもクリティカル。
と、クリアしなければいけないハードルがいくつか。「短期間に実現可能で低リスクな解決策」という条件がなければ適用可能だけど、結局動的ページに対しては・・・?
Pound を一台のサーバで運用する意義は?
こっちがメインだったのにキャッシュで時間食ったのでまた明日書き直す
とりあえず http://pc.2ch.net/php/kako/998/998166103.html の 4 が(・∀・)イイコトイッタ!! 7 もイイ!
引用すると
動的コンテンツでも、遅いクライアントのために、重いhttpdで だらだらとセッションを張りつづける必要も無い。
当然、クライエントの転送終了までセッションをキープしなきゃダメだし クライエントの速度は色々だし、
でも 9 の言うように負荷は大幅には下がらない。むしろCPUが効率的に利用されて負荷自体は上がる?
そこでロードバランサが登場!!でもバランス取るサーバがいないから先にPoundだけ導入しておいていつでも振り分けれるようにしておこう。上記のメリットもあるし。というのが今回の導入目的。
_ Apache のパフォーマンス・チューニング
2003-12-05(Fri) [長年日記]
_ [Apache] MaxClients の適正値を求める
竹迫さんのmod_perl における C10K Problemを参考に。メモリ容量から計算する。prefork な Apache の場合です。
Apache の最大メモリ消費量=MaxClients×子プロセスのメモリ消費量+親プロセスのメモリ消費量
なのでまずは「子プロセスのメモリ消費量」と「親プロセスのメモリ消費量」を求める。
例えば TOP コマンドの結果がこんな感じだったとする
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND 21419 httpd 16 0 5616 5412 2852 R 4.7 2.1 0:00 0 httpd 21144 httpd 15 0 5708 5500 2896 S 4.5 2.1 0:01 0 httpd 21312 httpd 16 0 6192 5984 2868 R 3.7 2.3 0:00 0 httpd 21244 httpd 15 0 6224 6020 2872 S 3.1 2.3 0:01 0 httpd 21168 httpd 16 0 6540 6328 2888 S 2.9 2.4 0:02 0 httpd 21297 httpd 15 0 6000 5796 2880 S 2.9 2.2 0:01 0 httpd 20535 httpd 16 0 6544 6332 2888 S 1.9 2.4 0:06 0 httpd 21417 httpd 16 0 5012 4804 2620 R 1.3 1.8 0:00 0 httpd 21418 httpd 15 0 5588 5380 2860 S 1.3 2.1 0:00 0 httpd 21406 httpd 16 0 4420 4212 2672 S 1.1 1.6 0:00 0 httpd 1050 root 15 0 0 0 0 SW 0.7 0.0 3:48 0 kjournald 2012 root 15 0 236 216 160 S 0.3 0.0 2:37 0 syslogd 28733 root 23 0 488 4 0 S 0.3 0.0 68:53 0 pound 21323 httpd 15 0 6096 5748 2864 S 0.3 2.2 0:00 0 httpd 21186 httpd 15 0 5628 5420 2896 S 0.1 2.1 0:00 0 httpd
httpd の SIZE が「親プロセスのメモリ消費量」、SIZE − SHARE(親プロセスと共用している部分) が「子プロセスのメモリ消費量」になる
MaxClients は現在デフォルトの150に設定されている、ということは
Apache の最大メモリ消費量=150×(6MB−2.8MB)+6MB=486MB
搭載メモリが 256MB なので MaxClients 150 は大きすぎる。MaxClients 50 だと最大メモリ消費量 160MB でちょうど良い。
メモリを増やしてMaxClientsを50以上にする必要があるかというと、
- CPU使用率を見る限り 50 以上の実行はきつい
- 昨日設置したMRTGの「BusyServers」のグラフはピーク時でも30程度
なので必要なし。

_ 画像(静的コンテンツ)用サーバ
PHP 等を使わないただの画像へのリクエストにメモリを 6MB も食う Apache を使うのは効率が悪い。やはり画像サーバを立てて Pound で振り分けるほうが良い。
Esehttpd やモジュールを削った Apache
DocumentRoot を Apache と同じ場所に設定して空いているポートで動かす(例:8081)。
Pound
画像等へのアクセスを振り分け
http://www.geocities.co.jp/SiliconValley/1712/other/pound.htmlを参考に
UrlGroup ".*.(jpg|gif|png|css|js)$" BackEnd 127.0.0.1,8081,1 EndGroup
を追加
Apache
もう KeepAlive は完全に必要なし
KeepAlive Off
2003-12-06(Sat) [長年日記]
_ [PostgreSQL] pgpool 導入を検討
プロセスが16(num_init_children のデフォルト)立ち上がるから接続も16個だと勘違いしてた。実際には 1個(max_pool のデフォルト)のみ。
追記:勘違いじゃなかった。 README より
なお,pgpool全体としては,num_init_children*max_pool 分だけ PostgreSQLへのコネクションが張られる点に注意してください.
2003-12-07(Sun) [長年日記]
_ [wish][book] Linux から目覚めるぼくらのゲームボーイ!
最近あちこちで紹介されている気がする。ケーブルと開発環境の入った 1CD LINUX が付属するなど、購入してすぐに遊べそう。
マイコン時代を思い出させるわくわく感のある書籍だと思う。
でもこの本買うならまずゲームボーイ買わなくちゃ・・・
_ xyzzy
2年くらい前から愛用しているエディタ。
2003-12-08(Mon) [長年日記]
_ [Apache][server] ReverseProxy を使う場合のアクセス解析(2) mod_rpaf を導入
20031203#p01 の続き
竹迫さんの2003.12.05 mod_rpaf を試してみましたを参考に mod_rpaf を入れてみた。今回のサーバは Apache 2.0 系なので mod_rpaf-2.0.c をコンパイル。
tar zxvf mod_rpaf-0.4.tar.gz cd mod_rpaf-0.4 /usr/local/apache2/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
/usr/local/apache/conf/httpd.conf に設定を加える
LoadModule rpaf_module modules/mod_rpaf-2.0.so RPAFenable On RPAFsethostname Off RPAFproxy_ips 127.0.0.1
Apache 内部の変数が書き換えられるので、ログに記録される IP はもちろん、CGI や PHP が受け取る環境変数 REMOTE_ADDR もアクセス元のIP になるからすごく便利。
追記: Apache の KeepAlive が On だと正しく動作しなかった。Off にすることで解決。
KeepAlive On になっているときはリモート IP の値が意味不明な文字列になったり空欄になったりした。
_ [PostgreSQL][server] pgpool をインストール
アプリケーション(AP)サーバが複数台、データベース(DB)サーバが1台。各 AP サーバに pgpool をインストール。
ftp://ftp.sra.co.jp/pub/cmd/postgres/pgpool/pgpool-0.1.6.tar.gz tar xvfz pgpool-0.1.6.tar.gz cd pgpool-0.1.6 ./configure make make install
設定ファイルを書き換え(サンプルをコピー mv /usr/local/etc/pgpool.conf.sample /usr/local/etc/pgpool.conf)
allow_inet_domain_socket = 1 backend_host_name = 'db.example.com'
PHP スクリプト中の DSN を定義している個所を変更(PEAR DB を使用している場合)
pgsql://user@:9999/database
2003-12-09(Tue) [長年日記]
_ このサーバの HDD がクラッシュしました
異音、セクタエラーメッセージ、そしてクラッシュ。
段階を踏んでくれてたのでデータのバックアップが出来たのが幸いです。でも夜中の2時に逝っちゃうのは勘弁して欲しかった・・・
現在は仮サーバとして、リプレースする前に使ってた SOTEC ノート。
本気で半永久的に使える記録メディアが欲しくなったけど、夢見ててもしょうがないので HDD を換装中。
_ メインマシンのマザーボードとCPUを交換
新しいマザーボード(AOpen AX4PE Max)は調子が悪かったので、結局元の(GIGABYTE P4 Titan 667)に戻して CPU のみ交換。
グラフィックカードとの相性かも。今度別ので試す。
CPU は Pentium4 1.6GHz から Celeron 2.8GHz に換装。動画再生時のコマ落ちが無くなったので目的達成。
2003-12-10(Wed) [長年日記]
_ [server]Debian にする予定
長らく使ってきた RedHat Linux が無くなってしまったので次は Debian にする。
他の候補としては
- Gentoo Linux
- Vine Linux
- Turbo Linux
- SUSE Linux
など。
決めた理由はコミュニティ主導だから潰れる可能性が低い。あと信頼性が高いと言うイメージ。
それに Debian 覚えておけば Knoppix のカスタマイズもやりやすい。
_ [server]Pound のログ出力
Pound はデフォルトで syslog にアクセスログを吐き出すので、そのままだとあっという間に /var/log/messages が埋め尽くされる。
Pound にファシリティを指定してインストールしなおす。
./configure --with-log=LOG_LOCAL1 --with-ssl=/usr/local/ssl
syslog でログを振り分ける
# /etc/syslog.conf # local1.none を追加して、local1 を /var/log/messages に記録させない *.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages # local1 を /var/log/pound に書き出す local1.* /var/log/pound
ログ集計はバックエンドのApacheで行うのでPoundのログは参考程度。
logrotate で /var/log/pound もローテーションするように /etc/logrotate.d/syslog を書き換える
_ [server]Esehttpd をインストールした
静的コンテンツ用。
さきに OpenSSL を入れておく。(RedHat Linux9 で最初から入ってた SSL では駄目だった)
コンパイル・インストール
tar xvfz esehttpd-0.308.tar.gz cd esehttpd-0.308 ./configure --with-openssl=/usr/local/ssl make make install
設定
# /usr/local/lib/esehttpd/conf/esehttpd.conf ServerRoot /usr/local/lib/esehttpd Port 8077 User httpd Group httpd BindAddress * TypesConfig conf/mime.types DefaultType text/plain CustomLog log/access_log DocumentRoot /var/www/localhost/htdocs
Pound に振り分け設定を追加
ListenHTTP 192.168.1.1,80
# jpg/gif/png/css/js を esehttpd(8077) に振り分ける。 UrlGroup ".*\.(jpg|gif|css|js)$" BackEnd 127.0.0.1,8077,1 EndGroup
UrlGroup ".*" BackEnd 127.0.0.1,8080,1 EndGroup
_ [server]各デーモンの起動順序
ここ最近インストールしたデーモンの起動順序のメモ
- pgpool
- esehttpd
- apache2
- pound
条件
- 静的コンテンツサーバは他のサービスに依存しないのでいつでも良い
- pound が起動するのはバックエンドの後
- pgpool は php(apache) より前
- メール配信は php(apache) より前
で、できたのがこの順序
# /etc/rc.d/rc.local csh -cf '/var/qmail/rc &'
/usr/local/sbin/esectl start /usr/local/bin/pgpool /usr/local/apache2/bin/apachectl start /usr/local/sbin/pound
_ [server]年末年始のアクセス増加(2)
2日 から今日までの1週間で pound,pgpool,pgpool 等を入れたり Apache のチューニングをしたり。
金をかけないでできる部分はとりあえず完了。ここから年末までは様子を見る。
_ xyzzy で使えるリファレンス
2003-12-11(Thu) [長年日記]
_ [PostgreSQL] ログを syslog に出力
syslog でログファイルを振り分ける設定
# /etc/syslog.conf *.info;mail.none;authpriv.none;cron.none;local0.none /var/log/messages local0.* /var/log/postgres
再起動
/etc/rc.d/init.d/syslog restart
PostgreSQL の syslog 出力を設定
# /var/pgsql/data/postgresql.conf syslog = 2 # syslog にのみ出力 syslog_facility = 'LOCAL0' syslog_ident = 'postgres'
再起動
/etc/rc.d/init.d/postgres restart
/var/log/postgres のローテーションを /etc/logrotate.d/syslog に追加
_ [wish] ジェルキーボードレスト/ジェルマウスパッド
店頭でさわってみてレスト付きのマウスパッドが欲しくなった。
キーボードレストは8の字に湾曲してる形のがいい。前に直線のを買ったがすぐに邪魔になった。
まくらと一緒で自分に合わないと気持ち悪い。実物を触って慎重に選ぶ予定。
追記: 店頭でさわったのはエレコムのディンプルゲルシリーズのものだった。
_ カテゴリの利用法
カテゴリってどんどん使い捨てていく使い方でもいいんだろうか。
何か関心事があったら新カテゴリを作って、関心がなくなったらそのカテゴリを使わなくなる。
ここ最近のWebサーバのチューニングネタもカテゴリ化していたら抽出しやすかった。
_ 今年の仕事は終了
といっても仕事しないのではなく、
- 今年中に「やるべき」仕事が終了
したので、明日からは来年のための仕事。
あと
- 稼動中のシステムに新機能を追加しない
稼動中のサーバーの設定、プログラムにバグ修正以外しない(予定)。コードフリーズ。
2003-12-12(Fri) [長年日記]
_ 図を書くツール
UMLmemo とDicon はお手軽なので明日からでも使えそう。
両方とも汎用のフォーマットではないけど再利用を考えないメモなどに使える。考えながら書いてる下書き用のツールとして利用したい。
_ [server] Debian GNU/Linuxのインストールでつまずく
インストーラで固まる。いろいろな箇所で。Ctal+Alt+Del も効かないという根性の入った固まりよう。
ディスクアクセス時に止まっているような気がしたので交換したが駄目。ためしに RedHat Linux 9 入れたらすんなり入った。このまま行こうかな。
余力があれば今度テキストモードで試してみる。
それにしても Unix User 2003年4月号付属 CD では bf24 の指定ができないんだけどもともとカーネル2.4なのかな?
_ [server] Bonzai Linux のインストールに成功
今日のねういちさんのツッコミ で教えてもらった Bonzai のインストールにあっさり成功。ありがとうございますねういちさん。
さて、まずはパッケージの更新。 apt-get なんたらするんだと思う。
その後 OpenSSH 入れて、リモートで作業できる環境を作る。
そして足りないツールやライブラリをそろえる。wget など。
あとは iptables でポート閉めて apache やら Ruby やら PHP 入れる。
最後にデータを移行して今の仮サーバをリプレース。
_ メインマシンの Windows XP を再インストール
ここ数日 OS の再インストールばっかり。
OS のセットアップが終わったら
- NIC のドライバを入れる
- ネットワークの設定
- Windows Update で最新の状態にする
Linux の場合とやってることは同じ。
- 各種ドライバをインストール
- 各種アプリケーションをインストール
- MS Office
- 画像編集
- Web 制作
- becky2, xyzzy, ffftp, explzh, teraterm, ttssh
合間に細かい設定
- フォルダオプションを変更
- 拡張子を表示する
- アドレスバー/タイトルバーにパス名を表示する
- 隠しファイル/フォルダを表示する
- システムフォルダの内容を表示する
- 縮小版をキャッシュしない
- ネットワークのフォルダとプリンタを自動的に検索しない
- 画面のプロパティ
- デスクトップアイコンをすべて表示
- ClearType を有効にする
- タスクバーとスタートメニューのプロパティ
- クイック起動を表示
- タスクバーボタンをグループ化しない
- IE
- ホームページを google に
- Google ツールバー
2003-12-15(Mon) [長年日記]
_ [PostgreSQL] pgpool が大量にメモリを消費?
MRTG のメモリグラフでフリーメモリの空きが少なくなっている事に気づいた。
TOP コマンドで見てみるとスワップメモリが大量に使用されている。
ps コマンドで見てみると pgpool のプロセスが 100MB 以上消費していたので一旦止めて再度スタート。
pgpool stop pgpool
スワップの使用量が正常に戻った。要調査。

現状思いつく原因は
* 間抜けな SQL を発行して大量にメモリを消費 * 後処理を忘れている
など。
child_life_time connection_life_time
あたりを設定して、定期的にプロセス/接続をリセットすればいいか。
pgpool の README より
connection_life_time
コネクションプール中のコネクションの有効期間を秒単位で指定します.0 を指定すると有効期間は無限になります.connection_life_timeのデフォ ルト値は0です.
child_life_time のことが書いてないのは実装がまだだからかも?
とりあえず connection_life_time を600(10分)に設定して様子を見る。
_ 中指のさきっちょの怪我
昨日プラスチックの破片で切った。「k」を打つと痛い。つーかキーボード打ってると傷が塞がらないヨ!
_ time-nw.nist.gov と NTP で同期が取れなくなってた
以前は取れてたはずなんだけど。
# ntpdate time-nw.nist.gov 15 Dec 14:07:09 ntpdate: no server suitable for synchronization found
ためしに別の NTP サーバ(福岡大学)だと
# ntpdate clock.nc.fukuoka-u.ac.jp 15 Dec 14:07:12 ntpdate: adjust time server 133.100.9.2 offset 0.000779 sec
_ mail コマンドでメールを送る
$ mail メールアドレス Subject: ここに件名を書く ここに本文を書く ctrl+d で終了 Cc: CC のメールアドレスを書く
これだけなら Windows でやればいい話なんだけど、
$ mail メールアドレス Subject: 件名 ~r/home/user/hoge.txt Cc:
とすると /home/user/hoge.txt の内容を送ることができる。長い設定ファイルを送るのに FTP を使う必要が無いので便利。
常識?(;・∀・)
2003-12-16(Tue) [長年日記]
_ [PostgreSQL][server] pgpool が大量にメモリを消費? (2)
$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 26167 0.0 0.0 1724 4 ? S Dec15 0:00 pgpool root 26170 0.3 2.8 49024 7184 ? S Dec15 4:58 pgpool root 26171 0.0 1.8 13264 4808 ? S Dec15 1:04 pgpool root 27191 0.0 1.5 11440 3872 ? S Dec15 0:55 pgpool root 24147 0.3 3.2 39992 8200 ? S Dec15 3:55 pgpool
_ [server] Pound が大量にメモリを消費する
pgpool だけじゃなく pound も・・・
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 27894 2.8 1.3 178976 3456 ? R Dec10 234:38 pound
^^^^^^ 仮想メモリを約180MB使用?
pound をリスタートしてみる。ついでなので設定を追加(User, Group, Client, Server, Alive
ListenHTTP 192.168.0.2,80
User httpd Group httpd
Client 300 Server 3600 Alive 10
UrlGroup ".*\.(jpg|gif|css|js)$" BackEnd 127.0.0.1,8077,1 EndGroup
UrlGroup ".*" BackEnd 127.0.0.1,8080,1 EndGroup
で、kill してから pound コマンドで起動した結果
httpd 14332 0.0 0.5 2584 1336 pts/0 S 10:44 0:00 [pound] httpd 14333 2.9 1.7 340292 4516 pts/0 S 10:44 0:14 [pound]
仮想メモリの値は瞬間瞬間で100MB程度から500MB以上まで大きく変化する。
ちなみにテスト機では
root 21351 0.0 0.7 3028 1492 ? S Dec10 0:00 pound root 21352 3.8 0.8 10196 1684 ? S Dec10 323:51 pound
接続数に大きく左右されてる?
_ スワップの有効利用?
pgpool も pound もスワップ領域を有効利用してるだけ?
$ vmstat 3 procs memory swap io system cpu r b w swpd free buff cache si so bi bo in cs us sy id 2 0 0 129960 106580 40952 21792 6 10 13 8 2 0 9 3 0 0 0 0 129960 106548 40992 21796 0 0 0 447 304 602 24 5 71 0 0 0 129960 106204 41016 21804 0 0 4 155 192 410 21 2 78 0 0 0 129960 106212 41032 21808 0 0 0 172 210 299 19 3 78 0 0 0 129960 106220 41032 21812 0 0 0 99 138 156 8 1 91 0 0 0 129960 106204 41044 21828 0 0 0 159 233 427 26 3 70 0 0 0 129960 104868 41064 21820 0 0 0 148 208 281 28 2 70 0 0 0 129960 104868 41088 21840 0 0 0 236 272 426 23 4 73
- si、so (スワップイン/アウト)がほとんど無い
- 実メモリの空きは確保されてる
今のところ実害(パフォーマンスの低下等)が無いので様子を見る。
_ [server] iptables 設定メモ
先日 からの続き。SSH 接続で設定。
vi /etc/iptables.sh
で、ルールを貼り付けたらコメントの日本語が化けた。コメント取ればいいけどこれから先困るので vim をインストール。
apt-get install vim
改めてルールを貼り付けて実行
# sh /etc/iptables.sh iptables v1.2.6a: invalid TCP port/service `snmp' specified Try `iptables -h' or 'iptables --help' for more information. iptables v1.2.6a: invalid UDP port/service `ftp' specified Try `iptables -h' or 'iptables --help' for more information. iptables v1.2.6a: invalid UDP port/service `ftp-data' specified Try `iptables -h' or 'iptables --help' for more information. iptables v1.2.6a: invalid TCP port/service `microsoft-ds' specified Try `iptables -h' or 'iptables --help' for more information. iptables v1.2.6a: invalid UDP port/service `microsoft-ds' specified Try `iptables -h' or 'iptables --help' for more information. iptables v1.2.6a: invalid TCP port/service `snmp' specified Try `iptables -h' or 'iptables --help' for more information.
と定義していないサービス名を使っていたので /etc/service に以下を書き加える。 (ルールのほうを番号で書き直したほうがいいな・・・後で)
snmp 161/tcp # Simple Net Mgmt Proto snmp 161/udp # Simple Net Mgmt Proto ftp-data 20/tcp ftp-data 20/udp ftp 21/tcp ftp 21/udp fsp fspd microsoft-ds 445/tcp microsoft-ds 445/udp
改めてルールを適用した。
起動時に自動でこのルールがリストアされるように設定
/etc/init.d/iptables save active
設定を有効にするために
dpkg-reconfigure iptables
で、
Enable the iptables init.d script?
に対してyesを選択
_ [server] Apache をインストール
まずはソースをゲットするために wget が必要
apt-get install wget
wget で Apache のソースをゲットして configure
tar xvfz httpd-2.0.48.tar.gz cd httpd-2.0.48 ./configure \ --enable-so \ --enable-deflate \ --enable-dav_fs \ --enable-dav \ --enable-rewrite
結果
configure: error: no acceptable C compiler found in $PATH configure failed for srclib/apr
ギャフン!コンパイラが入ってない。
apt-get install gcc apt-get install make apt-get install libstdc++3 apt-get install libstdc++3-dev # mod_deflate で必要 apt-get install zlib1g-dev
ようやくコンパイルとインストール
make make install
ユーザを追加
groupadd -g 80 httpd useradd -g httpd -u 80 httpd passwd httpd
ディレクトリを用意
mkdir /var/www/ chown httpd.httpd /var/www mkdir /var/log/httpd chown httpd.httpd /var/log/httpd mkdir /var/lock/httpd chown httpd.httpd /var/lock/httpd
su - httpd mkdir /var/www/www.mylab.jp mkdir /var/www/www.mylab.jp/htdocs mkdir /var/log/httpd/www.mylab.jp mkdir /var/log/httpd/dav.mylab.jp
後で自動起動の設定する
2003-12-17(Wed) [長年日記]
_ [server] ソフトウェア類をちょこちょこ
サーバ(Debian GNU/Linux)にソフトウェア類をインストール。
proftpd FTP サーバ
apt-get install proftpd
ウィザード形式で設定ができた。
/etc/proftpd.conf の LsDefaultOptions "-l" だけ "-la" に変更。
FFFTP で接続できることを確認できた。
exim メールサーバ
もともとインストールされてたので設定を行うだけ
eximconfig
_ ドキュメントページ(hiki)復活
amrita を入れ忘れてて動いてなかったのを修正。
_ qmail-inject を使って VERP 付きのメールを送る方法
qmail-inject の使い方をおさらい
echo to: recipient@example.com | /var/qmail/bin/qmail-inject
- リターンパスは user@example.com (コマンドを実行したユーザ)になる。
最初に考えたパターン
echo to: recipient@example.com | \ QMAILINJECT="r" /var/qmail/bin/qmail-inject -f 'sender@example.com'
が、これだとリターンパスが sender@example.com になってしまった
環境変数 QMAILINJECT の r は
宛先ごとの VERP を使用します。 qmail-inject は、宛先に送られるコピーの表書 き発信者に、各宛先アドレスを付け加えます。
-f は
-fsender 表書き送信者アドレス(envelope sender address)として、 qmail-queue に、引数 sender を渡します。このオプションは、 Return-Path とすべての環境変数を無効 にします。
つまり“すべての環境変数を無効に”されてしまうので QMAILINJECT も無効になっ ていた
正しいパターン
表書き送信者アドレスも環境変数で書き換える
export QMAILSUSER='sender' export QMAILSHOST='example.com' export QMAILINJECT='r' echo to:recipient@example.com | \ /var/qmail/bin/qmail-inject
リターンパスは sender-recipient=example.com@example.com でちゃんと VERP になっ た。
この環境変数はホスティンスサービスのときにも使える。各ユーザの CGI に -f を つけさせる必要が無い。
おまけ 送信者と受信者のドメイン名が違う場合
export QMAILSUSER='sender' export QMAILSHOST='example.com' export QMAILINJECT='r' echo to:recipient@mail.example.com | \ /var/qmail/bin/qmail-inject
この場合のリターンパスは sender-mail.example.com-recipient=mail.example.com@example.com
recipient のドメインが被ってるのはなぜ?
参考ページ
2003-12-18(Thu) [長年日記]
_ [携帯電話] キャリアを変更する
今 Docomo だけど気になる点がいくつか。
- メールスパム
- 電波悪い
- メール機能が弱い(reply-to が無いなど)
http://asdnof.hp.infoseek.co.jp/q02.html
au が最有力候補。
_ ナンバーポータビリティ
これだけのニーズがあるのに、
ドコモやる気なし・・・
最新の記事
番号はまだ先みたいだし、とりあえずメールアドレスだけでも一本化しよっと。
プロバイダ、フリーメール、自鯖メールのいずれかのアドレスから携帯に転送。
携帯からの発信には「返信は ****@****.*** にしてください」と入れて、できれば「reply-to」を指定する。(大抵の携帯端末は reply-to 無視するんだけど)
_ [PHP] メールを受け取る
環境変数と標準出力を出力する
どんな情報が得られるのかをファイルに出力して確かめる。
.qmail
|/home/hajime/env.php > /home/hajime/mail.txt
env.php
#!/usr/local/bin/php <?php print_r($_ENV);
while(!feof(STDIN)){
echo fgets(STDIN, 4096);
}
exit(0);
?>
FROM を抽出
FROM を抽出してリスト化してみる
.qmail
|/home/hajime/from.php >> /home/hajime/list.txt
from.php
#!/usr/local/bin/php <?php
while(!feof(STDIN)){
$line = fgets(STDIN, 4096);
if(preg_match('/from:.*?([^<)\s]+@\S+\.[^>(\s]+)/i', $line, $regs)) {
$from = $regs[1];
break;
}
}
echo $from . "\n";
exit(0);
?>
_ キャリアを変更する(2)
au の INFOBAR の値段を聞きに au ショップに行ったら売り切れだった。
2003-12-21(Sun) [長年日記]
2003-12-22(Mon) [長年日記]
_ [PostgreSQL] pgpool が大量にメモリを消費? (3)
スワップ領域の使い果たしでサーバがダウンした。
自動的にスワップを開放してくれると思ったけど甘かった。

毎日早朝4時に動かしている DB の更新スクリプトが臭い。 tmp_table を CREATE して、明示的に DROP してないし。
ただ、それ以外の時間でもスワップが減少しているのが気になる。
pgpool が原因なのかどうかを特定するためにも、一旦 pgpool を外して様子を見ることにした。
2003-12-23(Tue) [長年日記]
_ mylab.jp へのアクセスを www.mylab.jp へリダイレクト
<VirtualHost *>
ServerName mylab.jp
RedirectPermanent / http://www.mylab.jp/
</VirtualHost>
2003-12-24(Wed) [長年日記]
_ 自宅ネットワーク(1)
Dicon の練習がてらネットワーク図を書いてみた
PC ルータを使用していた頃 8月23日の日記、9月13日の日記
- ルールを書くのが面倒
- WAN<->DMZ、WAN<->LAN、DMZ<->LANの3経路×2方向で6パターンのルールを書かなければいけない
- UPNP が使えない
- 遅い
- Pentium 166MHz
- WAN 側 NIC が ISA の 10Base-T のカード
- 音がうるさい
- 古いマシンなのでファンの音がでかい
#
INTERNET
+
|
|
|
|
|
+----+---+ DMZ
|floppyfw+-----------+---------------+
+----+---+ | |
| +----+-----+ +-----+---------+
| |Web Server| |Mail/DNS Server|
| +----------+ +---------------+
|
| LAN
+-------+---------+
| | |
+----+-+ +--+---+ +--+---+
| PC1 | | PC2 | | PC3 |
+------+ +------+ +------+
_ 自宅ネットワーク(2)
PC ルータ置き換え後
2段ルータ(NAT)なのでUPNP使用不可
#
INTERNET
+
|
|
+----+----+
|BA8000PRO|
+----+----+
| DMZ
+---------------+---------------+
| | |
+----+------+ +----+-----+ +-----+---------+
|BEFSR41C-JP| |Web Server| |Mail/DNS Server|
+----+------+ +----------+ +---------------+
|
| LAN
+-------+---------+
| | |
+----+-+ +--+---+ +--+---+
| PC1 | | PC2 | | PC3 |
+------+ +------+ +------+
_ 自宅ネットワーク(3)
B フレッツ導入後
2セッション張ってる。UPNP が使える。
#
INTERNET
+
|
+------------+--------------------+
| |
+----+----+ +-----+-----+
|BA8000PRO| |BEFSR41C-JP|
+----+----+ +-----+-----+
| |
+-------------------+ +--------+---------+
| | | | |
+---+--+ +--+---+ +---+--+ +------+--------+ +------+---+
| PC1 | | PC2 | | PC3 | |Mail/DNS Server| |Web Server|
+------+ +------+ +------+ +---------------+ +----------+
_ 自宅ネットワーク(4)
サーバセグメントと LAN を接続(現在)
#
INTERNET
+
|
+--------------------+--------------------+
| |
+----+----+ +-----+-----+
|BA8000PRO| |BEFSR41C-JP|
+-+-------+ +--------+--+
| |
+-------------------+--------+ +------------+--------+---------+
| | | | | | |
+---+--+ +--+---+ +---+--+ +--+-----+---+ +------+--------+ +------+---+
| PC1 | | PC2 | | PC3 | | NetGenesis | |Mail/DNS Server| |Web Server|
+------+ +------+ +------+ +------------+ +---------------+ +----------+
_ 自宅ネットワーク(5)
次は BA8000PRO で VLAN を切る予定
_ 影舞 - Ruby でかかれたバグトラッキングシステム
2003-12-25(Thu) [長年日記]
_ [携帯電話] メールアドレス
現状の不満
- キャリアを変えるたびにメールアドレスが変わる
- 細かいフィルタができない
- PC でも受信したい
これらを解決するために公開アドレスと受信アドレスを分ける。
公開アドレスは変わらない。フロントエンド的な役割。なので長く使えるアドレスがいい。候補は
- 自分のドメイン(サーバ)のアドレス
- プロバイダのアドレス
- フリーメール
自分のドメインを使うメリットは
- ドメインを更新する限りサーバが変わっても使えるのでもっとも不変。
- 自分のサーバなので細かいフィルタリングが可能
デメリットは
- 自分のサーバなので不安定。信頼性が低い。
プロバイダのアドレスを使うメリットは
- 信頼性が高い
デメリットは
- プロバイダを変更したらメールアドレスが変わる
今回の目的にはそぐわないので却下。
フリーメールはサービスにもよるが
- 信頼性そこそこ
- ドメイン変わらない
- 中にはフィルタリングもできるサービスがある。
と、今回の目的にピッタリ。
Yahoo のメールから携帯に飛ばすことにした
が、Yahoo のメール転送サービスはメールが残らない。転送したらしっぱなし。
これでは PC で受信すると言う目的が果たせないので、もう一つアドレスを経由する。
2003-12-26(Fri) [長年日記]
_ [server] Pound + WebDAV
設定ファイルに WebDAV のリクエストメソッドを通すように設定
# /usr/local/etc/pound.cfg # 次の2行を追加 ExtendedHTTP 1 WebDAV 1
しかし DreamWeaver MX から接続すると501エラーになる。
pound のログにも bad request が出ていた。PROPFIND メソッドが通っていない。
configure 時に --enable-msdav オプションを追加することで解決。
./configure --with-log=LOG_LOCAL1 --with-ssl=/usr/local/ssl --enable-msdav
追記:
一部のファイルで 501 Not Implemented が出た。画像等を Esehttpd に振り分けていたのが原因。ちょっとはまった。
UrlGroup ".*\.(jpg|gif|css|js)$"
_ サーバー構成
またも DICON の練習
# Web Server + DB Server
+-----+
|users|
+--+--+
|
+---------------------------+
| | Web Server|
| +--+--+ |
| |Pound| |
| +--+--+ |
| | |
| +------+------+ |
| | | |
| +--+---+ +---+----+ |
| |Apache| |Esehttpd| |
| +--+---+ +--------+ |
| | |
| +-+--+ |
| |PHP | |
| +-+--+ |
| | |
| +--+---+ |
| |pgpool| |
| +--+---+ |
| | |
+---------------------------+
|
+---------------------------+
| | DB Server|
| +--+-------+ |
| |PostgreSQL| |
| +----------+ |
| |
| |
+---------------------------+
今は pgpool 外してます。
サーバが増えたら(Web Server2)以下のような構成になる?
# Web Server * 2 + DB/File Server
+-----+
|users|
+--+--+
|
+-----------------------------+ +-------------+
| | Web Server1| | Web Server2 |
| +--+--+ | | |
| |Pound| | | |
| +--+--+ | | |
| | | | |
| +------+------+---------|-----|-----+ |
| | | | | | |
| +--+----+ +---+----+ | | +---+---+ |
| |Apache | |Esehttpd| | | |Apache | |
| |+PHP | +---+----+ | | |+PHP | |
| |+pgpool| | | | |+pgpool| |
| +--+----+ | | | +---+---+ |
| | | | | | |
+-----------------------------+ +-------------+
| | |
+------+------+-----+---------------+
| |
+---------------------------------------------------+
| | | DB/File Server|
| +----+-----+ +-+-+ |
| |PostgreSQL| |NFS| |
| +----------+ +---+ |
| |
| |
+---------------------------------------------------+
これだと管理が大分楽になる
極端な話「Web Server 1」と「Web Server 2」には HDD が載って無くてもいい。
次の図は役割ごとにサーバを分けた場合の図。
#
+-----+
|users|
+--+--+
|
+------------------------+
| | Load Blancer|
| +--+---+ |
| |Pound | |
| +--+---+ |
| | |
+------------------------+
|
+-----------+------------------------+
| | |
+----|------------------------+ +------------------+
| | | Web Server1| | | Web Server2|
| | | | | | |
| | | | | | |
| +--+----+ +---+----+ | | +---+---+ |
| |Apache | |Esehttpd| | | |Apache | |
| |+PHP | +---+----+ | | |+PHP | |
| |+pgpool| | | | |+pgpool| |
| +--+----+ | | | +---+---+ |
| | | | | | |
+-----------------------------+ +------------------+
| | |
+-------+---+------------------------+--+
| |
+------------------------------+ +----------------+
| | DB Server| | | NAS|
| +----+-----+ | | +-+-+ |
| |PostgreSQL| | | |NFS| |
| +----------+ | | +---+ |
| | | |
| | | |
+------------------------------+ +----------------+
2003-12-28(Sun) [長年日記]
_ Web アプリケーションのセキュリティチェックポイント
以下のような弱点がないか
- クロスサイトスクリプティング
- SQL インジェクション
- シェルコマンドに不正な文字列が渡っている
共通するのはクライアントからの入力をチェックし、適切にエスケープしているかどうかどうかという点。
クライアントから渡される情報は、一切信用できない。(UserAgent、Referer、GET文字列、POSTデータ、COOKIEデータ等)
ちょっと検索してみただけでもいろいろな資料が見つかった。
- Web アプリケーションセキュリティ (PDF)
- Web セキュアプログラミング (PDF)
- Web アプリのセキュリティ (PowerPoint)




ツッコミを含む
Before...
_ hajime [嘘こけー!!Σ(°Д°;)]
_ hajime [tdiarytime使うと自分の生態を晒すことになります。オススメ(・∀・)]
_ いちえ [MovableTypeサーバーとしてリブレットFFを候補ほあげてます! CD、FDD無しだから腹割って代理母インスト..]
_ hajime [難産ですね〜]
_ hajime [blosxomの綴りがbloxsomになっていたので修正]