0

nginx

nginxを入れてPHPも動くようにしたときのメモ。
nginxは何かと一言でいうと軽いwebサーバー。

# yum --enablerepo=epel,remi install nginx
でとりあえずnginxをインストール。

/etc/nginx/nginx.conf を編集
(apacheでいうところのhttpd.conf)

ポートを指定
listen 80;

listen 8080;

ドキュメントルートを指定
root /usr/share/nginx/html;

root /home/www/html;

# /etc/init.d/nginx restart
でとりあえずhtmlは扱えるようになる

http://localhost:8080/
表示された。

次にPHPを扱えるようにする。
公式サイトの説明ではfastCGIを使ったら良いとの事なのでそれに従う。
fastCGIのプロセス管理もdaemontoolsではなく、spawn-fcgiというものを使う。
nginxからではfastCGIの起動ができない。

spawn-fcgiはlighttpdの付属としてインストールできるらしいので、lighttpdごとインストールしてしまう。

# yum --enablerepo=epel,remi install lighttpd lighttpd-fastcgi
 
# /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nginx -C 2 -f /usr/bin/php-cgi

以下の一行がでたら無事起動してる。
spawn-fcgi: child spawned successfully: PID: 24589

9000というポートを指定してるけど、これはnginxとの通信に使うものなので8080にしてはダメ。
ユーザー名もnginxと合わせてnginxとしておく。

nginx.conf を再度設定する。

location / {
index index.html index.htm;
root /home/www/html;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME /home/www/html/$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}

# /etc/init.d/nginx restart

これで、http://localhost:8080/hoge.php 無事表示できるようになった。
phpはapacheで動かすより遅いけど特に気にならない程度。
session周りとかパーミッションの変更したりが必要なはずだけど今回はベンチマーク取りたいだけなのでとりあえず無視。

0

mmeasure

mmeasureはmySQLの負荷を監視、チューニングのアドバイスを提供してくれるツールです。
今まで知らなかったけど、けっこう古いツールです。
そのままだとmySQL5.1以上は動きません。

cactiでもお馴染のグラフ生成に必要なrrdtoolをインストール
# yum install rrdtool

mmeasureの最新版をダウンロード&展開
# cd /usr/local
# wget http://prdownloads.sourceforge.jp/mmeasure/18557/mmeasure-1.0.7.tar.gz
# tar xvzf mmeasure-1.0.7.tar.gz

mmeasure.confを修正する
# cp mmeasure_template.conf mmeasure.conf

このテンプレートがデフォルトでは設定項目が足りなくて動かないという頑固者。
生成する画像の設定
WEBDIR="$PATH_MMEASURE/web/images/graphs"
WIDTH="400"
WIDTH_SMALL="400"
WIDTH_LARGE="400"
HEIGHT="100"
HEIGHT_SMALL="100"
HEIGHT_LARGE="100"
IMAGEFORMAT="gif"

rrdtoolのパスを変更
PATH_RRDTOOL="/usr/bin/rrdtool"

mySQL関連の設定を変更
MYSQL_HOST=localhost
MYSQL_USER=root
MYSQL_PASSWORD=hogehoge
#MYSQL_PORT=3306
#MYSQL_SOCKET=/tmp/mysql.sock
MYSQL_SLOW_QUERY_LOG="/mnt/log/mysql-slow.log" # なければmy.iniで設定する

mySQL5.1だと起動はするものの数分したらコケるので下記のように男らしく修正
原因はtable_cacheがtable_open_cacheという名前に変わった為。
参考: mmeasuer 1.0.7を無理矢理mysql 5.1に対応させる
find /usr/local/mmeasure/ -type f -print0 | xargs -0 grep -l --null table_cache | xargs -0 perl -i.bak -p -e 's/table_cache/table_open_cache/g;'

同じような原因で、総クエリー回数以下の値を取得できないので、show statusをshow global statusにかえてやる。
find /usr/local/mmeasure/ -type f -print0 | xargs -0 grep -l --null table_cache | xargs -0 perl -i.bak -p -e 's/show status/show global status/g;'

これでmmeasure本体の設定は完了。

続いて、webで表示させるツールなのでhttpdも修正
/etc/httpd/conf.d/mmeasure.conf を作成

Alias /mmeasure/ "/usr/local/mmeasure/web/"
<Directory /usr/local/mmeasure/web/>
AuthUserFile /usr/local/mmeasure/web/.htpasspwd
AuthGroupFile /dev/null
AuthName "User Verification"
AuthType Basic
require valid-user
AddDefaultCharset euc-jp
</Directory>

mmeasure.shを起動
/usr/local/mmeasure/daemon/mmeasure.sh start

mmeasure.shを再起動
/etc/init.d/httpd restart

http://hogehoge.com/mmeasure/ にアクセスするとページが表示される。

注意点として、
「過去のインデックス未使用クエリー内訳」にページャーとかがついてるわけでないので、インデックス未使用クエリーが多いとずらーっと1ページに表示されしまう。

0

cronの実行時間がずれる

海外のクラウドサーバーを使うとデフォルトの時間設定がUTCだったりするわけでそれを下記の設定で変更します。
# mv /etc/localtime /etc/localtime.org
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

これでdateコマンドをうつと、
2010年 8月 18日 水曜日 09:36:34 JST
とちゃんと返ってきます。

ただcronは、このままでは反映されずUTCで動いたままです。
logwatachが真っ昼間に届いたり。

crondを再起動してしまえば即反映されます。
/etc/init.d/crond restart

0

sedで置換

特定のディレクトリを再帰的に検索して文字列を置換。

find /home/www/html -name "*.html" -exec bash -c 'sed 's/javascript/hogehoge/g' {} > {}_tmp' \; -exec mv {}_tmp {} \;

だいぶダサい。

find /home/www/html -type f -name "*.html" -exec grep -l "javascript" {} \;
を組み合わせたら置換したファイルの一覧もでる。

0

検索エンジン経由のアクセスを禁止

開発用のサーバーは検索エンジンのbotのアクセスを禁止したりするけど、万が一検索エンジンにインデックスされた場合の事を考えて検索エンジン経由のアクセスも禁止するともっとセキュアになる。
WPやMTはインストールすると同時に検索エンジンへの登録を促されてつい登録してしまう場合があるので、やっといて損はないはず。

googleとyahooのクローラーを拒否する設定
SetEnvIf User-Agent Googlebot robot
SetEnvIf User-Agent Yahoo
order allow,deny
allow from all
deny from env=robot

念のためgoogleとyahoo経由の接続を拒否する設定
SetEnvIf Referer "http://www\.google\.co\.jp/" ref
SetEnvIf Referer "http://www\.yahoo\.co\.jp/" ref
order allow,deny
allow from all
deny from env=ref

〇〇経由でしかファイルをダウンロードさせない(直リンク禁止)とかも要はコレ。

0

格安クラウドサーバー RackspaceのCloud Servers



Rackspace Cloud ServersがAmazon EC2よりも優れている点

このサイトをみてからずっと気になってたRackspaceのCloud Serversをようやく登録しました。

特筆すべき点は、下記の3つ。

料金

全体的に安いという話じゃなくて、安いプランが豊富という話です。
EC2の最安値がスモールインスタンスの$0.085なのに対して、Cloud Serversの$0.015という値段。月にして$10ちょい。
メモリ256MでHD10Gっていまどきどうなのと思うけど開発環境として使う分には速度的にもあまり気にはなりません。ちょっと特殊な環境を作りたいときにはこの低料金プランは非常に重宝します。
本番環境でもバッチサーバーやセッションサーバーとして使うならまあOKじゃないかと思います。

すべてのインスタンスが64bit

EC2ではsmall,mediumが32bit、large以上が64bitということでこの2つをまたがってインスタンスを共有することはできません。
smallで作ったインスタンスはmediumでは使えるけどlargeでは使えない。
これは非常に致命的でサーバーをスケールアップしようとするとmediumからlargeに移る際インスタンスをゼロから作りなおさなければなりません。
Cloud Serversはすべてのインスタンスが64bitなのでこの心配がありません。
また、インスタンスを作成してs3に保存しておく必要もなく管理画面のボタンひとつでどのインスタンスにでも移行することが可能です。amazonのRDSのスケールアップに似たイメージ。

バックアップシステム

ec2のインスタンスのバックアップはコマンドを打ち込んで/mnt以下にimageファイルを作ってS3に転送という泥臭いやり方だったのに対して、Cloud Serversでは、稼働中のシステムのバックアップとリストアが管理画面から行えます。
1インスタンスに最大3つまで無料でバックアップをとることが可能で、4つ目以降はamazonのS3に相当するCloud Filesにイメージを保存する形になります。

もちろんEC2にあって、Cloud Filesないもの(ロードバランサー,KVS,auto scaling等)はいっぱいあるので用途によってうまく使い分けるのがいいかと思います。



ただ、最大の欠点として、Cloud Serversは英語の壁が非常に高い。
まず登録フォームでの登録が完了したら15分以内に外人から英語で確認の電話が入ります。(自動音声とかじゃなくて本物の外人さん)
そんな難しい英語ではないけど、むこうは機械的な作業なので自ずと早口になっています。
確認される内容は、名前、住所、クレジットカードの下4桁とセキュリティーコードくらいだったと思います。この電話確認が終わるまで仮登録状態なので管理画面は入れるけどサーバーを立ち上げることはできません。(アクティベート後は一旦ログインしなおす必要があります。)

質問や問い合わせがあるとやたらチャットでカスタマーサポートと話すように促されます。
私の場合もなぜかCloud Filesの一部がアクティベートされてないのでチャットでの問い合わせになりました。レスポンスが早くていいけれど、なんだか英語圏以外の人間には敷居が高いように感じます。

0

skipfishインストールメモ

Googleは米国時間3月19日、オープンソースのウェブセキュリティスキャナ「skipfish」を公開した。ウェブアプリケーションをスキャンして、セキュリティホールの有無を調べられるものだ。
 skipfishでウェブアプリをスキャンすると、ブラインドSQLやXMLインジェクションといった「巧妙な仕掛け」を含む脆弱性の有無が確認できると、Googleの開発者Michal Zalewski氏はskipfishのwikiで述べている。
 skipfishは対象サイトへの再帰的クロールと辞書ベースの調査を実行し、その結果を表示したインタラクティブなサイトマップを作成する。脆 弱性がある場合には強調表示する。また、skipfishが作成する最終レポートは、セキュリティ評価の判断材料として利用できる。
http://japan.cnet.com/news/sec/story/0,2000056024,20410794,00.htm

とりあえず設置したのでメモ。
# wget http://skipfish.googlecode.com/files/skipfish-1.18b.tgz
# tar xvzf skipfish-1.18b.tgz
# cd skipfish
# make
cc -L/usr/local/lib/ -L/opt/local/lib skipfish.c -o skipfish -O3 -Wno-format -Wall -funsigned-char -g -ggdb -D_FORTIFY_SOURCE=0 -I/usr/local/include/ -I/opt/local/include/ \
http_client.c database.c crawler.c analysis.c report.c -lcrypto -lssl -lidn -lz
 
See dictionaries/README-FIRST to pick a dictionary for the tool.

これでとりあえずインストール完了です。

このままでは使えないので使用する辞書をdictionariesから選びます(ここではdefault.wl)
# cp dictionaries/default.wl skipfish.wl

で、実際に動かしてみる。
http://localhost/hogeの脆弱性をチェックしてレポートをvar/www/html/logに保存するサンプル
./skipfish -o /var/www/html/log http://localhost/hoge
-o 結果をここで指定したディレクトリに吐き出してくれる
ディレクトリは空である必要がある。

ベーシック認証を突破したい時
-A (ユーザー名):(パスワード)

500件〜2000件/秒アクセスするので要注意。
必ず自分でテスト環境で行うこと。

0

cactiで画像が表示されない


cactiをyumでインストールしすると、そのままだと一部画像が表示されません。
これは画像を生成するRRDtoolのバージョンが違うだけでGUIの設定画面で直すことができます。

左のメニューのsettingsを選択。RRDtool utility versionを1.0から1.2.xにするだけでOK。

cactiは設定がGUIでできるのはいいけど、どうしようもないくらい使いにくいなあ。

0

rsyncのincludeが面倒臭い

下階層のファイル数点だけrsyncさせたいときincludeオプションを使います。
/vol/html/webapp/modules/ktai/page/change.phpだけをrsyncだと下記のようにやってしまいそうになる。
rsync -avz -e ssh --include=*change.php /vol/html root@hogehoge.com:/vol
これだと全部同期される。

じゃあこれ。
一旦全ファイルを除外した上でrsync。
rsync -avz -e ssh --include=*change.php --exclude=* /vol/html root@hogehoge.com:/vol
これだと何も同期されない。

じゃあこれ。
change.phpに辿るディレクトリを一つ一つincludeした上でrsync。
rsync -avzn -e "ssh -i /vol/mnt/hoge.pem" --include=html --include=webapp --include=modules --include=ktai --include=page --include=change.php --exclude=* /vol/html root@hogehoge.com:/vol
これで上手くいく。

これは極端な例だけどよく忘れて焦る。

0

ネットワークインターフェースがギガビット対応か

家と会社のサーバーを調べた。
# /sbin/ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: g
Wake-on: g
Current message level: 0x00000007 (7)
Link detected: yes

# /sbin/ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full ←対応してる
Advertised auto-negotiation: Yes
Speed: 100Mb/s ←でも100Mを使ってる
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: umbg
Wake-on: g
Current message level: 0x00000007 (7)
Link detected: yes

結局、サーバーがギガビット対応していてもルーターとLANケーブルも対応したやつじゃないとダメ。