-Apache全般情報。現在の主流は1.3と2.2系 #contents *基本情報 [#mc9886f1] **バージョン毎の特徴 [#e6d442f0] -1.3.x 2010年1月でついに新規リリース停止。2007年あたりからバイナリパッケージではほぼ入手困難になりつつあるのでコンパイルの知識が必要とされる。 -2.0.x スレッドを使えるようになったが、実際にはこれまでと同じプロセスを増やしていく起動(prefork)がデフォルトになっていることが多い。2.2がリリースされてちょっと中途半端な位置づけに感じる。 -2.2.x 最新バージョンだが、すでにFedoraや比較的安定志向のVineですらバイナリパッケージを用意している。Tomcatと容易に連携できる。 **設定ファイルの場所 [#q3373e35] たいていのOSにはバイナリパッケージも用意されていてその場合はOS毎に違ってくる。コンパイルの場合は何も指定していなければ/usr/local/apache/conf以下になる。 |RedHat系|/etc/httpd/conf| |Debian系|/etc/apache/conf| *DOS対策 [#o905c9fa] +mod_evasive +mod_dosdetector *コンパイル [#k538e786] **2.0.x系 [#i526c73c] ./configure --enable-mods-shared=all --enable-shared=yes --enable-ssl --enable-proxy ※SSLを有効にした場合opensslのライブラリが必要 再コンパイル時の注意./configure でやるとLoadModule一切なしのhttpd.confが作成される そのあと--enable-mods-shared=allしてもhttpd.confはそのままなので注意 いったん消してmake installする -成功事例 --Vine2.6r4,3.0 --MiracleLinux2.1,3 --RedHatLinux8.0,9,3 --CentOS3.4 **2.2.x系 [#p945c70b] ./configure --prefix=/usr/local/apache22 --enable-mods-shared=all --enable-proxy-ajp --enable-proxy **[[mod_sslを静的に組み込む:http://www.stackasterisk.jp/tech/systemConstruction/apache09_03.jsp#3]] [#s7535e43] **PHP [#w6eb0f41] LoadModuleは自動で入る。残りはhttpd.confに以下の設定をする # for PHP AddType application/x-httpd-php .php ***PHP4.x [#g4cd15b8] コンパイルにbison,flex必要gnuからとってきて、bison,flexの順でconfigureのmake installする。/usr/local/binにパスを通しておくこと! 今回はPostgresを有効にしてコンパイル ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pgsql=/usr/local/pgsql --enable-mbstring PostgresもMYSQLも入ってれば以下でOK(MiracleLinux3.0 フルインストール) ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pgsql --with-mysql --enable-mbstring ***PHP5.x [#b3734f30] flex,libxml-devel,libxml2-devel,postgresql-devel必要 ./configure --with-apxs2=/usr/local/apache2/bin/apxs --enable-mbstring --enable-mbregex --with-pgsql --with-openssl=/usr/local/ssl/ --without-mysql --with-libxml=/usr/local/lib *Apacheの動作モード [#k329f1f0] preforkとworkerとがありApache2.0より追加されたスレッドで動作するのがworkerだが、実態はほとんどpreforkが継続して使われている。以下のコマンドで複数プロセスが見えればpreforkである。 ps -ef | grep apache *httpd.confの設定 [#i226af0b] **インストール後のtodo [#td7a690d] 実行ユーザーはwwwにする groupadd www useradd -g www -s /sbin/nologin www +AddDefaultCharSetコメントアウト(2.0.53より削除されている) +LanguagePriority ja +User www +Group www 実行時のバージョンを隠す ServerSignature Off -[[NameVirtualHost:http://www.ns-labs.com/linux/tsubo5.html]] **LocationとDirectoryの使い分け [#u6f7d664] Locationはファイルシステムの外にあるものを設定するときに使う。DocumentRoot以下に対する設定ならばDirectoryを使う。全体に対する設定にもLocationを使う。 <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 192.168.0.1 </Location> **ユーザーディレクトリ使用可能にする [#td7b9ca2] rootでchmod 751 username **CGIディレクトリ [#e1e92006] <Directory /home/httpd/cgi-bin> Options ExecCGI </Directory> CGI実行は httpdの実行者がapacheユーザーとなるので755にしないと500エラー #For UserDir CGI ScriptAliasMatch ^/~([a-zA-Z0-9_-]+)/cgi-bin/(.+) /home/$1/cgi-bin/$2 <Directory /home/*/cgi-bin/> Options ExecCGI AddHandler cgi-script .cgi </Directory> **ログの設定 [#q6aa89b3] -ワームログの除去と家庭内アクセス(192.168.1.0/24)を別のログに記録する #Log setting SetEnvIf Remote_Addr 192.168.1. homelog nolog SetEnvIf Request_URI "default.ida" wormlog nolog SetEnvIf Request_URI "root.exe" wormlog nolog SetEnvIf Request_URI "cmd.exe" wormlog nolog SetEnvIf Request_URI "Admin.dll" wormlog nolog SetEnvIf Request_Method "(GET)|(POST)|(PUT)|(DELETE)|(HEAD)" !worm SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(css)|(swf)$" nolog LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent CustomLog logs/home_log common env=homelog CustomLog logs/worm_log common env=wormlog CustomLog logs/access_log combined env=!nolog **SSLの設定 [#r55d5b05] LoadModule ssl_module modules/mod_ssl.so <IfDefine SSL> LoadModule ssl_module modules/mod_ssl.so Listen 443 SSLSessionCache shm:/var/cache/ssl_gcache_data(524288) <VirtualHost _default_:443> DocumentRoot /usr/local/apache2/htdocs SSLEngine on SSLCertificateFile conf/ssl/server.crt SSLCertificateKeyFile conf/ssl/server.key <Files ~ "\.(cgi|shtml)$"> SSLOptions +StdEnvVars </Files> <Directory /home/httpd/cgi-bin> SSLOptions +StdEnvVars </Directory> SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost> </IfDefine> **SSIの利用 [#g941a4c6] <Directory "xxx"> Options Includes or IncludesNoExec AddHandler server-parsed .shtml AddType text/html .shtml </Directory> 上記設定でxxxディレクトリ以下で.shtmlのみ利用可能になる **リバースプロキシ [#i610af17] LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so #Proxy ProxyRequests off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /tu/ http://192.168.1.78/ ProxyPassReverse /tu/ http://192.168.1.78/ -SSLに対してリバースプロキシをする場合は下記を追加 SSLProxyEngine On **WebDAVの設定 [#y3e36cee] 1.3系は日本語問題ありなのでできれば2.0系で運用すべし +mod_dav.soをインストール +httpd.confに以下のように追加 **Windowsで2.0とjkで連携 [#p0404a8a] mod_jk.soはバイナリを入れる。configの設定はlinuxとまったく同じでよい *ワンテク [#pabebdbe] |BASIC認証回避|http://id:pass@URL/| **コマンドラインログ解析 [#rb50316c] awk -F " " '{print $1}' access_log | uniq -Fの後がデリミター。ここではスペースを指定している。さらに{print $1}で区切られた一つ目(アクセス元IP)を表示している。 awk -F " " '{print $1}' access_log | sort | uniq -c | sort -応用編。IP毎にアクセス数を算出する。 *利用しているモジュール解説 [#td8b003f] **mod_rewrite [#ga8cd507] URL書き換えできるモジュール。ローカルアドレスをそのまま返すのでリバースプロキシーになりません。サイト移転時などに重宝する。 AllowOverride FollowSymLinks RewriteEngine On RewriteRule ^/app/(.*)$ http://転送先/$1 -サーバー環境変数も使える RewriteRule ^hoge\.html /hogehoge\.html?%{QUERY_STRING} [L,PT] **mod_header [#xeddebc9] レスポンスヘッダーに付け加えたりできる。キャッシュコントロールなどをまとめて入れておくと便利。 *パフォーマンスについて [#e92fa4a2] **KeepAliveについて考察する [#g765cc0c] 時間切れまでつなぎっぱなしという恐るべきリソース消費。詳細は要調査 なおPHPを有効にするとプロセスのサイズが膨れるのでKeepAliveを短く(1秒ほど)して、プロセスが増えないようにしたほうが良い。 *有用リンク [#a0e09bcc] -[[パフォーマンスチューニング:http://tech.bayashi.net/svr/doc/apache/tune.html]] #counter