2017-05-08 1 views
0

나는 HAProxy가 작동하도록하기 위해 인터넷의 깊이를 샅샅이 뒤졌지만 내가 원하는 것을 성취 할 수 있는지 확신하지 못했습니다. 여기 https://www.haproxy.com/blog/howto-write-apache-proxypass-rules-in-haproxy/HAproxy 하위 디렉토리

을 내 시나리오입니다 :

나는이 다음을 시도 내가 HAProxy가 http://backend-ip:8999/에서 APP1의 루트를 데려 와야한다 https://PUBLIC-IP-ADDRESS/app1에 갈 때 포트 8999.에서 APP1를 실행하는 VM을 가지고있다.

제가 직면 한 문제는 초기 연결을 프록시 처리하기 위해 HAProxy를 얻을 수 있지만 모든 후속 요청은 기본 백엔드 서버의 루트로 이동한다는 것입니다.

frontend www-https 
    bind *:8989 ssl crt /ssl/server.pem 
    log global 
    option httplog 
    reqadd X-Forwarded-Proto:\ https 
    rspadd Strict-Transport-Security:\ max-age=31536000;\ includeSubDomains 
    acl app1 path_beg -i /app1 /app1/ 
    use_backend www-app1 if app1 
    default_backend www-backend 

backend app1 
    option http-server-close 
    option forwardfor 
    reqirep [\:])\ /app1/(.) \1\ /\2 
    acl hdr_location res.hdr(Location) -m found 
    rspirep Location:\ (https?://Public-IP-ADDRESS(:[0-9]+)?)?(/.*) Location:\ /app1\3 if hdr_location 
    server app1 bk.IP-ADDRESS:8999 check 

/app1/에가는 지금은 작동하지만 모든 링크는 /을 가리 킵니다. 어디서든지 클릭하면 https://PUBLIC-IP-ADDRESS으로 돌아옵니다.

도움을 주시면 대단히 감사하겠습니다.

답변

0

resirep 헤더 및 요청 줄만 수정할 수 있습니다. 루아 스크립트의 사용과

그것을 새로운 버전 1.6, 그것은 할 수 있습니다 (제한 방법) ...하지만 현재 (http://www.serverphorums.com/read.php?10,1322511 참조)를 총칭 (성공) 솔루션.

https://serverfault.com/questions/789743/possibility-of-rewriting-response-bodies-in-different-webservers-nginx-apache의 답변이 최신 것으로 보입니다.

공식 메일 링 목록 - https://www.mail-archive.com/[email protected]/msg25215.html, 아무 환상도 남기지 않습니다.

더 많은 함정이 있습니다. 많은 상대방 (예 : ../ 포함) 및 절대 변형을 처리하는 많은 정규 표현식 (또는 매우 복잡한 표현)이 많이 있습니다. 재 작성하지 않고

솔루션 : (? X-전달 경로)/APP1에

  1. 메이크업 응용 프로그램을 사용할 수 - - 당신이
  2. 조금 위처럼 그것의 제어에있는 경우 일부 헤더에 따라 <base>을 설정 haproxy
  3. 에서 /app1 경로로 포기하고 하위 도메인을 사용 t 불행하게도 내가 완전히 대신 하위 디렉토리의 하위 도메인의 사용에 동의
+0

(나는이 하나를 선택할 것)하지만, 모자는 옵션이 아닙니다. 그래서 ive는 HAproxy를 삭제하고 대신 아파치로 작업하도록했습니다. 그래도 제안을 주셔서 감사합니다. – Justin