2016-10-10 2 views
0

У меня очень низкие знания по haproxy. Был тестируя конфигурацию, в которойHaproxy - прямой запрос на сайт, размещенный на S3

S3 размещенного веб-сайта (маршрут 53 псевдоним) - content.mydomain.com
URL посадки на HAProxy - www.mydomain.com/getfiles/

Можно ли перенаправить перенаправления WWW .mydomain.com/getfiles/to 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

hey michael, я буду рад узнать правильный подход к нему, haproxy - 1.5.2, и я считаю, что его нужно удалить, поскольку я предполагаю, что в настоящее время s3 выбрасывает 301, потому что он должен быть content.mydomain.com для отображения содержание. благодаря! –

ответ

3

Как отмечено в комментариях, это работает:

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

Идея заключается в том, чтобы установить заголовок Host к значению, которое ожидает S3.

Несколько уборщик подход заключается в следующем:

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

я говорю «лучше», потому что он использует более новый/лучше/безопасный механизм для манипуляций с заголовком, но принципиально достижения той же цели: изменение заголовка запроса к чему ожидает сервер назначения (S3). Использование подхода http-request безопаснее/чище, потому что оно «умнее» о том, как он манипулирует запросом - гораздо проще полностью разбить протокол, используя req[i]rep, чем с http-request.

Первоначально вы задали вопрос о /getfiles/test.jpg картировании /test.jpg в ковше. Это переписывание очень легко и чисто в HAProxy 1.6 и более поздних версий:

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

... но в версии 1.5 вы должны использовать reqirep с regsub (замещение регулярных выражений) преобразователь не доступен:

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

Это соответствует GET (HEAD, POST и т. Д.) Линии от запроса и удаляет дополнительные /getfiles с пути. Включение в шаблон исключения : не позволяет совместить любой другой заголовок. Аналогичный шаблон можно использовать для добавления префикса (например, версии выпуска и т. Д.) Перед отправкой запроса на S3.

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