うまいぼうぶろぐ

linuxとhttpdとperlのメモ

apache

共用サーバの接続制限で良さげなapache module - mod_vhost_maxclients

ペパボの中の人さまさま。 https://speakerdeck.com/matsumoto_r/virtualhosting-security-performance-operasion http://hb.matsumoto-r.jp/entry/2015/08/29/151920 https://github.com/matsumoto-r/mod_vhost_maxclients virtualhostごとに同時アクセス数…

apache suexec + php cgi mode (mod_action) 復習

復習。 以前はsuPHPを試したこともあるけど d.hatena.ne.jp php 5.3から各コンテンツディレクトリで.user.ini 置くことで 設定上書きできるようにもなったので、apacheとphpだけのsimple構成を復習する。 概要 suexecしてcgiはユーザ権限で動かす phpはmodul…

apache でload average の値によってページを差し替えるサーバ負荷に優しい方法

# aws でauto scaling しろよ、というのはさておき http://httpd.apache.org/docs/2.2/rewrite/rewritemap.html http://httpd.apache.org/docs/2.2/programs/httxt2dbm.html RewriteMap で外部のファイル/コマンドを実行した値を変数に入れて、RewriteCond …

RHEL yum でinstallしたapache はLoadModuleからsuexec_module を決しても/usr/sbin/suexecがあるとsuexecが有効になるみたい

# source installした場合は試してない。httpd.conf (or includeされているその他のfile)でloadmoduleしている場合 $ grep suexec httpd.conf LoadModule suexec_module modules/mod_suexec.so $ httpd -M 2>&1 | grep suexec suexec_module (shared)起動時…

apache 400 エラーページについて

http://httpd.apache.org/docs/2.4/en/custom-error.html http://httpd.apache.org/docs/2.4/ja/custom-error.html documentに明示されていないけど、400 エラーについては ErrorDocument 400 /error/400.htmlのようなファイルパスは使えない。こっち ErrorD…

RewriteRule でredirect時にquery stringを削除する

久々すぎて完全に忘れてた https://wiki.apache.org/httpd/RewriteQueryString Removing the Query String Delete the query string entirely.RewriteRule ^/page /page? rewriteruleでredirect時にquery stringを削除するには置換後のURLの末尾に"?"をつけ…

apacheのdefaultのlogformatを少しだけいい感じにカスタマイズする

一部でLTSVが流行っていたりしますが、いまはそれは考えません。 apacheのdefualt のcombined LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 少しだけいい感じにしたformat LogFormat "%a %l %u %t \"%r\" %>s %b \"%…

apache AddHandlerはAddTypeより優先される?

AddHandler/AddType: 特定の拡張子に特定の動作をさせる設定。 AddType application/x-httpd-php .php AddHandler cgi-script .cgi例えばこう設定している場合、index.cgi をrenameして index.cgi.yyyymmdd などとしていてもcgiとして動作した。index.php を…

ab でPOSTのベンチマーク

-p postfile postデータを書いたファイルをで指定 -T content-type "application/x-www-form-urlencoded" を指定 postfileはURLエンコードしておく必要あり。複雑なPOSTデータの場合はngrep/tcpdumpしておきながら、一度ブラウザでPOSTしたものをコピペして…

mod_rewriteを書く場所によってRewriteRule がマッチする対象が異なる件

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule これちょいちょい忘れてはまる。ex: http://example.com/foo/bar/ => http://example.com/hoge/bar/ にリダイレクトいつもは基本的にvirtualhost内に書くからこう書いてる。 RewriteEngi…

mod_rewrite でBasic/Digest認証ユーザの名前を変数に利用する

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond Other things you should be aware of: の5番。 %{LA-U:variable} can be used for look-aheads which perform an internal (URL-based) sub-request to determine the final value of v…

mod_rpaf でオリジナルのクライアントのIPでアクセス制御できなくなってた原因

http://heartbeats.jp/hbblog/2012/03/mod-rpaf.html http://d.hatena.ne.jp/hogem/20090622/1245675445 http://stderr.net/apache/rpaf/ https://github.com/ttkzw/mod_rpaf-0.6 reverse proxy 配下にapache + mod_rpaf を使っている状況で、以前はmod_rpaf…

mod_cbandのCBandSpeed で帯域制限をすると設定値の約1/3のスループットしか出ない謎

http://d.hatena.ne.jp/hogem/20090808/1249658005 前から疑問に思ってたけど。帯域・同時接続数を制限するCBandSpeed の1つめの引数に帯域を設定できるけど、設定値の約1/3しか出ないっぽい? <VirtualHost *:80> ServerName foo.example.com # snip <IfModule cband_module> ## kbps rps max_con CBa</ifmodule></virtualhost>…

apache 2.4 source install

http://httpd.apache.org/ event mpmが実装されたりで楽しみな2.4系がstableになったのでとりあえず入れた。pcreが必要なので、pcre-devel を入れておく。 # yum install -y pcre-develapache 2.4系からapr, apr-util も別のsourceから取ってこないといけな…

apacheとnginxでX-Reproxyを使う

lighttpd でも使えるらしいんですが、個人的に使ってないので割愛 http://www.google.co.jp/search?gcx=w&sourceid=chrome&ie=UTF-8&q=lighttpd+x-reproxy X-Reproxy-URLはPerlbal + MogileFSなどでファイル配信する場合によく使う、とは聞いていたのですが…

apache mod_proxyに脆弱性 CVE-2011-3368

http://seclists.org/fulldisclosure/2011/Oct/232 http://www.contextis.com/research/blog/reverseproxybypass/ RewirteRule [P] / ProxyPassMatch の記述(変数のキャプチャ($1)の書き方)次第では、攻撃者にproxy先を任意のhostに変更されるという脆弱性。…

apache脆弱性対策 - Range header DoS vulnerability Apache HTTPD 1.3/2.x (CVE-2011-3192)

http://mail-archives.apache.org/mod_mbox/httpd-announce/201108.mbox/browser もうあちこちで大騒ぎになっていてみんな知ってると思うけど。HTTP Requestに非常に長い(コンマ区切りの複数のヘッダ) Rangeヘッダを送られるとapacheのプロセスがメモリ食い…

apache 2.2.15 から mod_reqtimeout とやらが使用可能になってた

http://httpd.apache.org/docs/trunk/new_features_2_4.html#newmods http://httpd.apache.org/docs/2.2/mod/mod_reqtimeout.html apache 2.4 からのnew modules だと思ってたら、2.2.15 から使用可能になってた。slowloris ようにrequestを完了させないでDo…

Centos rpm httpd 2.2.3 ではFileEtag None が無視される

− http://httpd.apache.org/docs/2.2/ja/mod/core.html#fileetag 諸事情でバージョン指定、というかrpm指定されたapacheを使っています。で、複数台のwebサーバのローカルディスクにコンテンツを置いているので、(inodeが違うためサーバごとにEtag ヘッダが…

debian apache2 suexec package

sourceではやったことあるけど、dpkg ではやったことないので。ref. apache + suexec, suphp apache2とsuexec install。 # apt-get install apache2 apache2-suexec suexecのconfigure option 確認 # /usr/lib/apache2/suexec -V -D AP_DOC_ROOT="/var/www" …

apache編 - error_logにfavicon.icoのFile not foundを出なくする

ref. nginx の favicon に関する設定メモnginxはlog_not_found off にすればいいだけなので、apacheではどうすれば良いかもちょっと考えてみた。(error logにこんなにこだわらなくてもいいんだけど) 案1: 空ファイル作る document root 以下を触れる環境にあ…

VirtualHost内のREQUEST_FILENAMEはREQUEST_URIと同じになる

ということをすっかり忘れていた。 http://httpd.apache.org/docs/current/mod/mod_rewrite.html 通常 %{REQUEST_FILENAME} はそのfileへのfull pathになるけど、VirtualHost内で使用すると%{REQUEST_URI} と同じになる。 REQUEST_FILENAME The full local f…

mod_evasive でアクセスを弾いたときerror codeを503にしたい

作者のblog ? http://www.zdziarski.com/blog/?page_id=442 ITproの記事 http://itpro.nikkeibp.co.jp/article/COLUMN/20070510/270527/ mod_evasive mod_evasive is an evasive maneuvers module for Apache to provide evasive action in the event of an …

apacheに設定されているSSL証明書のファイル名を表示

# httpd -t -DDUMP_CERTS

monitでbasic認証がかかったURLをcheckする

send/expectでheaderを指定する Authorization headerで送信する文字列。 $ echo -n user:pass | nkf -MB dXNlcjpwYXNzmkmonitのapacheの設定 check process apache with pidfile /var/run/httpd.pid group www start program = "/etc/init.d/httpd start" s…

apache のsourceに付属している起動scriptが間違ってる件

build/rpm/httpd.init。statusのとこの${pidfile} の変数が間違ってる $ diff -u httpd.org httpd --- httpd.org 2010-12-09 18:18:51.000000000 +0900 +++ httpd 2010-12-09 18:19:01.000000000 +0900 @@ -116,7 +116,7 @@ if ! test -f ${pidfile}; then e…

apacheの mod_cache の設定を復習した

http://httpd.apache.org/docs/2.2/en/mod/mod_cache.html http://httpd.apache.org/docs/2.2/ja/mod/mod_cache.html "Studying HTTP" HTTP Header Fields apacheの日本語のdocumentはversionが古くて、いくつかのdirectiveの説明が無い。他には Caching Gui…

mod_proxy - ProxyPass、BalancerMemberのパラメータのdocumentを読んだのでまとめた

http://httpd.apache.org/docs/2.2/en/mod/mod_proxy.html#proxypass http://httpd.apache.org/docs/2.2/ja/mod/mod_proxy.html#proxypass timeoutとかconnectionとか。今まで真面目にみてなかったので。mod_proxyのdocumentは翻訳が追いついてないためか、…

apache 2.2.12以降で ProxyPassReverse が balancer:// でも使えるようになってた

http://archive.apache.org/dist/httpd/CHANGES_2.2 ProxyPassのパラメータ検討してて、色々見てたら表記の記述を発見。 *) mod_proxy: Complete ProxyPassReverse to handle balancer URL's. Given; BalancerMember balancer://alias http://example.com/fo…

open proxy 経由のsmtp

spamの温床になるのでポート制限をしていないopen proxyはやめましょうっていう。当たり前だけど。 apacheのmod_proxy を使う話 http proxyサーバに接続後 CONNECTメソッドでsmtpサーバへ接続 apache で実装する場合、mod_proxy、mod_proxy_connect を有効に…

apache + subversionのwebdav上のhtml/textファイルを正しく開く方法

思いつきエントリで。リポジトリのファイルをwebから直接参照したい場合に。 通常のsubversionの設定だと、index.html とかのファイルにアクセスしてもContent-typeがplain/textなのでhtmlソースが表示される。また、ただのテキストな設定ファイルでもエンコ…

Rangeリクエスト勉強

ボディの一部分を取得するとき。レジュームによる再DLとか。応答は206 Partial Contentになる。ただし、apacheでcgi/ssiを使っていて、Centent-Lengthを返さない場合はRangeリクエストされても、200 OKでボディ全体を返す。cgi/ssi でもアプリ側でContent-Le…

apacheはContent-LengthレスポンスヘッダがないとRangeリクエストが有効にならない

っていうことを知らなかった。versionによるかも? 試したのは2.2.15。rangeリクエストはレジュームによる再DLとかで、コンテンツの一部を取得したいときに使う。他には携帯で動画をDLして再生するときとかに使われてる? http://www.studyinghttp.net/heade…

mod_deflateで動的コンテンツにContent-Length レスポンスヘッダを追加する

なんか噂に聞いたのでやってみた。携帯向けではContent-Lengthが必須ヘッダ(docomoとsoftbank)となっているけど、cgi/ssiだと (cgiはアプリ側で記述していなければ) Content-Lengthヘッダは追加されない。でもmod_deflateで圧縮すればapacheが勝手に追加して…

SSLアクセラレータ/リバースプロキシ配下でのwebdav

http://silmor.de/49 http://blog.yoheis.net/2007/08/webdav.html http://blog.dealforest.net/2009/07/subversion_behind_an_apache_reverse_proxy/ http://httpd.apache.org/docs/2.2/ja/mod/mod_headers.html#requestheader http://httpd.apache.org/doc…

共有webサーバでperl, php, python等を提供する場合の設定

断片部に書いてた(放置してた)メモにphpのこと追記して整理。 今までにメモってた色々なエントリ (主にphpをcgiで動作させる関連) apache + suexec, suphp phpのinstall - SAPI cli, cgi, apache DSO module メモ suphpでphp.iniの設定を上書きする phpをcgi…

phpをcgiで動かすときのmod_suphpの特徴

素のcgiモードで動かす場合と比較して。 mod_actionの設定が不要 どのURLにAliasするとかとか考えなくてよい 実行されたphpを特定しやすい suexecのログにはphp-cgi しか記録されない suphpのログには実行したphpファイルまで記録される もちろんsuexec + ac…

phpのinstall - SAPI cli, cgi, apache DSO module メモ

http://www.php.net/manual/ja/features.commandline.php http://www.php.net/manual/ja/security.cgi-bin.php http://d.hatena.ne.jp/hogem/20090809/1249801747 今まで専用サーバだからほとんどapache moduleとして入れていたけど、共有サーバだからcgi版…

apacheのRLimitCPUはworkerでは有効にならないのか

preforkのサーバは制限できてるけど、workerでは効いてないぽいので調べた。 設定 ## 120 second RLimitCPU 120 ## 64M byte RLimitMEM 67108864 確認用のcgi とりあえず無限ループするだけのcgi。RlimitCPUはプロセス生存時間じゃなくてCPU利用時間の制限な…

MultiViewsMatchのデフォルトの動作 について

http://norainu.net/mt/archives/2005/08/multiviewsmatch.html http://httpd.apache.org/docs/2.2/ja/mod/mod_mime.html#multiviewsmatch http://httpd.apache.org/docs/2.2/ja/content-negotiation.html#extensions MultiViewsを使うとファイルの拡張子を…

MultiViewsでコンテントネゴシエーション

http://httpd.apache.org/docs/2.2/ja/mod/mod_negotiation.html http://httpd.apache.org/docs/2.2/ja/content-negotiation.html http://httpd.apache.org/docs/2.2/ja/mod/mod_mime.html Options MultiViewsで設定。Webブラウザ(つかHTTP Request Header)…

apacheのlocationのdocument間違ってる??

あれー勘違いかな。今さらながら初歩的なところに疑問が。 http://httpd.apache.org/docs/2.2/ja/sections.html#file-and-web ここのmanualにあるように、 <Location /private> Order Allow,Deny Deny from all </Location>と設定すると、/privateから始まるURL http://yoursite.example.co…

apache1.3で最大接続数を増やす

apache1.3系を使う機会がなくなってきたけど、たまに要るので。apache1.3系はソースで上限が256固定なので、変更したいなら $ grep HARD_SERVER_LIMIT src/include/httpd.hで出てくる値を適当に変更する。2.0, 2.2だとServerLimitディレクティブで変更可能。

tracで静的ファイルをpythonから分離する

mod_pythonでも効果があったので、trac.cgi経由の場合はもっと顕著に効果が出そう。 直接apache(aliasとtrac.iniのhtdocs設定)で応答した場合 $ ab -c 10 -n 100 http://example.com/tracdocs/css/trac.css | grep 'Requests per sec' Requests per second: …

mod_proxyのProxyPassReverseの意味がようやく理解できた

気がする! なぜProxyPassReverseにbalancer://~~ を設定できないのか *1 なぜProxyPassReverseにajp://~~ を設定できないのか なぜbackendがhttpとajpの場合で、ProxyPassReverseに設定するURLが異なるのか などなど。今まではmod_proxyする機会がほとんど…

apacheのDirectory、Locationを複数書く場合(マージ)の注意点

Directory、Locationなどを複数書いて設定している場合(特にIncludeで入れ子してる時とか)は、うっかりしていると設定間違えかねないので注意ですね。 http://httpd.apache.org/docs/2.2/ja/sections.html#mergin 適用される順番 (正規表現無し) と .htacces…

mod_proxy_ajp or RewriteRule(Pフラグ)でajpに渡すときのheaderを勘違いしてた

RewriteRule ^/hoge/(.*) ajp://localhost:8009/hoge/$1 [QSA,P,L] もしくは ProxyPass /hoge ajp://localhost:8009/hoge とかした場合でもhost headerはlocalhostじゃなくて、originalのHTTPのhost headerを送る。tomcatでvirtualhost(CATALINA_HOME/localh…

apacheのmod_sslで中間証明書設定

最近のssl/tlsはLBで終端しているのでmod_sslのことほぼ忘れている。 http://httpd.apache.org/docs/2.2/ja/mod/mod_ssl.html#sslcacertificatefile SSLCACertificateFile /path/to/cert.pem

apacheで特定のディレクトリ、URLでErrorDocumentの設定を解除する

サイト全体でErrorDocumentを設定しているけど、特定ディレクトリだけ設定を外したいときとか。もっとややこしい記憶があったんだけど、こんな簡単だったか。 http://httpd.apache.org/docs/2.2/ja/mod/core.html#errordocument <Direcotry /path/to/hoge > ErrorDocument 403 default </Directory>

apacheのRedirectとRedirectMatch

RedirectはURLを引き継ぐけどRedirectMatchはでキャプチャした変数を使わない場合は引き継がない。というのをたまに忘れる。 Redirect /foo http://exmaple.com/foo RedirectMatch /bar http://example.com/bar RedirectMatch /baz/(*) http://example.com/b…