2017-01-10 1 views
0

공개 S3 엔드 포인트의 프록시로 작동하도록 nginx를 구성하는 데 어려움을 겪고 있습니다. 나의 유스 케이스는 응답 페이로드를 보존하면서 S3 응답의 상태 코드를 변경해야한다.nginx에서 프록시 서버 응답의 상태 코드를 변경하는 방법은 무엇입니까?

location ~* ^/.* { 
    [...] 
    proxy_intercept_errors on; 
    error_page    200 =503 $upstream_http_location 
} 
을 : S3에 의해 반환

가능한 상태 코드 내 사용 사례를 들어 200 (403)을 포함, 나는이 작동하지 않는 다음을 시도 503

에 그 상태 코드를 매핑해야

,536,913 :

여기

nginx: [emerg] value "200" must be between 300 and 599 in /etc/nginx/nginx.conf:xx

은보다 완벽한 조각입니다 :

Nginx에 다음과 같은 오류를 출력

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에서 필요한 것을 얻을 수 있습니까?

답변

0

다소 이상한 해결책을 발견했습니다. 그것은 약간 hackish지만 작동합니다.

열쇠는 내 S3 버킷의 색인 문서를 존재하지 않는 파일 이름으로 설정하는 것이 었습니다. 이로 인해 S3 버킷 끝점에 대한 요청이 발생합니다. 403.

nginx 프록시는 들어오는 모든 요청을 S3 버킷 끝점에 매핑하므로 결과는 항상 403이며 nginx 프록시는 가로 챌 수 있습니다. 거기에서 error_page 지시문은 S3 버킷 끝점에서 특정 문서 (이 경우 오류 .json)를 요청하고 응답 상태 코드로 503을 사용하여 응답하도록 지시합니다.

location ~* ^/. { 
    proxy_intercept_errors on; 
    error_page    403 =503 /error.json; 
} 

이 솔루션은 두 개의 요청이 S3 버킷 엔드 포인트 (/, /error.json)로 전송되는하지만 적어도 캐싱 위의보다 완벽한 조각의 구성을 사용하여 두 요구를 사용할 것으로 보인다 포함한다.

+0

유지 관리를 위해 백엔드 서버를 중지하면 아무런 트릭없이 오류가 발생합니다. – AnrDaemon

+0

그런 다음 사용자에게 부하 분산 장치의 기본 일반 503 메시지가 표시됩니다. 결국 비 기술적 인 사람들이 구성 할 수있는 사용자 지정 오류 메시지를 반환해야합니다. – Wenzil

0

시스템이 말하는 내용을 읽어보십시오. "성공"리턴 코드는 변경할 수 없습니다. 그것은 단지 의미가 없습니다.

+0

나는 그것을 그대로 사용할 수 없다는 것을 알고 있지만, 그것을 달성하기위한 대안적인 방법을 찾고있다. 내 유스 케이스에 대한 추가 정보 : 유지 관리 중에 응답 상태 코드가 503이 되길 바라지 만 메시지가 동적 (S3에서 읽고 캐시 됨)으로되어 있어야합니다. 따라서 프로덕션 서버가로드 균형 조정 그룹에서 분리되는 동안 유지 관리 중에이 서버를 급습하는 것이 목표입니다. – Wenzil

관련 문제