Мне сложно настроить nginx, чтобы действовать как прокси-сервер публичной конечной точки S3. В моем случае использования необходимо изменить код состояния ответа S3, сохраняя при этом полезную нагрузку.Как изменить код состояния прокси-сервера в nginx?
Возможные коды состояния, возвращаемые S3 включают 200 и 403. Для моего случая использования, мне нужно сопоставить эти коды статуса для 503.
Я попытался следующие, не работает:
location ~* ^/.* {
[...]
proxy_intercept_errors on;
error_page 200 =503 $upstream_http_location
}
Nginx выводит следующее сообщение об ошибке:
nginx: [emerg] value "200" must be between 300 and 599 in /etc/nginx/nginx.conf:xx
Вот более полный фрагмент кода:
server {
listen 80;
location ~* ^/.* {
proxy_http_version 1.1;
proxy_method GET;
proxy_pass http://my-s3-bucket-endpoint;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header Connection "";
proxy_set_header Host my-s3-bucket-endpoint;
proxy_set_header Authorization '';
proxy_hide_header x-amz-id-2;
proxy_hide_header x-amz-request-id;
proxy_hide_header Set-Cookie;
proxy_ignore_headers "Set-Cookie";
proxy_cache S3_CACHE;
proxy_cache_valid 200 403 503 1h;
proxy_cache_bypass $http_cache_purge;
add_header X-Cached $upstream_cache_status;
proxy_intercept_errors on;
error_page 200 =503 $upstream_http_location;
}
}
Возможно ли достичь того, что мне нужно с nginx?
Просто приведите сервер backend для обслуживания, и вы получите свою ошибку без каких-либо трюков. – AnrDaemon
Но тогда пользователи увидят сообщение 503 по умолчанию балансировки нагрузки по умолчанию. Мне нужно вернуть пользовательское сообщение об ошибке, которое в конечном итоге будет настраиваться нетехническими людьми в команде. – Wenzil