nginx error_pageをS3にしてみる
Route53のDNS failover機能をつかってsorryページをS3 Bucketに用意するようにした。 nginxがダウンした場合はこれでOKだが, railsがダウン場合も同じようなことをしたい。
rails がダウンした場合(502 Bad gateway)のsorryページをnginx のinternalではなく、DNS failover のsecondary になっているS3 Bucketにしてみようと思ったという話。
任意のリージョンに任意のbucketを作成。sorryページを用意。
オレゴン州にXXXXXXX
というbucketを作成。
XXXXXXX.s3-website-us-west-2.amazonaws.com
Amazon S3 の指定bucketに用意したSorryページへ nginx でエラー時に飛ばそうとしてみたら 下記のエラーがブラウザに表示された。
404 Not Found
Code: NoSuchBucket
Message: The specified bucket does not exist
BucketName: XXXXXXX
RequestId: YYYYYYYYYY
HostId: ZZZZZZZZZZZZZZZZZZZZZZZ
タイポがありミスってた。だから無いと出ていたみたい。
タイポを修正後、再実行してみたら下記のエラーがブラウザに表示された
400 Bad Request
Code: IncorrectEndpoint
Message: The specified bucket exists in another region. Please direct requests to the specified endpoint.
Endpoint: XXXXXXX.s3-website-us-west-2.amazonaws.com
RequestId: YYYYYYYYYYYYYY
HostId: ZZZZZZZZZZZZZZZZZZZZ=
原因は下記のURLと同じそう。 https://forums.aws.amazon.com/thread.jspa?threadID=215640
しばらく時間をおいてから確認したら、うまくいった。
設定ファイルの一部は下記の通り。
upstream XXXXXXX { server s3-website-us-west-2.amazonaws.com; } server { . . 省略 . . error_page 502 = @fallback; location @fallback { proxy_pass http://XXXXXXX; } }