У меня есть 2 веб-сервера Debian, интерфейс, принимающий запрос с порта 80, и бэкэнд через прокси-сервер из внешнего интерфейса.
Я хочу иметь много разных URL-адресов, идущих на внутренний сервер с виртуальными хостами.
Вот настройка внешнего интерфейса Apache
<VirtualHost *:80>
ServerName dev.example.com
ProxyPass / http://192.168.144.100:80/
ProxyPassReverse / http://192.168.144.100:80/
</VirtualHost>
<VirtualHost *:80>
ServerName sandbox.example.com
ProxyPass / http://192.168.144.100:80/
ProxyPassReverse / http://192.168.144.100:80/
</VirtualHost>
А вот настройка серверной части Apache
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName dev.example.com
DocumentRoot /var/www/example.com/dev/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/example.com/dev/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName sandbox.example.com
DocumentRoot /var/www/example.com/sandbox/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/example.com/sandbox/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Когда я захожу на dev.example.com или sandbox.example.com, я попадаю в файлы по умолчанию / var / www.
По сути, мне нужна возможность запускать несколько виртуальных хостов на внутреннем сервере.
Спасибо за вашу помощь.
Как насчет такого изменения настроек внешнего интерфейса? И вам не нужны настройки виртуального хоста в бэкэнде.
<VirtualHost *:80>
ServerName dev.example.com
ProxyPass / http://192.168.144.100:80/
ProxyPassReverse / http://192.168.144.100:80/
</VirtualHost>
<VirtualHost *:80>
ServerName sandbox.example.com
ProxyPass / http://192.168.144.100:80/example.com/dev/
ProxyPassReverse / http://192.168.144.100:80/example.com/dev/
</VirtualHost>
Смотри сюда Совместное использование Virtual_host и mod_proxy для примера
<VirtualHost *:80>
ProxyPreserveHost On
ServerName dev.example.com
ProxyPass / http://192.168.144.100:80/
ProxyPassReverse / http://192.168.144.100:80/
</VirtualHost>
<VirtualHost *:80>
ProxyPreserveHost On
ServerName sandbox.example.com
ProxyPass / http://192.168.144.100:80/
ProxyPassReverse / http://192.168.144.100:80/
</VirtualHost>
При включении эта опция ([ProxyPreserveHost][1]
) передаст строку Host: из входящего запроса на проксируемый хост вместо имени хоста, указанного в ProxyPass
линия.
Я думаю (но не уверен), что в этом случае можно даже без ProxyPreserveHost
, вот так:
поместите это в свой интерфейс hosts
файл
192.168.144.100 dev.example.com
192.168.144.100 sandbox.example.com
затем сделайте это:
<VirtualHost *:80>
ServerName dev.example.com
ProxyPass / http://dev.example.com/
ProxyPassReverse / http://dev.example.com/
</VirtualHost>
<VirtualHost *:80>
ServerName sandbox.example.com
ProxyPass / http://sandbox.example.com/
ProxyPassReverse / http://sandbox.example.com/
</VirtualHost>