2016-10-10 2 views
0

나는 haproxy에 대한 지식이 매우 적습니다. content.mydomain.com haproxy에
URL 착륙 - -Haproxy - S3 호스트 사이트로의 전달 요청

S3는 웹 사이트를 호스팅 구성 (경로 53 별칭) 밖으로 테스트되었습니다 www.mydomain.com/getfiles/

은 라우트 www를 리디렉션하는 것이 가능 .mydomain.com/getfiles /에서 content.mydomain.com (s3 호스팅 웹 사이트).

나는 아래와 같은 서버에서 실행중인 다른 응용 프로그램을 리디렉션 할 수 있었다 설정

acl display-s3-content path_beg /getfiles/ 
    use_backend my-content if display-s3-content 

backend my-content 
    reqrep ^([^\ ]*)\ (.*) \1\ /path/\2 
    server test www.mycomain.com:1936 

을 언급하지만 난 호스팅 사이트를 S3 그것을 리디렉션하려고 할 때, 그것은 작동하지 않습니다. 아래는 작동하지 않는 구성의 백엔드입니다

reqrep ^([^\ ]*)\ (.*) \1\ /path/\2 
    server test1 content.mydomain.com 

고마워요! 당신이 의견에서 언급 한 바와 같이

+0

이것은 "리디렉션"하지 않고 "전달"합니다. –

+0

그래서'/ getfiles /'로 시작하는 경로로 요청이 들어 오면 그 요청을 버킷에 보내려고합니다. 어떻게 끝났는지 보여주는 답변을 게시 할 수는 있지만 우선 경로의 시작 부분에서'/ getfiles/'로 무엇을하고 싶은지 알 필요가있어서 양동이에서 올바른 경로를 찾는다. 그것을 제거 하시겠습니까? 다른 것으로 바꾸시겠습니까? 또한, 어떤 버전의 HAProxy? –

+0

안녕하세요 마이클, 나는 haproxy - 1.5.2에 올바른 접근법을 알고있어서 기뻐할 것입니다. 나는 현재 s3이 content.mydomain.com을 표시해야하기 때문에 301을 던지고있는 것 같아서 제거해야한다고 생각합니다. 함유량. 감사! –

답변

3

이 작동 :

reqirep ^Host: Host:\ content.mydomain.com 

아이디어는 S3가 기대하는 값으로 Host 헤더를 설정하는 것입니다.

http-request set-header Host content.mydomain.com 

내가 그것을 헤더 조작을위한 새로운/더/안전 메커니즘을 사용하기 때문에 "더 나은"라고하지만 근본적으로 동일한 목적을 달성한다 : 요청 헤더를 변경

다소 청소기 방법이있다 대상 서버 (S3)가 예상하는 대상. http-request 접근법을 사용하면 더 안전하고 깨끗합니다. 요청을 조작하는 방법이 "더 똑똑"하기 때문입니다. req[i]rep을 사용하는 프로토콜을 완전히 깨기가 훨씬 쉽습니다 (http-request).

원래 물통에 /test.jpg으로 매핑하는 /getfiles/test.jpg에 대해 질문했습니다. 사용할 수없는

http-request set-path %[path,regsub(^/getfiles,)] 

...하지만 1.5에서 당신은 regsub (정규식 대체) 변환 이후 reqirep을 사용해야합니다 : :이 재 작성 나중에 HAProxy 1.6 매우 간단하고 깨끗한

reqirep ^([^\ :]+)\ +/getfiles(.*) \1\ \2 

이것은 요청에 따라 GET (HEAD, 등) 행과 일치하고 경로에서 여분의 /getfiles을 제거합니다. 제외 패턴에 :을 포함하면 다른 헤더와 일치하지 않습니다. 유사한 패턴을 사용하여 S3에 요청을 보내기 전에 접두어 (예 : 릴리스 버전 등)를 추가 할 수 있습니다.