Назад | Перейти на главную страницу

Varnish отправляет неверный заголовок «Host» в Apache

Я на ранней стадии тестирования Лак 3.0.4 как новый интерфейс для веб-службы. У меня varnish настроен для прослушивания порта 88. В качестве бэкэнда он использует существующий сервер apache, работающий на том же хосте на порту 80.

У меня проблема в том, что когда лак делает запрос к apache, он включает ": 88" в Host HTTP-заголовок (хотя он определенно подключается к apache через порт 80.

Например:

  1. Я прошу http://www.myservice.com:88/images/foo.gif. Он запрашивает серверную часть.
  2. Серверная часть apache регистрирует HOST заголовок в журнал доступа Apache - используя %{Host} в формате файла журнала
  3. В журнале доступа этот заголовок узла отображается как www.myservice.com:88не www.myservice.com.

Если я подключаюсь к этому серверу apache с помощью telnet и делаю идентичные запросы HEAD, но изменяю значение параметра Host заголовок, я наблюдаю то же поведение, которое я наблюдаю через varnish - то есть, если я включу: 88 в заголовок хоста, запрос вернет 404.

Я пробовал:

Кажется, я упускаю что-то очевидное.

Как мне получить лак для отправки правильного заголовка хоста в apache?

Лак оставляет Host По умолчанию заголовок полностью не подвергается воздействию - он отправляет в Apache то, что ему было отправлено. Это предполагаемое поведение - Varnish имеет тенденцию ни с чем не возиться, если вы этого не скажете.

Чтобы управлять им, поместите что-то подобное в свой vcl_recv, в дополнение к любой условной логике вам необходимо добавить:

set req.http.Host = "www.myservice.com";