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

Apache сообщает локальный IP-адрес вместо имени хоста

У меня следующая установка:

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.

Спасибо тем, кто в это разбирался.