Поддомен 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>
ProxyPass / sub .example.com: 8080 / cms
перенаправляет на example.com
, а не на sub.example.com
. Я не хочу этого, потому что у меня нет доступа к основной домен
Я не думаю, что мне нужно указывать servername
, потому что apache понимает sub.example.com
как основной домен, я снова пробовал каждую комбинацию, прежде чем публиковать это вопрос, ничего не работает, тоже не уверен как делается настройка днс. Я хотел бы указать servername
, хотя, поскольку таким образом certbot сможет обнаружить его и добавить к нему letsencrypt
, я не знаю, нужно ли мне указывать 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 для прокси. pass и sub.example.com указывает на общедоступный IP-адрес / должен быть доступен из общедоступного Интернета.
Если возможно, я бы порекомендовал использовать localhost - и явно установить Host-Header, если ProxyPreserveHost должен быть включен, просто чтобы не открывать порт на адресе, отличном от loopback.
И для ваших маркеров:
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 без указания протокола)