2016-09-20 7 views
1

Nginx 역방향 프록시 서버를 구성하여 HTTP로 가져 오는 모든 요청을 HTTPS (GET 메서드) 인 AWS Api 게이트웨이 끝점으로 리디렉션합니다. (이유를 알고 싶다면 API 게이트웨이를 통해 타사 공급 업체에 전화를 걸도록 AWS 람다 기능이 있지만 그 이유는 현재 SNI 때문에 ssl_handshake에 AWS가있는 버그가 있습니다. 나는 그에게이 HTTP 프록시 서버를 줄 것이다).Nginx proxy_pass to aws API 게이트웨이

것은 나는이 같은 시도했다 :

server { 
     listen  80 default_server; 
     listen  [::]:80 default_server; 
     server_name MY_SERVER_NAME; 
     root   /usr/share/nginx/html; 

     # Load configuration files for the default server block. 
     include /etc/nginx/default.d/*.conf; 

     location/{ 
       proxy_set_header Host $host; 
       proxy_set_header X-Real-IP $remote_addr; 
       proxy_pass https://SOMETHING.execute-api.REGION.amazonaws.com/dev/RESOURCE/METHOD;    
       proxy_ssl_server_name on; 
       proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
       proxy_buffering off; 
     } 
} 

하지만를 내가

http://MY_SERVER_NAME 

내가 뭔가를 놓친 해요 같은 느낌을 호출 할 때 현재 나는 CloudFront를에서 403 받고 있어요 내 SSL을 구성 Nginx에서하지만 난 잘 모르겠어요.

+1

다른 고객은 API 게이트웨이의 SNI 요구 사항을 해결하기 위해 CloudFront 배포를 API 게이트웨이 앞에 배치하기로 결정했습니다. –

+0

이것은 작동 중입니다! 감사. 거기에 어떤 지침이 있습니까? 쉬운 일이 아니었다.또한 방금 전처럼 캐시가없는 프록시로 CDN 서비스를 사용하는 것은 상당히 추한 것입니다. AWS LoadBalancer와 같은 다른 서비스에서도 작동 할 수 있습니까? – yishaiz

+0

Elastic Load Balancer는 EC2 인스턴스로만 트래픽을 보낼 수 있습니다. –

답변

1

@Bob Kinney가 의견에서 제안한대로이 Nginx 맞춤 프록시 서버 대신 AWS CloudFront를 사용하여 프록시를 구현했습니다.

  1. 가 분포로 이동하여 새 배포를 만듭니다

    는 단계입니다.
  2. 람다 함수의 S3 버킷으로 Origin을 설정하십시오.
  3. 이 유통의 새로운 기원을 작성하고의를 제외하고 기본 등의 분야를 떠나 :
    • 는 람다 함수의 ApiGateway 엔드 포인트에 그 기원 도메인 이름을 설정합니다. 예 : t7mcsqqzcl.execute-api.us-west-1.amazonaws.com
    • 설정 원산지 의정서 정책으로 HTTPS 만
  4. 새로운 기원을위한 새로운 행동을 만들고 다음 설정 :
    • 경로 패턴을 *
    • 뷰어 프로토콜 정책 : HTTP 및 HTTPS
    • 허용 HTTP 방법 : GET, HEAD는, 옵션, PUT은 POST가, 패치,
    • 앞으로 헤더를 삭제 : 없음
    • 앞으로 쿠키 :
    • 쿼리 문자열 전달 및 캐싱 없음
    • : 앞으로 모든 캐시 새로운 행동이 우선 순위 0임을 모든
  5. 확인에 기반 그래서 그것은 S3 기원의 다른 기본 동작 전에이다.

이제 우리 배포판의 도메인 이름이 있습니다. d12q4segwfrwl5.cloudfront.net, API를 활성화 할 수 있습니다. 전화 http://d12q4segwfrwl5.cloudfront.net/dev/person/name

CloudFront 배포의 json 구성 예는 here입니다.

+0

왜 포인트가 필요합니까? 2. 원점을 람다 함수의 S3 버킷으로 설정합니까? –

+0

죄송하지만 지금은 기억이 안납니다. 그것이 제가 인터넷에서 발견 한 작은 문서에서 수행 된 것을 보았습니다. 어쩌면 람다 코드를 제공하기 위해? 그것 없이도 시도해도됩니다. 제대로 작동한다면 업데이트를 게시하십시오. – yishaiz

관련 문제