日経平均の上昇は“バブル再来”というわけではない 後藤達也氏×藤野英人氏が語る、投資熱が高まる日本の現在地
Apacheのモジュール開発とはフック関数を開発することである、といって良いと思います。 Apacheが起動した後、HTTPリクエストを受けてからレスポンスを返すまでにはいくつかの段階があります。 開発者は、その中の任意のポイントに独自のフック関数を登録することにより、リクエストの転送などの処理を行ったり、レスポンスを関数内で動的に生成する処理を行ったりすることができます。 それを踏まえた上で、前回の記事の続きです。 前回の記事で示したコマンドを実行すると、blog/mod_blog.cというファイルが生成されます。 これがモジュールのソースコードの雛形になります。 ソースコードの内、始めに注目するべきなのは末尾のモジュール宣言の部分です。/* Dispatch list for API hooks */ module AP_MODULE_DECLARE_DATA blog_module
人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 Apacheのデバッグの方法は多く紹介されていて、例えばgdbを使ってみましょうと紹介されている記事も多いです。しかし、操作の仕方が多岐に渡っていて、なんとなく敷居が高く感じて使わないという人も多いかもしれません。 例えば、Apache周りのエンジニアが一番気になるのは、Segmentation faultだと思います。そこで、今回は自分がSegmentation faultの原因を特定する時の一番手っ取り早い、gdbを使った方法を紹介しようと思います。gdbを使っていない人にとって、gdbって少し敷居が高いんじゃないかなぁ、と思っている人も多いかもしれませんが、今回の方法であればだれでも気軽にできると思います。 まずはバグを作る 今回は、自
普段Webサーバを運用していて、めんどくさいトラブルのひとつに「Segmentation fault」があります。 あれー?なんか500エラーがでるなーなんて思ってログを見るとSegmentation faultになってるときは死にたくなります。 そもそもSegmentation faultはメモリ上にあるデータに対して不正が行われたときに起こるもので、 インフラエンジニアにとってはなかなか手がだせないところでもあります。 それでもなんとかして治さないといけないわけなので せめてどのプログラムが悪さしてるかどうかぐらいは調べ上げてみます。 apacheでのログ apache + mod_perl での環境です。 こんな感じでエラーがでます。 #tail error_log [notice] child pid 26028 exit signal Segmentation fault (11
ちょっと仕事で必要なこともあり、ApacheでRequest処理のフェーズをフックすることについて、調べてみた。 下に書いてあることはおそらく間違っていることもあるだろうと思いますので、あまり信用しないほうがいいかも。 あくまでメモ程度なので。 まず、Requestの処理フェーズをフックするための、一般的な手段としては mod_xxx を使うことになる。 mod_xxxには言語毎にいろんな種類があるらしい。 mod_perlmod_rubymod_mrubymod_pythonmod_wsgimod_luamod_lisp などこれらを使ってApacheの処理フェーズにおいて、各言語で書いた処理でフックできる。 Apacheの処理フェーズは大体以下のようにわかれているらしい Translate Name フェーズMap To Storage フェーズHeader Parser フェーズAc
今回は、apache module について気になることがあったので紹介します。 先日 バージョンアップするために apache module を更新した直後 apache が Segmentation fault してしまうという問題に気が付きました。 Segmentation fault した後に apache を再起動すれば、新しいモジュールが反映されて正常に動作するものの何故この様なことが起こるのか不思議に思い原因を調査してみました。 % curl http://localhost/ curl: (52) Empty reply from server レスポンスが空です。apache のログには [Thr Mar 29 17:52:01 2007] [notice] child pid 20001 exit signal Segmentation fault (11) この様なエ
今回は前回の記事で予告した通り,Apache の(いくつかのタイプの)モジュールが動作するべきか否かをどうやって判断するか,というお話です.タイトルは「ディレクティブの処理」となっていますが,モジュールがディレクティブを処理することと今回のテーマは密接に結びついています. モジュールが,というよりも厳密には各種 hook が,呼び出された際に処理をするべきか否かの判断は,大体の場合そのモジュール用の設定ディレクティブが設定ファイル(httpd.conf)にあるか否かで行います.handler の場合は前々回の記事でも出てきたように,汎用の handler 指定用のディレクティブがあります.(hook ではないですが) filter も,Input/Output filter のための設定用ディレクティブがそれぞれあります.もちろん,必ずこれらのディレクティブを使わなければならない,という訳
GPLv3: free as in freedom documented on the ShellCheck Wiki available on GitHub (as is this website) already packaged for your distro or package manager supported as an integrated linter in major editors available in CodeClimate, Codacy and CodeFactor to auto-check your GitHub repo written in Haskell, if you're into that sort of thing.
前回の記事では,apxs が生成したテンプレートをそのまま動かしてみましたが,今度は少しコードを書いてみましょう.同じ handler を作っても面白くないので,アクセス制御をするモジュールにしてみます.Apache のアクセス制御は2種類あって,一つはユーザ認証を目的としたもので,mod_auth の眷属がそれです.もう一つはリクエストの別の側面,例えばクライアントのアドレスによってアクセスを許可したり拒否したりするもので,標準モジュールでは mod_access がそれに当たります.あまり複雑なことをしても話が見えにくくなるので,今回作るモジュールではランダムにアクセスを許可したり拒否したりすることにします. apxs -g -n denyrandomとして出力したものをベースにしています). 1 #include "httpd.h" 2 #include "http_config.h
先日は,必要に迫られて Apache 1.3 の mod_access を改造したという話を書きました.その時は単にあるものを改造しただけでしたが,ふと思い立って,一から Apache 2.0 用のモジュールを書いてみました.書く上で色々 Web サイトを探してみたのですが,あまり日本語の入門向けの文章が見あたらなかったので,開発する上で分かったこと(と言うほど大したものじゃないですが)をまとめておこうと思います. フェーズには,例えばそのリクエストを受け付けるか拒否するかを決めるフェーズや,リクエストされた URI と実際のディスク上のファイルとの間の対応付けを解決するフェーズ,そしてもちろん実際のレスポンスを生成するフェーズ等があります.hook 関数を挿入するポイントはこれらのフェーズになりますが,もちろんその全てのフェーズのための関数を用意する必要はありません.また個別の設定を施す
先日この記事において hook の呼び出しに関してコメントを頂きました. 実際のところよく分かってない部分もあったので,hook に関してまとめてみました. このページの記述について このページの内容に関して 英語の文章は,全て Apache 2.0.58 のソースコード中から集めてきた原文ママです. 全ての hook に関して調べ尽くした訳じゃないので間違いもあると思います.間違いに気づかれた方はコメントで指摘いただければ幸いです m(_ _)m hook の呼び出し順序に関して hook が呼び出される順序は,「設定初期化」「プロセス初期化」「コネクション」「リクエスト」に関しては記述した順序で呼び出されるようです. RUN_ALL,RUN_FIRST について RUN_FIRST の hook は,呼び出した hook 処理関数が OK や DECLINE エラーを返した場合,その次
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く