2016-12-14 5 views
0

HA Proxy에서 아래 규칙을 구성했습니다. 나는 그 자체로/서비스가 나던 http://haproxy_ip/serviceHA 프록시 규칙 - 404을 찾을 수 없음

frontend http-in 
    bind 10.254.23.225:80 
    acl has_service path_beg /service 
    use_backend service_server if has_service 

backend service_server 
    balance roundrobin 
    cookie SERVERID insert 
    option httpchk HEAD /check.txt HTTP/1.0 
    option httpclose 
    option forwardfor 
    server server1 192.168.2.1:9000 cookie server1 check 
+1

'http : //192.168.2.1 : 9000/service'를 직접 호출하면 문제가 발생합니까? 그렇다면 백엔드가 요청을 올바르게 처리하지 못합니다. –

+0

백엔드 자체에는/service가 없습니다. 나는 URL에 virutal 경로를 가지고 haproxy를 사용합니다. – Umapathy

+0

감사합니다. reqrep^([^ \] * \ /)service[/]?(.*) \ 1 \ 2 – Umapathy

답변

0

백엔드를 칠 때 나는 404를 찾을 수 없습니다 얻을. 나는 URL에 virutal 경로를 가지고 haproxy를 사용합니다.

현재 구성으로

, /service/test.txt는 ACL has_service를 실행하고 URL을 변경하지 않고, 백엔드에 /service/test.txt를 보내드립니다. 당신이 (백엔드에 /에 프론트 엔드에서 프록시 /service) URL을 변경하려면

, 당신은 당신의 백엔드에 다음 줄을 추가해야합니다 :

reqrep ^([^\ ]*)\ /service(.*) \1\ \2 

이것은 프록시 요청에서 /service을 제거합니다.

편집 :

HAProxy는 HTML 출력을 다시 작성하지 않습니다 당신의 자산을 선도 /service/을받지 않습니다 제대로 제공되지 않습니다.

요청을 프록시 할 때 같은 경로를 유지하는 것이 더 쉽습니다 (예 : / ~ / 또는 /myapp/ ~ /myapp/). 프록시 /a/b/c으로 프록시하면 프록시 자체가 응답을 다시 작성해야합니다. <img src="https://stackoverflow.com/a/test.png"><img src="/b/c/test.png">으로 변경해야합니다. 또는 worse, <img src="../c/test.png" />. html, js 및 css에 상대 참조를 추가하십시오. 나는 그것이 HAProxy와 함께 할 수 있는지 확신하지 못합니다.

응용 프로그램을 변경하여 /service/에 배포 할 수있는 경우 많은을 피할 수 있습니다. 다른 가상 호스트 (예 : service.yourdomain.com)를 사용하면이 문제도 해결할 수 있습니다. 그렇지 않으면

, 나는 내가 아파치 2.4 mod_proxy_html 으로 (그러나 /service/에 응용 프로그램을 배포하기 위해 정말 열심히 노력하기 전에)를 시도 할 것, HAProxy 여기에 적합한 도구입니다 확실하지 않다.

+0

맞습니다! 하지만 웹 응용 프로그램에는 css, images 및 js 파일이있어 백엔드 규칙으로 리디렉션되지 않습니다. 첫 번째 리디렉션 후에/서비스가 제공되지 않습니다. 어떻게 IP를 유지하고 리다이렉션을 위해 같은 세션에서 사용합니까? – Umapathy

+0

내 업데이트보기 : 백엔드에서'/ services /'처리 (가능한 경우)가 가장 쉬운 해결책입니다. –