It's raining cats and dogs.

無駄なことなんてないはず

apacheでS3にプロキシさせるときにbasic(digest)認証をかませていると400 bad requestになる

S3にBasic認証付きリクエストをすると400:Bad Requestになる | Siguniang's Blog

この記事のapache版。

apacheのmod_proxyでS3においてある画像にプロキシさせた時に、basic認証をかませているとS3から400 bad requestが返ってきてしまって画像が表示されなくなってしまった。
上記ブログはnginxだったので、apacheで解決したやり方をメモっておく。

<Location "/s3-images/">
  RequestHeader set Authorization ""
</Location>

ProxyPass        /s3-images/  http://hogehoge.s3-ap-northeast-1.amazonaws.com/s3-images/
ProxyPassReverse /s3-images/  http://hogehoge.s3-ap-northeast-1.amazonaws.com/s3-images/

やっていることは同じで、S3用のロケーションパス以下は Authorization ヘッダを潰している。
これで解決。

ところで、原因を調べていたんだけど、S3のサイトにそれっぽいことが書いてあった。

docs.aws.amazon.com

どうやらS3のREST APIは認証の時に Authorization ヘッダを使っていて、普通に(Authorizationヘッダがない状態で)プロキシしているだけだと認証情報を求められないのでそのままプロキシしてくれるんだけど、basic認証なりで Authorization ヘッダがついてしまうとS3側で認証しようとしてコケている感じなんだろうな。(IAMの話かもだけど)

学びがあった

余談

はてなブログシンタックスハイライト、 apachestyle なんてのがあったんだ。