他設定 †Digest認証 †アカウントファイルの作成。 cd /usr/local/apache2 bin/htdigest -c conf/.htdigestpw realm hoge Adding password for hoge in realm realm. New password: Re-type new password: -c : createオプション。ファイルが既に存在すると、そのファイルを消去してから作成するので注意。 realm : レルム。AuthNameディレクティブで指定する文字列になる。 hoge : 追加するユーザー名 ディレクティブの記述。 <Directory "/hoge/huga"> AuthType Digest AuthName "realm" AuthDigestAlgorithm MD5 AuthDigestProvider file ここではバックエンドにローカルファイルを使用する。 MySQLなどのDBやLDAPを使用する場合はまた異なる。 AuthUserFile /usr/local/apache2/conf/.htdigestpw .ht*はアクセス不可にしているか確認。 それ以前に外部からアクセス出来る場所に置かない。 Require valid-user 特定ユーザに絞ることも可能。 BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On 一部ブラウザのbug回避の為のおまじない </Directory> キャッシュ設定 †更新頻度の低い静的コンテンツはサーバでキャッシュするもよし。 <IfModule cache_module> CacheEnable disk / CacheEnable mem /images CacheDisable /acvive_contents CacheMaxExpire 1800 CacheDefaultExpire 1800 CacheIgnoreNoLastMod Off CacheIgnoreCacheControl Off CacheStoreNoStore Off CacheIgnoreHeaders Set-Cookie CacheLastModifiedFactor 0.1 <IfModule disk_cache_module> CacheRoot /usr/local/var/apache2/cache CacheDirLength 2 CacheDirLevels 3 CacheMaxFileSize 102400 CacheMinFileSize 1 </IfModule> <IfModule mem_cache_module> MCacheSize 100 MCacheMaxObjectCount 1009 #MCacheMinObjectSize 0 デフォルトは0だが、0を設定すると怒られる不思議 MCacheMaxObjectSize 10000 MCacheRemovalAlgorithm LRU MCacheMaxStreamingBuffer 10000 </IfModule> </IfModule> Mod CIDR Lookup †REMOTE_ADDRがCIDR形式で用意したアドレスに一致すると httpd.conf LoadModule cidr_lookup_module modules/mod_cidr_lookup.so CIDRFile "/usr/local/apache2/conf/hoge" /usr/local/apache2/conf/hoge xxx.xxx.xxx.xxx/xx yyy.yyy.yyy.yyy/yy このファイルネーム部分(hoge)が環境変数にセットされる文字になる と準備する。 CIDRのファイル"/usr/local/apache2/conf/MS_Crawl"に 65.52.0.0/14 70.37.0.0/17 70.37.128.0/18 207.46.0.0/16 とリストアップしておくと、一致IPアドレスのアクセスの X_CLIENT_TYPEに"MS_Crawl"とセットされる。 コレを利用して SetEnvIf X_CLIENT_TYPE MS_Crawl search <Directory "/hoge/huga"> Order Deny,Allow Deny from env=search </Directory> など、アクセス避けをしてみたり( ´ω`) FastCGI(mod_fcgid)でPHP †Apache製の方。 環境変数を盛り込んだPHPのラッパを作成。 #!/bin/sh PHP_FCGI_MAX_REQUESTS=10000 export PHP_FCGI_MAX_REQUESTS exec /usr/local/bin/php /usr/local/bin/php-wrapper として保存。実行権つける。 公式の意訳。PHPの環境変数について。
タイミングが悪いと500エラーが出るけど、メモリリークとか考えるとそれなりのリクエスト数で終了させる方がよいというお話の様子。
APCなどはPHP自身がフォークした子プロセスに対し有効だが FcgidIdleScanInterval 60 #60秒おきにプロセス状態を確認する FcgidIdleTimeout 60 #60秒でタイムアウト FcgidProcessLifeTime 600 #600秒経ったアイドルプロセスは終了 FcgidMinProcessesPerClass 0 #Classの意味がよくわからないが、残したい常駐スクリプト数の様子 FcgidMaxProcessesPerClass 1 #同上。最大でもこの数までしか常駐させないっぽい #上2つの組み合わせだと「稼働中は常駐してすぐ返事するが、暇になったらプロセス終了してメモリ解放」的な FcgidMaxRequestsPerProcess 4000 #4000リクエスト処理したらプロセス終了 FcgidWrapper /usr/local/bin/php-wrapper .php #ラッパの指定 AddHandler fcgid-script .php #mod_fcgidで持っているハンドラ これで mod_fcgid がラッパを介してPHPプロセスを起動する。 FastCGI(mod_fastcgi)でPHP †ORACLEの以下のエントリを基に。 ■プロセス管理をmod_fastcgiで行う FastCGIServer /usr/local/bin/php ScriptAlias /php-fcgi /usr/local/bin/php #Actionで使うための準備 AddHandler fastcgi-php .php #ここでは.php に対し fastcgi-phpというハンドラを設定 Action fastcgi-php /php-fcgi #fastcgi-phpハンドラは /php-fcgiを起動 最近のPHPはCGIモードの区別がないが、php-cgiなどのバイナリがあるならばそちらを指定しておくとよい。 ■PHP-FPMを使う Apache2.2系でPHP-FPMを利用するとなると、コレしか方法がないのではなかろうか? PHP-FPMはソケット /var/run/php-fpm/www.sock で待ち受けるとする。 ScriptAlias /php-fcgi /php-fcgi #第二引数は実際に存在しなくてよい AddHandler fastcgi-php .php virtual #第三引数に virtual を指定 Action fastcgi-php /php-fcgi #/php-fcgiを起動 FastCGIExternalServer /php-fcgi -socket /var/run/php-fpm/www.sock <他オプション> #/php-fcgiへのリクエストをソケットに投げる FastCgiWrapper Off #デフォルトはOff 例えばphp-fpmのステータスを表示するには <Location /fpm-status> #PHP-FPMのpm.status_pathで指定した場所 SetHandler fastcgi-php #上で定義したハンドラを指定 Order Allow,Deny Allow from env=local </Location> |