Я больше инженер, чем парень DevOps, поэтому, пожалуйста, извините меня, если это слишком элементарно.
Моя ситуация: у меня есть сервер в сети example.edu, поэтому я не контролирую основной интерфейс DNS для example.edu. Поэтому я не верю, что могу использовать DNSSimple или Zerigo. Однако у меня есть root на сервере, и у него есть следующие два имени хоста:
foo.example.edu
bar.example.edu
Моя цель - настроить Apache для выполнения следующих действий.
Во-первых, когда посетитель вводит foo.example.edu, он должен увидеть статическую веб-страницу:
http://foo.example.edu
-> обслуживать статическую веб-страницу
Затем, если посетитель вводит bar.example.edu, необходимо выполнить перезапись URL, и они должны просматривать HTTPS-версию сайта, размещенного на Heroku, как показано ниже:
http://bar.example.edu
-> https://bar-example-edu.herokuapp.com
https://bar.example.edu
-> https://bar-example-edu.herokuapp.com
https://bar.example.edu/some/url
-> https://bar-example-edu.herokuapp.com/some/url
В частности, это должна быть перезапись URL, чтобы в адресной строке браузера посетитель увидел https://bar.example.edu/some/url
скорее, чем https://bar-example-edu.herokuapp.com/some/url
.
Как мне это сделать? Я полагаю, мне следует использовать Apache mod_rewrite и отредактировать httpd.conf. Я только начал просматривать руководства, но главная сложность заключается в том, что у меня нет полного контроля над доменом, и я хочу убедиться, что все настроено правильно.
Предполагая, что у вас уже есть все необходимые директивы Apache VirtualHost, вам в основном нужно добавить следующие директивы VirtualHost для портов 80 и 443 для bar.example.com ... (выберите один или другой)
ВАРИАНТ 1. Правило перезаписи Поскольку вы указали, что ищете правило перезаписи, я опубликую его, но, как указано в ссылке ниже, это не самый эффективный способ сделать это.
RewriteEngine on
RewriteRule ^(.*)$ https://bar-example-edu.herokuapp.com/$1 [P]
ССЫЛКА: http://httpd.apache.org/docs/current/rewrite/flags.html#flag_p
ВАРИАНТ 2: Используйте mod_proxy напрямую
ProxyPass / https://bar-example-edu.herokuapp.com/
ProxyPassReverse / https://bar-example-edu.herokuapp.com/
ССЫЛКА: http://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypass
... кстати, учитывая, что приложение heroku использует https (SSL), вам, вероятно, следует просто поместить конфигурацию прокси в директиву VirtualHost порта 443 (ssl) и иметь следующую строку в порту 80 VirtualHost:
Redirect / https://bar.example.edu/
... который должен направлять ваших посетителей на https перед их запуском.
Конфигурация Apache для статического сайта проста (я пропустил стандартные нерелевантные строки)
<VirtualHost *:80>
ServerName foo.example.edu
DocumentRoot /var/www/foo.example.edu
</VirtualHost>
Перенаправление bar.example.edu может следовать за Руководство apache для перенаправления ssl. Я бы использовал встроенное перенаправление, поскольку в этом простом случае использования mod_rewrite не требуется.
<VirtualHost *:80>
ServerName bar.example.edu
Redirect permanent / https://bar.example.edu/
</VirtualHost>
А для перенаправления на Heroku я бы использовал mod_proxy_http для перенаправления. Зашифрованный виртуальный хост может быть чем-то вроде
ProxyRequests Off
<Proxy *>
AddDefaultCharset off
Order deny,allow
Deny from none
</Proxy>
ProxyVia On
<VirtualHost *:443>
ServerName bar.example.edu
SSLEngine On
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
ProxyPass / https://bar-example-edu.herokuapp.com/
ProxyPassReverse / https://bar-example-edu.herokuapp.com/
ProxyPassReverseCookieDomain / https://bar-example-edu.herokuapp.com/
</VirtualHost>
На стороне Heroku в исходном коде вашего приложения вы должны создать приложение с:
heroku create bar-example-edu
И настроить их Надстройка Custom Domain с участием
heroku domains:add bar.example.edu
Немного адаптировано из раздел документа, который я написал о проксировании в Heroku.