Назад | Перейти на главную страницу

Как мне настроить перезапись URL для экземпляра Heroku?

Я больше инженер, чем парень DevOps, поэтому, пожалуйста, извините меня, если это слишком элементарно.

Моя ситуация: у меня есть сервер в сети example.edu, поэтому я не контролирую основной интерфейс DNS для example.edu. Поэтому я не верю, что могу использовать DNSSimple или Zerigo. Однако у меня есть root на сервере, и у него есть следующие два имени хоста:

foo.example.edu
bar.example.edu

Моя цель - настроить Apache для выполнения следующих действий.

Как мне это сделать? Я полагаю, мне следует использовать 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.