Proxy(Apache) の403 Forbidden を回避する

2月 18, 2024apache,APIGateway,AWS

概要

  • 今回は リバースプロキシ(Apache) + API Gateway 構成の構築で経験したエラーについて記載します。
  • 以下、システム構成図です。クライアントからAPI Gateway へ直接の疎通は OK ですが、クライアントからリバースプロキシ(Apache) 経由でAPI Gateway への疎通は403 Forbidden となります。

 

 

 

  • 以下は、リバースプロキシ(Apache)からcurl を実行した結果です。リクエストはAPI Gateway へ転送されましたが、403 Forbidden が返却されます。
  • テストのため、localhost に対してcurl を行っていますが、実際は別のクライアントからリクエストを受ける想定です。
$ curl -vv http://localhost/
* Trying 127.0.0.1:80...
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.76.1
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 403 Forbidden
< Date: Mon, 19 Feb 2024 01:49:23 GMT
< Server: Apache/2.4.58 () OpenSSL/1.0.2k-fips
< Content-Type: application/json
< Content-Length: 23
< x-amzn-RequestId: xxxxxxxx-yyyy-yyyy-yyyy-zzzzzzzzzzzz
< x-amzn-ErrorType: ForbiddenException
< x-amz-apigw-id: AAaBBbCCcDDdEEe=
< 

 

対処方法

  • Apache の以下設定をコメントアウトあるいは、Off に設定します。(デフォルトは、Off です)
  • ProxyPreserveHost は、ProxyPass で指定したホスト名は使用せず、受け付けたリクエストの"Host"ヘッダをプロキシ先のホストに送ります。
  • API Gateway はHTTPS プロトコルでアクセスする必要がありますが、リバースプロキシ(Apache)が"Host"ヘッダを転送する場合、"Host"ヘッダが証明書と一致せず403 Forbidden のエラーに至ります。

ProxyPreserveHost On