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

Apache перенаправляет на другой порт для каждого каталога

Я настроил виртуальный хост Apache для работы на порту 8000, а перед Apache у меня есть Varnish на порту 80. Проблема в том, что я вставляю это в свой браузер:

example.com/a_directory

Меня перенаправляют на example.com:8000/a_directory

Я получаю сообщение об ошибке подключения. В файле конфигурации у меня есть это:

<VirtualHost *:8000>
    ServerAdmin xxx@xxx.org.au

    DocumentRoot /var/www
    DirectoryIndex index.php index.html index.htm 

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    <Directory /var/www>
        AllowOverride All
    </Directory>

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined

</VirtualHost>

Это почти наверняка связано с самореференционными перенаправлениями, например, когда в запросе каталога отсутствует завершающая косая черта. В таких случаях при отсутствии директивы ServerName Apache будет использовать порт, на который поступил запрос - в вашем случае 8000. В Apache 2.x директива ServerName поддерживает спецификатор порта, который используется для построения перенаправлений. Из документов Apache:

Директива ServerName устанавливает схему запроса, имя хоста и порт, которые сервер использует для идентификации себя. Это используется при создании URL-адресов перенаправления.

В вашем блоке vhost добавьте что-то вроде (очевидно, измените вашу среду) ServerName www.foo.com:80, которое должно указать Apache для создания этих перенаправлений с использованием восходящего прокси-порта, а не порта, который он прослушивает.

Видеть http://httpd.apache.org/docs/2.2/mod/core.html для получения дополнительной информации об этой директиве.