У меня есть установка с HAProxy перед кэшем Лака, кто запрашивает сервер Apache2.
Apache слушает на внутреннем IP на Порте 12345 и настроен с UseCanonicalPhysicalPort Off
предотвратить проливание из того единственного внутренним пользованием Порта. Я также протестировал различные комбинации UseCanonicalPhysicalPort
и UseCanonicalName
с On
и Off
. Однако несмотря на те канонические директивы, Apache2, кажется, имеет проблемы при получении запроса на каталог без запаздывающей наклонной черты:
UCPP: On, UCN: Not set:
Request: https://www.example.org/test-page
Response: Redirect(301) to http://www.example.org:12345/test-page/
UCPP: On, UCN: On
Request: https://www.example.org/test-page
Response: Redirect(301) to https://www.example.org:12345/test-page/
UCPP: Off, UCN: Off
Request: https://www.example.org/test-page
Response: Redirect(301) without Location header
Это, конечно, не будет работать, поскольку этот порт является только внутренним. Сайт выполняет Joomla, который хорошо работает с этой установкой, просто те папки, которые получили бы перенаправление от mod_dir, кажется, не работают. Моя конфигурация Apache похожа на это:
<VirtualHost 192.168.150.100:12345>
ServerName www.example.org
UseCanonicalPhysicalPort Off
UseCanonicalName On
<Directory "/var/www/www.example.org">
[...]
</VirtualHost>
Существует ли способ предотвратить те перенаправления? Лучше всего должен был бы предотвратить те неправильные перенаправления в Apache, но я буду открыт для изменений конфигурации для Лакировки или HAProxy.
Примечание: Не предлагайте использовать порт 80, поскольку у меня есть больше чем один порт на Apache, используемом лаком (обходное решение для получения работы VHosts лучше), и таким образом это не опция.
URL-адрес каталога без косой черты не является каноническим URL-адресом для этого ресурса, поэтому mod_dir перенаправляет пользователя. Это общая рекомендация W3C.
Перенаправление с помощью вашего настраиваемого порта, вероятно, происходит из-за того, что ваш HAproxy или Varnish создает новый HTTP-запрос, который отправляется в Apache. Ваш apache получает самый первый запрос с уже существующим портом 12345
. Вот почему UseCanonicalName
и UseCanonicalPhysicalPort
кажутся неэффективными.
Но вы можете запретить Apache отправлять перенаправление, установив mod_dir DirectorySlash
директиве Off
.
Если тестовая страница
на самом деле является существующим каталогом в вашей файловой системе, это должно работать нормально.