Apache: прокси-контейнер докеров для субдомена

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

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

Docker работает на 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 как основной домен, а не как субдомен

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

sub.example.com:8080/cms

он должен иметь возможность перейти на

sub.example.com/cms

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

<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 как основной домен, я снова пробовал каждую комбинацию, прежде чем публиковать это вопрос, ничего не работает, тоже не уверен как делается настройка днс. Я хотел бы указать servername , хотя, поскольку таким образом certbot сможет обнаружить его и добавить к нему letsencrypt

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

0
задан 27 October 2019 в 14:23
1 ответ

Сначала попробуйте это на внешнем 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 для прокси. pass и 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, это не должно нанести вреда, но может привести к сбивающим с толку выводам / ссылкам и, возможно, в какой-то момент затруднит настройку, поскольку основной домен этого vhost не является действительным then)
  3. Корень документа здесь не имеет значения. (Всегда лучше иметь корень документа, который доступен / может использоваться для apache, поскольку некоторые вещи, которые вы не ожидаете зависеть от доступного документа, могут потерпеть неудачу, если это не так).
1
ответ дан 4 December 2019 в 15:35

Теги

Похожие вопросы