VirtualDocumentRoot使い方
自分用メモ。
VirtualDocumentRootの使い方
test.localhostを例に出して、
・前準備
自前のDNSに*.test.localhostでワイルドカード使ってIPを登録。
・Apacheの設定
LogFormat "%{Host}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vcombined NameVirtualHost 192.168.3.11:80 <VirtualHost 192.168.3.11:80> ServerName hontai.test.localhost ServerAlias *.test.localhost VirtualDocumentRoot /home/%0/htdocs CustomLog /var/log/httpd/access_log vcombined <Directory /home/*/htdocs> Order deny,allow Allow from all </Directory> </VirtualHost>
って感じで設定して、
# mkdir -p /home/hoge.test.localhost/htdocs
って感じで設定すれば、
http://hoge.test.localhost/でアクセスできるようになる、と。
増やしたい時は、
# mkdir -p /home/hage.test.localhost/htdocs # mkdir -p /home/huge.test.localhost/htdocs
って作れば、
http://hage.test.localhost/
http://huge.test.localhost/
でアクセスできる、と。
ログは1つに集約されてしまうけど、後でgrepしてわけてあげればいいかなと。
ちなみに%0にはFQDNが入ります。
それ以降の変数には分解されたドメインが入る感じ。
%0 … hoge.test.localhost %1 … hoge %2 … test %3 … localhost
が入る。
最後に、このディレクティブを使いたい時は、コンパイルオプションに--enable-vhost-aliasをつけること。
Math::Pari
Math::PariはPari-GPライブラリを使うわけですが、インストール時にPari-GPの2.1.*系のソースディレクトリを指定しないといけなかった。
# cd /usr/loccal/src # wget http://pari.math.u-bordeaux.fr/pub/pari/unix/OLD/pari-2.1.7.tgz # tar zxf pari-2.1.7.tgz # wget http://search.cpan.org/CPAN/authors/id/I/IL/ILYAZ/modules/Math-Pari-2.010800.tar.gz # tar zxf Math-Pari-2.010800.tar.gz # cd Math-Pari-2.010800 # perl Makefile.PL paridir=/usr/local/src/pari-2.1.7 # make # make install
で完了
Amooooooose
あ
も
す
!
なんちゃってアイ○ンポート2
Postfixネタが多い今日このごろ…
っというわけで、現在仕事でPostfix使ってメルマガ配信周りのチューニングを(まだ)やっているわけですが、ボトルネックとなりうる箇所をすっこりして極力速く送信できるようにいろいろいじってみました。
以前やった設定をふまえつつ、
1.メールログ出力とキューイングをRAMディスク上で処理させる
これはtmpfsという特殊なファイルシステムを使って実現。
mountコマンド使わずに/etc/fstabに下記設定を追加しました。
/dev/shm /ram tmpfs defaults 0 0
/ram/をtmpfsでマウントしてます。
RAM(メモリ)領域にディレクトリをマウントして普通のファイルのごとく操作できるようになります。速度はメモリなので速い速い。
気をつけないといけないのはメモリ領域には限りがあるということ。
今動かしてるサーバーは3GB積んでるので1.5GBくらい確保してみた(っというか確保されてた)。
あと、サーバー落ちたりして再起動するとRAM領域は当然のことながら、すっからかんになりますので、定期的なHDDへのバックアップが必要になりますね。
2.syslogをやめてsyslog-ngを導入してみる
syslogはどうも遅い(っと言われていたり)、安全面でもいろいろ言われているところもあったりで、syslog-ngを入れてみようと思った次第。
http:/d.hatena.ne.jp/ragtarou/20080505
を参考にしつつRPMでさくっとインストールしまして、
# vi /etc/syslog-ng/syslog-ng.conf destination d_mail { file("/ram/postfix_log.$YEAR$MONTH$DAY$HOUR\0000" sync(0) perm(0644)); };
こんな感じで設定変更し、
syslog止めて、syslog-ngを起動。
3.ちょこっとPostfixチューニング
master.cfとtransportファイルに宛て先ドメインごとの配信制御設定を追加。
# vi /etc/postfix/transport
〜 docomo.ne.jp docomo-smtp:n .docomo.ne.jp docomo-smtp:n yahoo.co.jp yahoo-smtp:n ybb.ne.jp yahoo-smtp:n 〜 # postmap /etc/postfix/transport # vi /etc/postfix/master.cf 〜 docomo-smtp unix - - n - 1 smtp -o smtp_destination_concurrency_limit=1 -o smtp_destination_recipient_limit=1 yahoo-smtp unix - - n - 10 smtp -o smtp_destination_concurrency_limit=1 -o smtp_destination_recipient_limit=4 〜 # postfix reload
…以上のような感じで設定してみて、いざ配信。
結果は…、2000通/分でした。
まーだ速くなる可能性も残しつつって感じですがひとまず30分で6万通送れりゃ、今のサービスなら十分かなーっと思った次第。
あ、あと、最後に言い忘れてたこと、
4.エラーメールのクリーニング処理
実は、これが一番重要だったりして。
エラーメールが多発するとキャリアのメールサーバブロッキングしちゃいます。
なので、一定時間送れなくなるわけですね。
定期的なクリーニング処理(3回失敗したら削除的な)を施してあげて極力バウンスメールは失くす努力が必要です(できればエラー率5%前後)。
そうすれば、ある程度の規模ならたっかいアプライアンス製品買わなくても何とかOSSでまかなえるはず、っと思った次第。
いや、アプライアンス製品の方がやっぱり素晴らしいんですけどね。
ApacheLBをやってみる
○ やること
Web2台、NFS構成で、入り口のロードバランサーをApache2.2系のmod_proxy_balancerを使って構築してみる。
そのとき、ApacheLBにもNFSからコンテンツ領域をマウントしておき、静的コンテンツはバックエンドのWebには振らずに、LB上で返すようにする。
○ 構成
|----| LB |---+---| Web01 | | +---| Web02 | | +---| NFS |
○ ApacheLB用のコンパイルオプション
"./configure" \ "--prefix=/usr/local/apache2_worker" \ "--with-mpm=worker" \ "--enable-cache" \ "--enable-deflate" \ "--enable-disk-cache" \ "--enable-headers" \ "--enable-mem-cache" \ "--enable-proxy" \ "--enable-proxy-balancer" \ "--enable-rewrite" \ "--enable-so" \ "--enable-ssl" \ "--enable-substitute" \ "--disable-asis" \ "--disable-auth-digest" \ "--disable-authn-anon" \ "--disable-authn-dbd" \ "--disable-authn-dbm" \ "--disable-authn-default" \ "--disable-authz-dbm" \ "--disable-authz-default" \ "--disable-authz-owner" \ "--disable-cgid" \ "--disable-dav" \ "--disable-dav-fs" \ "--disable-dbd" \ "--disable-dumpio" \ "--disable-expires" \ "--disable-ext-filter" \ "--disable-ident" \ "--disable-imagemap" \ "--disable-include" \ "--disable-info" \ "--disable-negotiation" \ "--disable-speling" \ "--disable-userdir"
なげぇ。
不要なモジュールは省き、必要なモジュールは静的に組み込んでみる。
静的コンテンツのみ扱うので、ついでにMPMはworkerに。
○ 各種設定
まず、/etc/hostsにバックエンドWebの適当なホスト名と、IPアドレスを関連付けしておく。
# vi /etc/hosts exms.web01 192.168.0.11 exms.web02 192.168.0.12
つづいてー、Apacheの設定ファイルにLB設定書きます。
<VirtualHost ***.***.***.***:80> ServerName example.com DocumentRoot /home/example/htdocs CustomLog /var/log/httpd/example/access_log combined ErrorLog /var/log/httpd/example/error_log ProxyRequests Off ProxyPassMatch !\.(png|jpe?g|gif|css|js|ico) balancer://exms/ timeout=2 ProxyPreserveHost On RequestHeader set X-SSL-FLAG %{HTTPS}s ProxyPassReverse / http://exms.web01:80/ ProxyPassReverse / http://exms.web02:80/ <Proxy balancer://exms/> BalancerMember http://exms.web01:80 loadfactor=10 BalancerMember http://exms.web02:80 loadfactor=10 </Proxy> RewriteEngine on RewriteCond %{REQUEST_URI} !\.(png|jpe?g|gif|css|js|ico) RewriteRule ^/(.*)$ balancer://exms/$1 [P,L] AddOutputFilterByType SUBSTITUTE text/html Substitute "s|mogemoge.com|hogehoge.jp|i" CacheRoot /usr/local/apache2_worker/cache CacheIgnoreCacheControl On CacheIgnoreHeaders Set-Cookie CacheEnable disk / CacheDefaultExpire 600 CacheDirLevels 3 CacheDirLength 3 ErrorDocument 503 /sorry/503.html Alias /sorry/ /usr/local/apache2_worker/htdocs/ <Directory /home/example/htdocs> Order deny,allow Deny from all Allow from ***.***.***.*** </Directory> </VirtualHost>
一応、いろいろ意味があったりします。
ProxyRequests … フォワードプロキシとしては利用しないので、Offで。
ProxyPassMatch … 拡張子が.png .jpeg .jpg .gif .css .js .ico以外だったらバックエンドのWebにぶっ飛ばし。
ProxyPreserveHost … バックエンドのWebにHostヘッダ情報を渡す( $ENV{HTTP_HOST}がユーザからのリクエスト時のホスト名になる)。Offにしたら、$ENV{HTTP_HOST}はexms.web01とかになりますので、ご注意を。
RequestHeader set X-SSL-FLAG %{HTTPS}s リクエストスキームがhttp://だったら0、https://だったら1がセット。
Rewriteで指定拡張子以外だったらリバーーースプロキシィイイイ。
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|mogemoge.com|hogehoge.jp|i"
これ、実はLBとしては必要ないけれど、結構便利なのでテストで導入。
レスポンスボディ内の指定文字列を置換してくれます。
上記の例だと、mogemoge.com を hogehoge.jp に置換してくれてます。
これはリンク先を別ホストに変更したいけど、ページいじりたくねぇって時にパゲ便利。
Cache〜系はディスクキャッシュを使ってます。
NFSからいちいち画像をとりにいかんでも、いっかいとったらキャッシュできるようにすれば環境に優しい、ド・エコLBになること間違い無し。
…と、言いたいところですが、まだまだ実験段階。
キャッシュ系はサービスにも影響するので、本導入はまだまだ検証が必要ですなぁ。
最後に、バックエンド側のWebが全て落ちた場合、Apacheはステータスコード503を返します。なので503だったら、Sorryページ(混んでます、すんません的な)を見せるために、ErrorDocumentでそれ用のページを指定しています。
AliasはHTMLをドキュメントルート外に置きたかっただけなので、設定しただけで。
必要ないっちゃぁ必要なし。
っということで。