gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

Digest認証の設定:httpd.conf変

…memoってあったので残すけど。なんか駄目な何かがあったはず(Apacheの2系でNGとかだったかしらん?)
記憶に残ってないので、とりあえずmemoり。思い出すか突っ込まれたら追記

deny from all
AuthType Digest
AuthName "private"
AuthDigestFile /hogehoge/認証かけたいディレクトリ/.htpasswd
require valid-user
satisfy any
--
htdigest -c AuthDigestFileのファイルと同じもの private user名 パスワード

最近めっきりOrc使い webalizer編

Orcちがうawkだってばさって突っ込みを希望しつつざらりと。
…うん久しぶりに感覚戻ってきたってかやぱし便利だわ編。


元ネタ。
apacheSSLなログをwebalizerで解析したいなぁとか思ったのですが。
あっさりさらりんと

No valid records found!

といって怒られてしまいます。
今までのログを捨てつつ「ちゃんと処理をする」のなら、readmeに書いてあるとおり。httpd.conf(の中にあるssl設定ファイル。最近は extra/httpd-ssl.conf とかで外に切り出す事も多いですねぇ)のLogの設定を

LogFormat "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\""

とすべきなのでしょうが。


「ンなこというたかてすでに運用してるんぢゃい」
という方。
えとですねぇ一言で片付けると「ンじゃフォーマットかえちまえばいいぢゃん」となるわけです。
パンがなければケーキです本当はブリオッシュです。
ってな用途用のawk
元が

"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

というデフォルトの状態の時を想定しています。

gawk '
{
  #print $0;
  # IP
  print $3 " - - " $1 " " $2 " " $6 " " $7 " " $8 " 200 " $9 " ";

}

はいシンプルw
ログファイルを適当にcatしてこの子に食わせて上げてください。
とりあえず「webalizerがギリギリわがままを言わない」程度になんとかなります(「refererとかuser-agentとか足りねぇよ」的エラーメッセージはドン無視こいてください)。


追記
…素直にSSLログ食わせるやり方ないもんすかねぇ?


追記
本当はmergelogで整理したかったのですが。

abort due to a problem with ログファイル名:

とかって怒られてしまいました orz
どうしたものやら。


追記
webalizerで失敗したときは、とりあえず
webalizer.hist
webalizer.current
の2ファイルと、あとは
OutputDir
で設定されているディレクトリを一式でりると再チャレンジできます。


追記
で、結局こんなスクリプトをcronに渡してます。

cat SSLのログ | /どこか/ssl_log_format.awk | /どこよ?/webalizer -c /そこか!!/webalizer.conf


いぢょ。
ただのmemoぢゃんとか言うなw

有り得ないmemo:apache2.2系でdigest認証

作業覚え書き。

perhaps misspelled or defined by a module not included in the server configuration

っていうエラーがでた。


とりあえず

./configure --prefix=/opt/apache_2.2.8 --sysconfdir=/opt/apache_2.2.8/conf --enable-modules="so ssl auth_digest_module authn_file_module authz_user_module authz_owner_module " --with-ssl=/usr/local/ssl

して、.htaccess

AuthType Digest
AuthName れるむめい
AuthDigestProvider file
AuthUserFile ぱすわぁどふぁいるめい
Require valid-user

って書いて、ぱすわぁどふぁいるは

htdigest -c ぱすわぁどふぁいるめい れるむめい ゆーざめい

こんな風に作った。


いぢょ。

複数のSSL証明書

んと。直近に発生してたのが

  • 1台のマシンでってつまりひとつのIPで
  • 複数のサービスを、各々違うドメインで動かしてて
  • それらにSSLを導入したい

って話ざんした。


まぁ名前ベースのVirtualな設定にSSLの設定もぐりこませりゃいいや証明書はそれぞれ買うとして。


はいダウト。
うん冷静に考えればNGなことわかるのに、ついうっかりさんしてしまいました久しぶりに*1


一応おさらい。
SSLは「通信を暗号化して」やり取りするです。
…ってとこで冷静に考えると。いわゆる「個人情報をやり取りするのにhttpsぢゃないなんて…」って発言は前提として「パケットがスニったりフったりできる」って事なんだろうかなぁとおもうとちと怖いのですが色々と。


おいといて。


一方で。VirtualHostとかあのあたりの機構は、HTTPヘッダ内にあるhostとかいうものの中にあるドメイン名から判定をするです。


HTTPヘッダの中を見ないと鍵がない。
鍵がないとHTTPヘッダが見れない。


かくして人類は迷宮でミノタウロスに…テセウスの一撃を食らわせることなく迷い死ぬです。たどるべき麻糸もないことですし。
…ってしなれても困るので、せめて麻糸くらいは。


ひとつは「おとなしくIPベースにする」です。問題は、昨今枯渇問題が騒がれて久しいIPをそこまで浪費してよいのやら。
もうひとつは「待ち受けポートを変える」。わりと現実的。URIにポート番号がつくくらいはご愛嬌ってことで。
ただ、携帯系だと、SoftBank系がこれに非対応っぽいので、これもまた憂慮すべき事柄。


ついでに余談。
apachectlでgracefulをよく使うと思うですが(ってか使え)。
普段だと、たとえSSLapacheでもパスフレーズ不要で便利なのですが。SSL証明書追加したときにこれやると「問答無用でパスフレーズ失敗」とみなされるっぽいです。
おとなしくあきらめて、restartなりstop & startなりしませう。


以上微妙な覚書。


翌日追記
ふっふっふ…DoCoMo系公式サイトにて。uidの解決(NULLGWDOCOMOってやつね)しやがらねぇ orz
この辺考えるとEZが一番扱いやすいのかなぁ? 証明書買わなきゃいけないけど orz


さらに追記
………EZ、port指定すると403エラーではねるっぽ orz
そりゃそうだよねぇ考えてみればdomain違う証明書でNG出すキャリアだもんねぇってか証明書でドメイン齟齬はわかるけどport番号指定は別にいいと思うんだけどなぁ orz

*1:久しぶり?とかいう突っ込みはおいちゃん嫌いだな。

Apache2にPHP5系をインストールしてみたりする実験

いろ〜いろ大変だったのですが。結局のところ大切なものは一つだけだったりしました。


./configure する前に必ず make clean すること!!


エラーメッセージとしては
httpd: Syntax error on line xxx of /opt/apache_2.2.3/conf/httpd.conf: API module structure `php5_module' in file /opt/apache_2.2.3/modules/libphp5.so is garbled - perhaps this is not an Apache module DSO?
とかって感じのものが予測されたりします。


…まぁ、本来必須ではあるのですが…最近あんまり意味のないmake cleanだったのですが。
どうやらMustだったようです(苦笑


ちなみに、これが通ったconfigureです。てんこ盛りなのは「色々やってる」からです(笑


./configure \
--with-config-file-path=/etc \
--with-apxs2=/opt/apache_2.2.3/bin/apxs \
--with-mcrypt \
--with-mysql= \
--with-gd \
--with-zlib-dir=/usr/lib \
--with-jpeg-dir=/usr/lib \
--with-png-dir=/usr/lib \
--with-freetype-dir=/usr/lib \
--with-pgsql=/opt/db/postgresql-8.0.3 \
--with-gmp \
--enable-zend-multibyte \
--disable-posix-threads \
--enable-mbstring \
--enable-ftp \
--enable-versioning \

…微妙かも

ちぃと現在、httpd.confの調査やってるですが(正確にはディレクティブの調査)。
………結構おっかないのが色々。
便利そうではあるものの…使いどころ間違えると危なそう。
詳しい調査結果は後日(笑


…と、そういえば。某雑誌にこんな内容が載ってたなぁ。

Includeディレクティブにおいて、ファイル名を直接指定するのはお勧めしない。なぜなら、ファイルが存在しない場合にApacheがエラーとなり、起動しないからだ。
それよりも、ワイルドカードを使ってファイル名をパターンで指定すれば、「Apacheがエラーで起動しない」状況を回避できる。

………まてこら。

Apacheでプロセス処理方法を切り替える

Apache2系のお話。なんか今更な気もするのですが。
なんでも、複数のrequestの処理をするのに、マルチプロセッシングモジュール(MPM)とかっていうモジュールを使っているみたいで。
昔々は「fork(2)だよねぇ」だったのですが、もうちょっとバリエーションがあるみたいです。びっくり。
概ね…


prefork.c
Apache1.3とほぼ同様、スレッドを使わずにforkでじゃかすかバージョン。
「スレッドセーフでないライブラリとの互換性をとるために、 スレッドを避ける必要のあるサイトでは、このモジュールの使用が適切でしょう。 あるリクエストで発生した問題が他のリクエストに影響しないように、 個々のリクエストを単離するのにも、最適な MPM です。」 by http://137.113.100.11/manual/ja/mod/prefork.html というのを読むと「なるほどなぁ」とか思わなくもない。確かにCGIで「threadをちゃんと意識した組み方」してるのってせいぜいJavaな方々ぐらいだと思ふ。


worker.c
一発forkしたら、ThreadsPerChild で設定された分だけはthreadにして、パンパンになったらまたforkして。ううむ確かに「ハイブリッド」 by http://137.113.100.11/manual/ja/mod/worker.html (笑


mpm_winnt.c
Windows NT 向けに最適化されたMPMなんだそうで。まぁつかわんなぁ(爆


って感じ。IfModuleでチェックされてたりするのでまぁ見てみそって感じでしょうか。
httpd -l
でチェックできるんでふが、特に設定してなければ普通は prefork.c になるらしいです by UNIX系。


インテリジェントになったものだなぁ。設定がより一層面倒になった気もするけど。