2012-01-30 5 views
1

기계에서 실행중인 요리사 서버 (포트 4000에서 수신)가 있으며 SSL을 통해 액세스하고 싶습니다. 나는 (포트 4001에서 수신 대기) 아파치 리버스 프록시를 설정했다. 아파치 설정은Apache 역방향 HTTP 프록시 뒤에있는 Chef API 서버가 https 링크 대신 http를 반환합니다.

Listen 4001 

<VirtualHost *:4001> 

    SSLEngine on 
    SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem 
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key 

    ProxyRequests  Off 
    ProxyPreserveHost On 

    <Proxy http://localhost:4000*> 
    Order deny,allow 
    Allow from all 
    </Proxy> 

    ProxyPass  /http://localhost:4000/ 
    ProxyPassReverse/http://localhost:4000/ 
    ProxyPassReverse/http://www.example.com:4000/ 
    ProxyPassReverse/http://www.example.com:4001/ 

    CustomLog ${APACHE_LOG_DIR}/chef.access.log common 
    ErrorLog ${APACHE_LOG_DIR}/chef.error.log 

</VirtualHost> 

문제는 요리사 API 호출에 의해 반환 된 JSON의 URL에 http https 대신해야한다는 것입니다 (www.example.com으로 대체 내 컴퓨터 이름)처럼 보인다. 위의 링크를 만들어 새로운 샌드 박스를 만들 /sandboxes에 POST를 수행 할 때

https://www.example.com:4001/sandboxes/a25fa2615d3d4dbd91e91a5e3a76c0ea 

한 예는 다음과 같습니다

http://www.example.com:4001/sandboxes/a25fa2615d3d4dbd91e91a5e3a76c0ea 

대신 예를 들어, 그들은처럼 보인다. 이렇게하면 요리 책을 업로드 할 때 칼을 사용하는 것과 같은 문제가 발생합니다.

내가 말할 수있는 것부터, /sandboxes POST에 의해 호출 된 요리사 서버 create methodMerb absolute_url 도우미 메서드를 호출하여 URL을 생성합니다.

이 시점에서 나는이 문제를 해결하는 방법을 잘 모른다. 아파치 역 프록시 설정을 어쨌든 변경해야합니까? Chef 서버의 구성 옵션입니까? 또는 다른 것?

답변

1

나는 방금 추가 할 필요가 있다고 생각 :

RequestHeader set X-Forwarded-Proto "https" 

를 아파치 구성.

그러면 Apache가 Chef/Merb 서버에 대한 모든 요청에 ​​X-Forwarder-Proto: https 헤더를 추가합니다. Merb은 요청을 안전하게 처리할지 여부를 결정할 때이 헤더를 확인합니다 (options[:protocol] ||= request.protocol의 요청을 absolute_url에서 request#protocol까지 request#ssl?까지 추적 할 수 있음).

ProxyPassReverse 지시어는 백엔드에서 헤더 만 변경하며 컨텐츠의 URL을 구문 분석하고 인식해야하는 내용을 변경하지 않습니다. 이 헤더를 전달하면 Merb는 요청이 SSL을 사용하는 것처럼 행동해야 함을 알게되고 적절하게 링크를 생성합니다.

+0

"a2enmod 헤더"가 필요했지만 그렇지 않으면이 기능이 작동했습니다. –