HAproxy - 백엔드 서버에 경로 추가

HAproxy - 백엔드 서버에 경로 추가

NAS의 애플리케이션을 포트 번호로 참조하는 대신 기억하기 쉬운 하위 도메인을 사용하고 싶었기 때문에 HAproxy를 NAS의 역방향 프록시로 설정했습니다.

포트뿐만 아니라 특정 경로를 참조하는 몇 가지 백엔드 "서버"를 제외하고는 작동하게 만들었습니다.

예를 들어 내가 원하는nav.mydomain.com백엔드를 가리킨다127.0.0.1:9000/modules/navigator/www/login.phphttps://unix.stackexchange.com/posts/420303/edit

내 첫 번째 생각은 백엔드를 다음과 같이 구성하는 것이 었습니다.

frontend http-in
   bind *:80
   mode http

   acl nav hdr_beg(host) -i nav
   use_backend nav_node if nav

backend nav_node
   mode http
   server nav-server 127.0.0.1:9000/modules/navigator/www/login.php check

하지만 분명히 그렇게 간단하지는 않습니다... 그래서 저는 이 문제를 처리하는 방법을 연구하는 데 몇 시간을 더 보냈고 reqrep에 관한 주제를 찾았습니다. 그것은 나에게 다소 중국적인 것처럼 보입니다... 이것이 제가 여기에 가입하기로 결정한 이유입니다. 이것을 알아내는 데 도움을 받으세요.

지금은 이것이 작동하기를 원하며, 나중에 SSL을 추가하려고 합니다.

답변1

이러한 요구 사항은 명확하게 이해하기에는 너무 번거로운 경우가 많습니다. 당신은 그것을 사용할 수 있습니다set-path

http-request set-path /modules/navigator/www%[path]

프런트 엔드 또는 백 엔드에 있습니다. 그러면 요청이 있는지 /modules/navigator/www/login.php확인할 수 있습니다 . /login.php원하는 경우 요청을 다시 작성할 수도 있습니다 /./login.php

답변2

유효한 명령을 찾을 때까지 reqrep를 계속 시도하십시오. 나는 이 캐릭터들이 모두 무엇을 하는지 잘 이해하지 못합니다. 아마 너무 많을 수도 있지만 작동합니다!

reqrep ^([^\ :]*)\ /(.*)     \1\ /modules/navigator/www/\2 
server nav-server 127.0.0.1:9000 check

답변3

/첫째, login.php URL을 요청하기 위해 디렉토리(예: 가상 호스트 nav.example.com)가 필요하지 않다고 생각합니다 . 예를 들어 요청 하면 /whatever어떻게 되나요 ? 로 전달해야 합니까 /modules/navigator/www/login.php/whatever? 아마도 그것은 단지 한 가지 /modules/navigator/www/방법일 뿐입니다. 필요한 경우 빈 요청이 재정의될 수 있습니다 /login.php.

/다음과 같이 다시 작성해야 한다고 가정합니다 /modules/navigator/www/.

server nav-server 127.0.0.1:9000 check
reqrep ^GET\ /(.*) GET\ /modules/navigator/www/\1

^은 줄의 시작이므로 경로가 시작 부분에 추가됩니다.

관련 정보