Я пытаюсь выяснить, как прокси-запросы к поддоменам localhost на другой порт на Apache, но не прокси-запросы только на localhost (без поддоменов). Я не могу заставить его работать. Вот что я до сих пор придумал.
<VirtualHost *:80>
ServerName subdomain1.localhost
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
ServerName subdomain2.localhost
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
NoProxy "localhost"
</VirtualHost>
Проксирование subdomain1 и subdomain2 на localhost: 3000 работает, но localhost также проксируется на localhost: 3000. Как мне это предотвратить?
РЕДАКТИРОВАТЬ
С помощью @Esa и @HBruijn, но я все еще не могу заставить его работать. Я отредактировал виртуальные хосты http.conf следующим образом. Псевдонимы работают, но теперь поддомены не работают.
<VirtualHost *:80>
ServerName localhost
Alias /alias1 "/alias1"
Alias /alias2 "/alias2"
Alias /alias3 "/alias3"
</VirtualHost>
<VirtualHost *:80>
ServerName subdomain1.localhost
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>
<VirtualHost *:80>
ServerName subdomain2.localhost
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>
Это не так ServerName
Директива работает. Видеть:
В
ServerName
Директива может появиться где угодно в определении сервера. Однако каждый внешний вид отменяет предыдущий внешний вид (на этом сервере).Если нет
ServerName
указано, сервер пытается определить видимое клиентом имя хоста, сначала запрашивая у операционной системы имя хоста системы, а если это не удается, выполняет обратный поиск по IP-адресу, присутствующему в системе.Если порт не указан в
ServerName
, то сервер будет использовать порт из входящего запроса. Для оптимальной надежности и предсказуемости вы должны указать явное имя хоста и порт с помощью директивы ServerName.
У тебя не может быть двух ServerName
директивы в том же VirtualHost
, поэтому сначала нужно разделить:
<VirtualHost *:80>
ServerName subdomain1.localhost
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>
<VirtualHost *:80>
ServerName subdomain2.localhost
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>
Затем, чтобы иметь localhost:80
сделать что-то еще, кроме возврата к конфигурации по умолчанию (первый VirtualHost
в том же порту, в настоящее время subdomain1.localhost
) вам нужно иметь собственное <VirtualHost>
Раздел Контейнер для этого. Итак, вы можете добавить это выше предыдущий:
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/html
</VirtualHost>
Кроме того, ваш Alias
имеют идентичные [URL-path]
и file-path|directory-path
не имело никакого смысла, но я полагаю, что с правой стороны было несколько реальных местоположений файловой системы.
Самый простой - просто создать отдельные записи VirtualHost, каждая с правильными настройками для этого (под) домена:
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/html
...
</VirtualHost>
<VirtualHost *:80>
ServerName subdomain1.localhost
# Possibly a single VirtualHost for all subdomains with a catch-all ServerAlias:
# ServerAlias *.localhost
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>
<VirtualHost *:80>
ServerName subdomain2.localhost
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>