2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Apacheのmod_proxyのコードを読んでみる(1)

2
Last updated at Posted at 2018-04-26

はじめに

コードを読もうと思ったキッカケは、mod_proxy_balancerでproxy先とWebSocket通信をするために、mod_rewriteを使ってURLを書き換えないと実現できなかったためです。

BalancerMemberディレクティブがhttpとwsの両方のプロトコルを同じproxy先で扱えるようになっていないため、なぜそのような振る舞いになるのか気になりました。

関連する実装で主要なところを一通り読んだので備忘録を兼ねて理解内容を記事にします。

時間が取れればmod_proxyだけでなく、mod_proxy_balancerやmod_proxy_wstunnelも整理して記事にする予定です。

我流で読み進めているので、理解内容に間違いなどありましたらご指摘ください。

(参考情報)mod_proxy_balancerとmod_rewriteを使って実現する方法

https, wssの例ですが、http, wsに直して上手くいきました。

コードリーディングの進め方

Apacheのモジュールのコードは初めて読むので、まずはApacheの全体のシーケンス(hookの呼ばれる順番など)を理解する必要があるだろうと考え、そこから始めました。

実行環境

  • OS:CentOS 7.3
  • Apache:v2.4.23

全体像の把握

全体シーケンス、各フェーズの役割

Apacheの処理の全体シーケンス、およびそれぞれのフェーズの役割については参考情報のページが理解するのに大変役立ちました。

私には、このページ以上に分かりやすく説明できないですし、Apacheモジュールのコードを読む、あるいはモジュール開発をする方は一読することをお勧めします。

フックの呼ばれる順番や、各フックの役割など大変参考になりました。

参考情報

mod_proxyに関わる各ファイルの説明

mod_proxyの実装は、私の環境では次の場所に格納されていました。

  • httpd-2.4.23/modules/proxy

各ファイルの説明

FileName Description
mod_proxy.h mod_proxy及びその後段(mod_proxy_httpなど)を含めて必要な構造体などを定義したヘッダファイル
mod_proxy.c mod_proxyの本体の実装。詳細な処理は後段に委譲していたりする
mod_proxy_xxx.c mod_proxy本体から委譲される処理をする実装ファイル

次回の予定

今回は大まかな全体像について説明したので、次回はmod_proxyの実装の理解内容に入っていこうと思っています。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?