(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Apache】一部の通信のみプロキシをせずローカルのページを返す

スポンサーリンク

やりたいこと

Apacheが受けた通信は別サーバにプロキシを行うが、特定のパスの通信に関してはプロキシをせずに自サーバのリソースで応答したい。

例として/healthというリクエストに関しては/var/www/html/health.htmlを表示させる。

特定のパスはAapche内のリソースで応答したい

環境情報
  • Apache/2.4.37 (Red Hat Enterprise Linux)

やり方

/var/www/html/health/health.htmlを準備した上で、以下のhttpd-proxy.confを/etc/httpd/conf.d/に配置をし、サービスを起動する。

ProxyPass / http://hoge.myapp:8080/
ProxyPassReverse / http://hoge.myapp:8080/

<Location /health>
    ProxyPass !
    SetHandler default-handler
    DirectoryIndex health.html
</Location>

Apacheを起動しているサーバ内から打鍵をすると、確かにローカルに配置したHTMLの内容が表示される。

$ curl http://localhost/health/
MyHealthCheckHTML

以下、補足です。

補足

アクセスログを見ると以下のようになっており、healthという通信だけはローカルに、それ以外のパスはバックエンドのアプリケーションサーバにプロキシがされていました。

172.17.0.1 - - [...] "GET /sample/ HTTP/1.1" 200 636 "-" "curl/8.0.1"
172.17.0.1 - - [...] "GET /health/ HTTP/1.1" 200 14 "-" "curl/8.0.1"

記載の中にある「!」は「ローカルサーバをリモートサーバのミラーとして振る舞わせること」を意味していて、ProxyPassの構文としても重要なので覚えておくと役立つと思います。

以上。