Como configuro a Reescrita de URL para uma instância do Heroku?

4

Eu sou mais engenheiro que um devops, então, por favor, me desculpe se isso é extremamente básico.

Minha situação: Eu tenho um servidor na rede example.edu, então eu não controlo a interface DNS principal para example.edu. Portanto, não acredito que possa usar o DNSSimple ou o Zerigo. No entanto, tenho raiz no servidor e tem os seguintes dois nomes de host:

foo.example.edu
bar.example.edu

Meu objetivo é configurar o Apache para fazer o seguinte.

  • Primeiro, quando um visitante digita foo.example.edu, ele deve ver uma página da Web estática:

    http://foo.example.edu - > servir uma página da Web estática

  • Em seguida, se o visitante digitar bar.example.edu, a reescrita do URL deverá ser executada e eles deverão visualizar a versão HTTPS do site hospedado no Heroku, da seguinte maneira:

    http://bar.example.edu - > %código% https://bar-example-edu.herokuapp.com - > %código% https://bar.example.edu - > https://bar-example-edu.herokuapp.com

  • Em particular, essa deve ser uma reescrita de URL, portanto, na barra de endereço do navegador, um visitante verá https://bar.example.edu/some/url em vez de https://bar-example-edu.herokuapp.com/some/url .

Como faço para isso? Eu acho que devo usar o mod_rewrite do Apache e editar o httpd.conf. Eu comecei a olhar para os tutoriais, mas a principal parte complicada é que eu não tenho controle total sobre o domínio e quero ter certeza de que eu configuro as coisas corretamente.

    
por ramanujan 19.12.2012 / 01:20

2 respostas

2

Supondo que você já tenha toda a diretiva Apache VirtualHost necessária, basicamente é necessário adicionar o seguinte às diretivas VirtualHost da porta 80 e da porta 443 para "bar.example.com" ... (escolha uma ou outra)

OPÇÃO 1: regravar regra Como você indicou que estava procurando uma regra de regravação, postarei isso, mas, conforme observado no link de referência abaixo, essa não é a maneira mais eficaz de fazer isso.

RewriteEngine on
RewriteRule ^(.*)$   https://bar-example-edu.herokuapp.com/$1   [P]

REFERENCE: http://httpd.apache.org/docs/current/rewrite/flags.html#flag_p

OPÇÃO 2: use mod_proxy diretamente

ProxyPass / https://bar-example-edu.herokuapp.com/
ProxyPassReverse  / https://bar-example-edu.herokuapp.com/

REFERENCE: http://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypass

... em uma nota lateral, dado que o aplicativo heroku está usando https (SSL), você deve provavelmente colocar a configuração do proxy na diretiva VirtualHost da porta 443 (ssl) e ter a seguinte linha na porta 80 VirtualHost:

Redirect / https://bar.example.edu/

... que deve direcionar seus visitantes para https antes que eles comecem.

    
por 07.02.2013 / 02:35
0

A configuração do Apache para o site estático é direta (deixei de fora linhas irrelevantes padrão)

<VirtualHost *:80>
    ServerName foo.example.edu
    DocumentRoot /var/www/foo.example.edu   
</VirtualHost>

O redirecionamento de bar.example.edu pode seguir as diretrizes do apache para o redirecionamento ssl . Eu usaria o redirecionamento embutido como mod_rewrite não é necessário neste caso de uso simples.

<VirtualHost *:80>
    ServerName bar.example.edu
    Redirect permanent / https://bar.example.edu/
 </VirtualHost>

E para o redirecionamento para o Heroku eu usaria mod_proxy_http para redirecionar. O host virtual criptografado pode ser algo como

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>

No lado Heroku no código-fonte do seu aplicativo, você criaria um aplicativo com:

 heroku create bar-example-edu

Configure seus complemento de domínio personalizado com

 heroku domains:add bar.example.edu

Adaptado ligeiramente de uma seção de um documento que escrevi sobre o proxy para o Heroku.

    
por 16.02.2013 / 02:13