2014-11-20 6 views
0

나는 twisted.web.proxy.ReverseProxyResource를 사용하여 역방향 프록시를 생성하는 방법이 매우 새로워졌습니다. 궁극적으로는 클라이언트가 SSL을 사용하여 클라이언트에 연결하도록 요청한 다음 요청의 유효성을 검사하여 SSL 백엔드 서버에만 전달합니다. 아래 (아주) 기본 코드로 시작하지만 SSL 백엔드에 연결하는 데 어려움을 겪고 있으며 설명서가 부족하다는 사실을 알고 있습니다. 누구든지 나에게 좋은 포인터 나 이상적인 예제 코드를 줄 수 있습니까?꼬인 역방향 프록시 SSL 백엔다일

아래 코드에서 명백한 HTTP 서버를 예상하므로 분명히 작동하지 않습니다. 어떻게해야할까요?

언제나처럼 모든 도움이 매우 감사합니다.

감사

알렉스

from twisted.internet import reactor 
from twisted.web import proxy, server 
from twisted.web.resource import Resource 

class Simple(Resource): 
    isLeaf = False 
    def getChild(self, name, request): 
     print "getChild called with name:'%s'" % name 
     #host = request.getAllHeaders()['host'] 
     host = "127.0.0.1" #yes there is an SSL host listening here 
     return proxy.ReverseProxyResource(host, 443, "/"+name) 

simple = Simple() 
site = server.Site(simple) 
reactor.listenTCP(8000, site) 
reactor.run() 
+0

* 역방향 * 프록시가 2 차 암호화를 사용하여 원본 서버와 통신하는 것은 매우 드문 경우입니다. 원본 서버가 역방향 프록시와 다른 네트워크에 있습니까? 해결하려는 문제는 무엇입니까? – SingleNegationElimination

답변

0

ReverseProxyResource는 TLS를 지원하지 않습니다. ReverseProxyResource(host, 443, "/"+name)을 쓰면 포트 443의 host에 대한 일반 TCP 연결을 설정할 자원을 만듭니다. TCP 연결 시도는 성공하지만 TLS 핸드 셰이크는 확실히 실패합니다. 클라이언트는 시도하지도 않기 때문입니다.

이것은 현재 ReverseProxyResource의 제한 사항이며 원하는 기능을 지원하지 않습니다. 이 기능이 상당히 쉽게 구현 될 가능성이 다소 높습니다. ReverseProxyResource이 구현 된 이래로 Twisted는 "엔드 포인트"개념을 도입하여 전송이 불가능한 코드를 훨씬 쉽게 작성했습니다.

ReverseProxyResource은 "종점"(현재 API와의 하위 호환성을 유지하지만 Twisted에서 필요함)의 관점에서 작동하도록 업데이트 될 수 있습니다. 이것은 구현을 복잡하게 만들지 않고 (실제로는 단순화 할 수 있음) 엔드 포인트 구현이 존재하는 모든 종류의 전송에 대해 프록시 할 수 있습니다 (TLS에 대해 하나 있고 많은 종류가 있습니다).

+0

예, 답장을 보내 주시면 사냥을 계속하겠습니다. 내가 목표로하고있는 최종 케이스를 감안할 때, Twisted가 최선의 방법이 아닐 수도 있다고 생각합니다. 대단히 고마워요! – Alex