さくらのクラウド ウェブアクセラレータで502(Bad Gateway)や504(Gateway Timeout)をキャッシュさせる方法です。
キャッシュできないコンテンツにアクセスが多発したり、キャッシュできるコンテンツであっても
サーバの高負荷によりオリジンサーバが502(Bad Gateway)や504(Gateway Timeout)を返すことがあります。
通常、nginxなどのエラー応答にはCache-Controlヘッダが付与されていないため、キャッシュされないため、 オリジンサーバへの負荷が継続することになります。
そのため、nginxの設定でエラー応答にCache-Controlヘッダを付与することで、ウェブアクセラレータで キャッシュさせることで、オリジンサーバへの負荷を軽減することができます。
オリジンにnginxを使っており、upstreamにAppサーバ等がある場合を想定しています。
nginxの設定
location / {
error_page 502 = @webaccel_handle_504;
error_page 504 = @webaccel_handle_504;
# 省略
}
location @webaccel_handle_502 {
add_header Cache-Control "s-maxage=30" always;
return 502;
}
location @webaccel_handle_504 {
add_header Cache-Control "s-maxage=30" always;
return 504;
}
上記の設定により、nginxが502または504のエラーレスポンスを返す場合、Cache-Control ヘッダに s-maxage=30 を 付与することで、ウェブアクセラレータに30秒間キャッシュさせることができます。
これにより、一時的なエラーもキャッシュしてオリジンサーバへの負荷を軽減することが期待されます。
memo
- error_page の応答など、エラー時にもadd_headerを付与する場合は、alwaysを付与する必要があります。