Протокол прослушивания для ELB перед прокси-сервером Squid

У нас есть два прокси-сервера Squid для высокой доступности. Мы хотим использовать Amazon ELB перед этими прокси-серверами Squid.
Когда мы используем протокол балансировки нагрузки как TCP и порт 8080, протокол экземпляра TCP и порт 3128 - после экспорта прокси-сервера squid с использованием имени ELB в тестовых экземплярах мы можем подключиться к Интернету.

Но

Когда мы используем Протокол балансировки нагрузки как HTTP и порт 80, протокол экземпляра HTTP и порт 3128 - после экспорта прокси-сервера Squid с использованием имени ELB в тестовых экземплярах мы не можем подключиться к Интернету.

Конфигурация прокси-сервера Squid - это исходный файл конфигурации, который получаем с посылкой. Мы только добавили виртуальное имя хоста.

Можно ли использовать HTTP вместо TCP?

2
задан 17 May 2016 в 14:28
2 ответа

Я подозреваю, что они хотят получить исходный IP-адрес X-Forwarded-For запрашивающего устройства для журналов. Я знаю.

ELB не пересылает эти заголовки при использовании TCP в ELB, но если вы установили HTTP/3128, то пересылает. Но теперь кальмар не работает.

$ curl -v -x http://MYELB.us-east-1.elb.amazonaws.com:3128 -L http://httpbin.org/ip
* Hostname was NOT found in DNS cache
*   Trying 10.0.153.134...
* Connected to MYELB.us-east-1.elb.amazonaws.com (10.0.153.134) port 3128 (#0)
> GET http://httpbin.org/ip HTTP/1.1
> User-Agent: curl/7.35.0
> Host: httpbin.org
> Accept: */*
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 400 Bad Request
< Content-Language: en
< Content-Type: text/html;charset=utf-8
< Date: Mon, 06 Jun 2016 17:25:17 GMT
< Mime-Version: 1.0
* Server squid/3.5.12 is not blacklisted
< Server: squid/3.5.12
< Vary: Accept-Language
< Via: 1.1 ip-10-0-139-174 (squid/3.5.12)
< X-Cache: MISS from ip-10-0-139-174
< X-Cache-Lookup: NONE from ip-10-0-139-174:3128
< X-Squid-Error: ERR_INVALID_URL 0
< Content-Length: 3540
< Connection: keep-alive

Если посмотреть на TCPDUMP из окна squid, то можно увидеть следующее:

GET /ip HTTP/1.1
host: httpbin.org:3128
Accept: */*
Proxy-Connection: Keep-Alive
User-Agent: curl/7.35.0
X-Forwarded-For: 172.17.0.5
X-Forwarded-Port: 3128
X-Forwarded-Proto: http
Connection: keep-alive

На каком кальмаре блевотина, потому что это не настоящий URL (сервер был удален из GET):

HTTP/1.1 400 Bad Request
Server: squid/3.5.12
Mime-Version: 1.0
Date: Mon, 06 Jun 2016 17:28:07 GMT
Content-Type: text/html;charset=utf-8
Content-Length: 3540
X-Squid-Error: ERR_INVALID_URL 0
Vary: Accept-Language
Content-Language: en
X-Cache: MISS from ip-10-0-139-174
X-Cache-Lookup: NONE from ip-10-0-139-174:3128
Via: 1.1 ip-10-0-139-174 (squid/3.5.12)
Connection: close

Есть идеи, как заставить ELB передать имя сервера? Также непонятно, почему в заголовке хоста есть порт 3128

.
3
ответ дан 3 December 2019 в 09:15

Полагаю, вы хотите изменить вашу ELB на использование HTTP, так как вы хотите записать в журнал IP-адрес клиента.

У вас есть 2 варианта для этого -
. 1. Используйте вашу ELB с TCP (а НЕ HTTP), и сконфигурируйте ее для пересылки клиентского IP, используя прокси-протокол. Читайте подробнее об этом здесь
2. обновите squid до версии 3.5 (или выше), и используйте встроенный прокси-протокол. вот ссылка на соответствующий раздел в release notes

3
ответ дан 3 December 2019 в 09:15

Теги

Похожие вопросы