У меня следующая установка:
Linux Server (OpenVZ) с внутренним IP 10.10.0.4 - Контейнер (10.10.0.5) - Контейнер (10.10.0.6)
Из-за ограниченного IP-пространства у меня есть только один общедоступный IP-адрес, сопоставленный с основным сервером .4, поэтому
192.168.1.2 => 10.10.0.4 на стороне сети.
Теперь на основном хосте .4. У меня запущен apache, принимающий соединения на порт 80 и т. Д. С mod_proxy, чтобы иметь такие виртуальные хосты:
<VirtualHost 10.10.0.4:80 192.168.1.2>
ServerAdmin me@exmple.com
ServerName host.example.com
ServerAlias ct1.host.example.com
ProxyPass / http://10.10.0.5/
ProxyPassReverse / http://10.10.0.5/
</VirtualHost>
И есть настройка DNS с подстановочными знаками, чтобы * .host.example.com соответствовал 192.168.1.2. На контейнере настроен стандартный vhost вроде так:
<VirtualHost 10.10.0.5:80 *:80>
ServerName ct1.host.example.com
ServerAlias ct1.host.example.com
ServerAdmin me@host.example.com
DocumentRoot /var/www
<Directory /var/www/>
Options FollowSymLinks
AllowOverride All
</Directory>
Options Indexes FollowSymLinks
ErrorLog /var/logs/error_log
CustomLog /var/logs/access_log common </VirtualHost>
Это работает нормально, однако все сайты, такие как Joomla и т. Д., Используют какой-либо обратный способ поиска отчета об имени сервера 10.10.0.5 вместо ct1.host.example.com, который мне понадобится, поскольку это должно работать за пределами локальной сети. Конечно, я могу взломать код для каждого из этих развертываний, но это не решает проблему, заключающуюся в простом применении пластыря. Я не понимаю, почему это сообщает о локальном IP-адресе контейнера вместо имени хоста.
Я также пробовал следующую настройку:
/ etc / hosts (на .4)
10.10.0.5 ct1.host.example.com
Затем в vHost следующее:
ProxyPass / http://ct1.host.example.com
ProxyPassReverse / http://ct1.host.example.com
Однако это не дает ничего другого. Есть ли что-то еще, что мне нужно настроить в контейнере - возможно, какой-то DNS или действительно создать внутренний DNS для этих IP-адресов?
Спасибо!
Я пытаюсь понять, почему вы используете для этого mod_proxy. Виртуальные хосты на основе имен по какой-то причине не подходят для вашего варианта использования?
Вторая часть моего вопроса действительно работает, хотя из-за кеширования кода и того, как работало приложение, это показалось не сразу. Создав локальную запись в файле хоста (или просто установив привязку на хост-машине), мне больше не нужно было бы проксировать IP-адрес, а лучше сохранить имя хоста, поэтому для Apache, работающего в контейнерах, это будет как если бы я набрал URL-адрес в адресной строке, а не IP-адрес, который я пытался сделать ранее.
Я закончил тем, что добавил привязку к сценарию создания контейнера, который добавляет IP-адреса в файл хоста для имени хоста контейнера и создает штраф виртуального хоста в каталоге conf.d, который принимает Apache.
Спасибо тем, кто в это разбирался.