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

Apache: контейнер докеров proxypass в поддомен

Субдомен sub.example.com размещается на AWS EC2, ОС Amazon linux 2 на основе centos. Он запускает стек lampp php7. webroot это /var/www/html.

У нас нет доступа к домену, example.com, это с клиентом на другом сервере, он добавил наш поддомен CNAME. На сервере AWS размещается только поддомен.

Докер работает на localhost:8080/cms, у него есть стек lampp php5, потому что cms построена с использованием cakephp 2, который работает только с php5, остальная часть нашего бэкэнда использует php7.

docker run --name cakephp --always-restart -p 8080:80 -d -v /home/ec2-user/cms:/var/www/html porchn/php5.6-apache

теперь, без какой-либо конфигурации apache, чистая установка lampp, если вы перейдете в

localhost:8080/cms или server-ip:8080/cms

он перенаправляет на

sub.example.com:8080/cms

Это работает, поэтому мне кажется, что apache понимает sub.example.com как основной домен, а не как поддомен

Все, что я хочу сделать, это сделать прокси-пароль, поэтому вместо одного

sub.example.com:8080/cms

он должен быть в состоянии пойти в

sub.example.com/cms

Но это не работает, я перепробовал много конфигураций прокси на основном сервере, апач внутри докера не трогал.

<VirtualHost *:80>
 ProxyPreserveHost On 
 ProxyRequests Off
 ServerName www.sub.example.com
 ServerAlias sub.example.com
 ProxyPass / sub.example.com:8080/cms
 ProxyPassReverse / sub.example.com:8080/cms
 </VirtualHost>
  1. ProxyPass / sub.example.com:8080/cms перенаправляет на example.comне sub.example.com, Я не хочу этого, потому что у меня нет доступа к основному домену

  2. Я не думаю, что мне нужно указывать servername, потому что apache понимает sub.example.com в качестве основного домена я снова пробовал каждую комбинацию, прежде чем опубликовать этот вопрос, ничего не работает, я тоже не уверен, как выполняется конфигурация DNS. Я хотел бы указать servername хотя, потому что таким образом certbot сможет обнаружить его и добавить к нему letsencrypt

  3. Я не знаю, нужно ли мне указывать DocumentRoot или нет, я снова пробовал каждую комбинацию, прежде чем приехать сюда.

Попробуйте это на своем внешнем apache:

<VirtualHost *:80>
 ProxyPreserveHost On 
 ProxyRequests Off
 ServerName www.sub.example.com
 ServerAlias sub.example.com
 ProxyPass /cms/ http://sub.example.com:8080/cms/
 ProxyPassReverse /cms/ http://sub.example.com:8080/cms/
</VirtualHost>

сначала, если это не работает, отправьте заголовок перенаправления запроса на http://sub.example.com/cms/.

Также имейте в виду, что sub.example.com может потребоваться разрешить внешний (эластичный) IP-адрес, тогда как на локальном сервере ему необходимо разрешить петлевой или локальный IP-адрес, если вы хотите использовать sub.example.com для прохода прокси и sub .example.com указывает на общедоступный IP-адрес / должен быть доступен из общедоступного Интернета.

Если возможно, я бы порекомендовал использовать localhost - и явно установить Host-Header, если ProxyPreserveHost должен быть включен, просто чтобы не нужно было открывать порт по адресу, отличному от loopback.

И для ваших маркеров:

  1. ProxyPass / sub.example.com:8080/cms перенаправляет на example.comне sub.example.com => ProxyPass вообще не перенаправляет, он проксирует / перенаправляет. Возможно, вы получили перенаправление из вашего приложения или веб-сервера в контейнере, потому что запрос на http://sub.example.com/cms/ пришел к контейнерам apache как запрос на http://sub.example.com:8080/cmscms/ - или он вообще не попал в контейнер (я не уверен, действителен ли ProxyPass без указания протокола)
  2. Apache не воспринимает какой-либо домен как основной сам по себе, если он где-то не настроен или является преобразователем из имени хоста или чего-то подобного. Но это не должно быть проблемой (но вы можете не захотеть включать www.sub.example.com как имя сервера, если нет CNAME, которое разрешается в имя хоста / ip вашего сервера в дополнение к CNAME для sub.example.com, это не должно нанести вреда, но может генерировать сбивающие с толку outpout / ссылки и, возможно, затрудняет настройку в какой-то момент в качестве основного домен этого виртуального хоста не является действительным доменом)
  3. Корень документа здесь не имеет значения. (Всегда лучше иметь корень документа, который доступен / может использоваться для apache, поскольку некоторые вещи, которые вы не ожидаете зависеть от доступного документа, могут потерпеть неудачу, если это не так).