Я настроил виртуальный хост 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 для получения дополнительной информации об этой директиве.