У меня есть установка с HAProxy перед кешем Varnish, который запрашивает сервер 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, но я был бы открыт для изменений конфигурации Varnish или HAProxy.
Примечание: Пожалуйста, не предлагайте использовать порт 80, так как у меня есть более одного порта на Apache, который используется varnish (обходной путь для улучшения работы VHosts), и поэтому это не вариант.
URL-адрес каталога без косой черты не является каноническим URL-адресом для этого ресурса, поэтому mod_dir перенаправляет пользователя. Это общая рекомендация W3C.
Перенаправление с помощью вашего пользовательского порта, вероятно, происходит из-за того, что ваш HAproxy или Varnish создает новый HTTP-запрос, который отправляется в Apache. Ваш apache получает самый первый запрос с 12345
порт уже присутствует. Вот почему UseCanonicalName
и UseCanonicalPhysicalPort
кажутся неэффективными.
Но вы можете запретить Apache отправлять перенаправление, установив mod_dir DirectorySlash
директива к Off
.
Если test-page
на самом деле существующий каталог в вашей файловой системе, это должно работать нормально.