事前確認事項 †インストール †aptitude install apache2-mpm-xxxx 動作を軽くする為に不要なモジュールは無効にする †以下は有効にしているもの 設定箇所 †Load Balanerとして動かす †まずproxy, proxy_http, proxy_balanerをロードする a2enmod proxy proxy_http proxy_balaner 次に以下のファイルを編集 <Proxy *> AddDefaultCharset off Order deny,allow Deny from all Allow from all #<--検証期間中などはIPなどでもOk #Allow from .example.com </Proxy> /etc/init.d/apache2 restart vhost設定を作成 <VirtualHost *:80> ServerName funny.example.jp:80 ProxyRequests off ProxyPass / balancer://funny/ ProxyPassReverse / balancer://funny/ <Proxy balancer://funny/> #web server 01 BalancerMember http://web01.private/ loadfactor=10 #web server 02 BalancerMember http://web02.private/ loadfactor=10 ProxySet lbmethod=byrequests Order Allow,Deny Allow from all </Proxy> ErrorLog /var/log/apache2/error-funny.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access-funny.log combined </VirtualHost> a2ensite funny-lb /etc/init.d/apache2 reload 参考URL UserAgent?を見てページを出し分ける †Dir構造 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_USER_AGENT} ^(DoCoMo|KDDI|DDIPOKET|UP\.Browser|J-PHONE|Vodafone|SoftBank) RewriteRule ^$ /maintenance_mobile.html [R] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^$ /maintenance.html [R] </IfModule> LB配下のサーバでIP制限をかける †LBをmod_proxyで実装していると、IPがLBのIPになってしまう為、IP別の振り分けを行う場合はこんな.htaccessを置くと振り分けが出来ます。 LB -Web1:/var/content/.htaccess <--ここに書く -Web2 特にproxy経由でアクセスしたLB越しのWebのリクエストのX-Forwared-forは ↓XXX.XXX.XXX.XXX.XXXとYYY.YYY.YYY.YYY以外だったらmaint.htmlを見せる RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{HTTP:X-Forwarded-For} !^.*XXX\.XXX\.XXX\.XXX$ RewriteCond %{HTTP:X-Forwarded-For} !^.*YYY\.YYY\.YYY\.YYY$ RewriteRule .* maint.html [R=302,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .* ./index.php 特定のディレクトリに来たら別の場所へリダイレクト †引越しをした時など /etc/apache2/site-enabled/example.jp.conf <VirtualHost *:80> ServerName example.jp DocumentRoot /var/www/example_jp/ <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/example_jp/> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> AccessFileName .htaccess Redirect /wiki http://example2.jp/wiki-new ErrorLog /var/log/apache2/error.example.log LogLevel warn ServerSignature Off CustomLog /var/log/apache2/access.example.log combined </VirtualHost> IP別にページを出し分ける †/var/www/.htaccessとかで Options +FollowSymlinks RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REMOTE_HOST} !^123\.45\.67\.89 RewriteRule \.html$ /other-page.html [R=302,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .* ./index.php 特定のファイルタイプを圧縮する †mod_deflateとmod_filterを有効にして a2enmod deflate filter vhostで設定している設定ファイルの<Directory></Directory> <IfModule mod_filter.c> #Netscape 4.x :( BrowserMatch ^Mozilla/4 gzip-only-text/html #Netscape 4.06-4.08 :( BrowserMatch ^Mozilla/4\.0[678] no-gzip #MSIE/ 2.0.48以上のバージョンだと以下の方法じゃないと期待した動きをしない BrowserMatch \bMSIE[E] !no-gzip !gzip-only-text/html FilterDeclare Comp CONTENT_SET FilterProvider Comp DEFLATE resp=Content-Type $text/plain FilterProvider Comp DEFLATE resp=Content-Type $text/html FilterProvider Comp DEFLATE resp=Content-Type $application/javascript FilterProvider Comp DEFLATE resp=Conten-Type $text/css FilterChain Comp #don't compress images SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|zip|lzh|exe)$ dont-vary #proxies don't deliver the wrong content Header append Vary User-Agent env=!dont-vary </IfModule> とすると上記text/plain, text/html, application/javascript, text/cssは圧縮される。 1443バイトから771バイトになってるヾ(≧∀≦)ノ 画像へのリクエストをアクセスログに記録しない †SetEnvIf Request_URI \.gif image-request SetEnvIf Request_URI \.jpg image-request SetEnvIf Request_URI \.png image-request CustomLog logs/access_log common env=!image-request 確認方法 †設定ファイルを確認する apache2ctl configtest 現在接続されているユーザーが終了後、restartする apache2ctl graceful 強制再起動 apache2ctl restart /etc/init.d/apache2 restart エラー時には †request failed: error reading the headers †[Wed Feb 02 18:23:09 2011] [error] [client XXX.XXX.XXX.XXX] Invalid URI in request HTTP/1.1 200 OK [Wed Feb 02 18:23:09 2011] [error] [client XXX.XXX.XXX.XXX] request failed: error reading the headers 調べてみるとリクエスト方法がおかしいようです。 internal dummy connectionとは? †ログを見てみたら、 ::1 - - [24/Jul/2009:05:29:32 +0900] "GET / HTTP/1.0" 200 11362 "-" "Apache/2.2.3 (Debian) PHP/5.2.9-0.dotdeb.1 with Suhosin-Patch mod_ssl/2.2.3 OpenSSL/0.9.8c (internal dummy connection)" ってでてる。internal dummy connectionって何よ!と思って調べてみたら、こういう事らしい。 参考URL † |