Slide 1

Slide 1 text

Webサーバ勉強会 #60~#76 @int128 (いわてぃ)

Slide 2

Slide 2 text

Introduction @int128 http://d.hatena.ne.jp/int128/ ソフトウェア&インフラエンジニア 大きなSI屋で働いています。 自宅サーバが好きです。 最近、インフラ設計書を公開しました。

Slide 3

Slide 3 text

17 modules 60 mod_actions 61 mod_speling 62 mod_userdir 63 mod_alias 64 mod_rewrite 65 mod_proxy 66 mod_proxy_balancer 67 mod_proxy_ftp 68 mod_proxy_http 69 mod_proxy_connect 70 mod_cache 71 mod_suexec 72 mod_disk_cache 73 mod_file_cache 74 mod_mem_cache 75 mod_cgi 76 mod_version そんな時間配分で大丈夫か? 16秒 × 17 modules =272秒

Slide 4

Slide 4 text

大丈夫だ、問題ない

Slide 5

Slide 5 text

Agenda 独断と偏見で並び替えてお送りします。 1. mod_alias 2. mod_userdir 3. mod_rewrite 4. mod_proxy (http/ftp/connect/balancer) 5. mod_cache (mem/disk), mod_file_cache 6. mod_cgi 7. mod_suexec 8. mod_actions 9. mod_speling 10. mod_version

Slide 6

Slide 6 text

(1) mod_alias ドキュメントツリーにファイルシステムをマップする。 Alias /images /misc/data/images # Order allow, denyをお忘れなく AliasMatch ←Aliasの正規表現 Redirect RedirectMatch RedirectPermanent ←301を返す RedirectTemp ←302を返す ScriptAlias ←Aliasのcgi-script版 ScriptAliasMatch

Slide 7

Slide 7 text

(2) mod_userdir ユーザのホームディレクトリを公開するためのモジュール。 UserDir public_html http://example.com/~int128/index.html →/home/int128/public_html/index.html 絶対パスでもOK。(例: /var/www/home) パスは複数候補を書ける。 UserDir disabled UserDir enabled user1 user2 user3 特定のユーザだけホームディレクトリを有効にできる

Slide 8

Slide 8 text

(3) mod_rewrite ルールに基づいてURLを書き換える機能を提供する。 RewriteCondで条件式、 RewriteRuleで動作(リライト、リダイレクト)を指定する。 RewriteCond %{HTTP_USER_AGENT} DoCoMo [OR] RewriteCond %{HTTP_USER_AGENT} SoftBank RewriteRule ^/$ /mobile/ [L] 携帯電話からトップページへのアクセスはケータイコンテンツを返す。 使いすぎに注意。ご利用は計画的に。 JMeterでテスト駆動構築がおすすめ。

Slide 9

Slide 9 text

(4) mod_proxy リバースプロキシ、フォワードプロキシを提供する。 リバースプロキシ DMZからTrustへのリクエスト転送に使う。 mod_proxy_balancerを組み合わせると ロードバランスも可能。 フォワードプロキシ TrustからインターネットにGETする場合など。 mod_proxy自体はキャッシュしてくれない。 クライアント mod_proxy httpd httpd

Slide 10

Slide 10 text

(4) mod_proxy (続き) 必要なプロトコルを組み合わせて LoadModule すればおk ● mod_proxy (本体) ○ mod_proxy_http (HTTPプロキシ) ○ mod_proxy_connect (SSL/CONNECTプロキシ) ○ mod_proxy_ftp (FTPプロキシ) ○ mod_proxy_ajp (AJPプロキシ) ● mod_proxy_balancer (ロードバランサ) ProxyPass /ap http://172.16.3.1/ap ProxyPassReverse /ap http://172.16.3.1/ap タイムアウト、フェイルオーバ時間に注意する。 (上位LBを含めた)シーケンス図を書いて整理するとよい。

Slide 11

Slide 11 text

(5) mod_cache RFC2616のコンテンツキャッシュ制御を提供する。 ●mod_disk_cache (ディスクキャッシュ) ●mod_mem_cache (メモリキャッシュ) デフォルトでは、クエリ無しで、レスポンスヘッダに Last-Modified, Expires, ETag のいずれかが付いていればキャッシュする。 リバースプロキシの性能を飛躍的に向上できる。 ただし、キャッシュされる条件、有効期限に注意すべし。

Slide 12

Slide 12 text

ちなみに、mod_file_cache 起動時にファイルをメモリに読み込むことで高速化するモジュール。 mod_cacheとは別物。 2つの方式を選べる。 ●起動時にファイルをmmap()しておく。 ●起動時にファイルのファイルハンドルを開いておく。 キャッシュを更新するにはhttpdの再起動が必要。 Experimentalだし使わない方がいいかも。

Slide 13

Slide 13 text

(6) mod_cgi CGIを使うためのモジュール。 worker MPMではmod_cgidを使う。 以下のディレクティブが使えるようになる。 AddHandler cgi-script .cgi Options +ExecCGI AcceptPathInfo on ScriptAlias /cgi-bin /var/www/cgi-bin ScriptLog /var/log/apache2/cgi_log

Slide 14

Slide 14 text

(7) mod_suexec CGIをユーザアカウントで実行する機能を提供する。 例えば、 http://example.com/~int128/index.cgi というリクエストを受けたとき、スクリプトを ●apacheユーザで実行する。 ←suEXEC無効 ●int128ユーザで実行する。 ←suEXEC有効 suEXECありでビルドされたApacheでのみ使える。 ディレクトリやスクリプトのパーミッションがチェックされる。 期待通り動かないときは suexec_log を参照。

Slide 15

Slide 15 text

(8) mod_actions メディアタイプやリクエストメソッドに応じて CGI スクリプトを実行す る機能を提供する。 Action application/x-httpd-php5 /cgi-bin/php.cgi AddHandler application/x-httpd-php5 .php5 *.php5へのリクエストはCGIスクリプトを起動する。 さくらサーバで野良PHPを使うためにActionディレクティブを使った など。

Slide 16

Slide 16 text

(9) mod_speling リクエストURIのスペルミスを訂正して、それっぽいリソースを返し てくれるモジュール。大文字小文字の間違い、1文字の誤りを訂正 する。 CheckSpelling on やってみた。 ●間違ったURLを叩くと、正しいURLにリダイレクトされる。 ●候補が複数ある場合は選択ページ(英語)が表示される。 ●クエリパラメータには効かない。

Slide 17

Slide 17 text

(10) mod_version バージョンに依存する設定を書くためのモジュール。 = 2.2> # Settings for httpd 2.2 or later 正規表現も使える。 # Workaround for httpd 2.2.11~13

Slide 18

Slide 18 text

ご清聴ありがとうございました 一番いいconfigを頼む