2015-10-15 3 views
3

С HA Proxy 1.5 Мне нужно переписать URL из http://main.domain.com/my-foo в http://othersite.com:8081/other-barHAProxy и путь reqrep перезаписи конфигурации перенаправления

Вот то, что я пробовал:

frontend ft_def 
    bind :80          
    mode http             
    acl has_special_uri path_beg /my-foo 
    use_backend def if has_special_uri 
    default_backend def 

backend def 
    mode http          
    option forwardfor      
    reqirep ^([^\ ]*\)/my-foo(.*) \1/other-bar\2 
    server myserver othersite.com:8081 

Это работает: URL
http://main.domain.com/my-foo/home.html

http://othersite.com:8081/other-bar/home.html

и в браузере появляется начальный URL http://main.domain.com/my-foo/home.html.

Это именно то, что мне нужно: оно полностью прозрачно для пользователя. Но редирект не работает: при нажатии на ссылку на странице URL затем
http://main.domain.com/other-bar/page2.html

Я хотел бы получить http://main.domain.com/my-foo/page2.html вместо появляться в браузере.

Возможно ли с помощью прокси-сервера HA? Я пробовал много конфигураций без успеха. Спасибо!

ответ

2

Если вы говорите о ссылках в HTML (в отличие от, скажем, Location: заголовков для перенаправления) ... HAProxy 1.5 не сможет их изменить.

Предположительно, исходя из того, что вы описали, страница /other-bar/page1.html внутренне ссылается на <a href="/other-bar/page2.html">, когда она действительно должна ссылаться на <a href="page2.html">. Вам нужны относительные ссылки, чтобы что-то вроде этого работало прозрачно ... иначе компонент «X» в вашей цепочке должен будет иметь возможность изменять ссылки «на лету» в теле ответа, но только ссылки, конечно, так как вы не захотите вслепую регулярное выражение - замените содержимое страницы в целом ... и HAProxy 1.5 не будет обрабатывать тела ответов, поэтому он не сможет выполнить роль компонента «X».

HAProxy 1.6 может быть в состоянии сделать это с Lua, но это возможно ... и если это можно сделать, это вряд ли будет на уровне производительности, обычно ожидают от HAProxy, потому что очистка html в Lua, вероятно, будет относительно дорогостоящим предложением.

Смежные вопросы