Como eu redireciono subdomínios para uma porta diferente no mesmo servidor?

61

Eu tenho alguns subdomínios que eu quero redirecionar para portas específicas no mesmo servidor. Digamos que eu tenha

dev.mydomain.com 

Eu quero que dev.mydomain.com redirecione de forma transparente para mydomain.com:8080 e desejo preservar o nome do subdomínio original da URL do navegador.

Como faço isso com o Apache 2.2? Eu tenho o Apache 2.2 em execução na porta padrão 80 . Não consigo descobrir a configuração de gravação para que isso aconteça.

Já configurei dev.mydomain.com para resolver no DNS para mydomain.com .

This is for an intranet development server that has a non-routable ip address so I am not so concerned about exploits and security that would compromise a publicly facing server.

    
por Jarrod Roberson 28.10.2010 / 00:57

5 respostas

66

Solução

Aqui está o que eu finalmente consegui depois de ser colocado na direção certa por Miles Erickson. Eu queria que a barra de endereços refletisse o subdomínio / domínio original da solicitação e não o servidor e a porta redirecionados, mas ele me colocou no caminho certo para o Google criar uma solução usando VirtualHost e finalmente encontrei uma solução que incluía o uso de mod_proxy .

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName dev.mydomain.com
    ProxyPreserveHost On

    # setup the proxy
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    ProxyPass / http://localhost:8888/
    ProxyPassReverse / http://localhost:8888/
</VirtualHost>
    
por 28.10.2010 / 15:36
10

Assumindo que dev.mydomain.com pode ser resolvido para o IP do mydomain.com, você pode adicionar o seguinte ao seu httpd.conf:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName dev.mydomain.com
    redirect / http://mydomain.com:8080/
</VirtualHost>

Documentação relevante do Apache:

  1. Guia para criar hosts virtuais baseados em nome
  2. Essencial , incluindo VirtualHost e NameVirtualHost
  3. Redirecionar

Pergunta relacionada: Redirecionamento do Apache com base no nome do host

(Nota: a versão original desta resposta sugeriu incorretamente o uso do RedirectMatch, que, como apontado pelo @ChrisS, não pode analisar a parte do domínio do URL.)

    
por 28.10.2010 / 01:18
6

Adicione na configuração principal do vhost as seguintes linhas:

ProxyPreserveHost On
ProxyPass / http://example.com:8080/
ProxyPassReverse / http://example:8080/

Note que isso requer mod_proxy no Apache.

    
por 28.10.2010 / 02:01
3

Você está procurando por mod_rewrite. Aqui está o link para a documentação do Apache que inclui muitos exemplos para basic e avançado configurações ..

E se você não conseguir interpretar a documentação, tente adicionar isso ao httpd.conf:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^dev\.example\.com$ [NC]        
RewriteRule ^(.*)$ http://example.com:8080$1 [R=301]    

E se esse não for um exemplo claro, aqui está um link para um guia de iniciantes do mod_rewrite também

    
por 28.10.2010 / 00:59
2

Execute a seguinte linha no terminal (especifique seu nome de domínio e subdomínio corretamente)

sudo nano /etc/apache2/sites-available/subdomain.example.com.conf 

Cole o seguinte código e altere como sua exigência

<VirtualHost *:80>
        ServerAdmin [email protected]
        ServerName subdomain.example.com
        ServerAlias subdomain.example.com
        ProxyRequests Off

        #ProxyPass / http://localhost:8080/
        <Location />
                ProxyPreserveHost On
                ProxyPass http://example.com:8080/
                ProxyPassReverse http://example.com:8080/
        </Location>
     # Uncomment the line below if your site uses SSL.
     #SSLProxyEngine On
</VirtualHost>

Execute as seguintes linhas no terminal (especifique seu nome de domínio e subdomínio corretamente)

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2ensite subdomain.example.com.conf
sudo service apache2 restart
    
por 18.01.2016 / 09:29