Как настроить перезапись URL для экземпляра Heroku?
Я больше инженер, чем парень-девоп, поэтому прошу прощения, если это очень просто.
Моя ситуация: у меня есть сервер в сети 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. Я только начал смотреть учебные пособия, но главная сложность заключается в том, что я не имею полного контроля над доменом и хочу убедиться, что все настроено правильно.
2 ответа
Предполагая, что у вас уже есть все необходимые директивы Apache VirtualHost, вам, в основном, нужно добавить следующее к директивам порта 803 и 443 VirtualHost для "bar.example.com"... (выберите одну или другую)
ВАРИАНТ 1: Правило перезаписи Поскольку вы указали, что искали правило перезаписи, я опубликую это, но, как отмечено в ссылочной ссылке ниже, это не самый эффективный способ сделать это.
RewriteEngine on
RewriteRule ^(.*)$ https://bar-example-edu.herokuapp.com/$1 [P]
СПРАВКА: http://httpd.apache.org/docs/current/rewrite/flags.html
ВАРИАНТ 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
... на заметку, учитывая, что приложение 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.