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

Apache mod_dir продолжает перенаправлять на неправильный порт

У меня есть установка с 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 на самом деле существующий каталог в вашей файловой системе, это должно работать нормально.