Как настроить перезапись 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.comhttps://bar.example.edu -> https://bar-example-edu.herokuapp.comhttps://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.

Другие вопросы по тегам