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

67

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

dev.mydomain.com 

Desejo dev.mydomain.comredirecionar de forma transparente mydomain.com:8080e quero preservar o nome original do subdomínio na 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.

Eu já configurei dev.mydomain.compara resolver no DNS para mydomain.com.

Isso é para um servidor de desenvolvimento da intranet que possui um endereço IP não roteável, por isso não estou tão preocupado com explorações e segurança que comprometeriam um servidor público.


fonte

Respostas:

69

Solução

Aqui está o que eu finalmente inventei depois de ter sido definido na direção certa por Miles Erickson. Queria que a barra de endereço 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 encontrar uma solução usando VirtualHoste 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>
user3037143
fonte
7
Para todos que esta resposta não trabalho para, tenha em mente que você tem que permitir que mods mod_proxy, bem como proxy_http.
matewka
9

Supondo que dev.mydomain.com possa 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. Principal , incluindo VirtualHost e NameVirtualHost
  3. Redirecionar

Pergunta relacionada: Apache redirecionado com base no nome do host

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

Falcão do céu
fonte
11
veja minha resposta fornecida pelo que realmente usei, que é essa ideia do VirtualHost com mod_proxy para preservar o host original em vez de fazer um redirecionamento. Este é um servidor interno, portanto não estou preocupado com a segurança ou explorações do mod_proxy.
11
Encontrei várias outras sugestões, mas isso funcionou para mim no Windows Server 2008 R2 / Apache 2.2.25.
HPWD
11
O problema com esta solução é que, no seu irmão, você não fica no primeiro domínio, recebe 302 no segundo.
Pleymor # 9/17
7

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

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

Cole o seguinte código e altere conforme 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 domínio e nome de subdomínio corretamente)

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2ensite subdomain.example.com.conf
sudo service apache2 restart
MAK Ripon
fonte
3
Existe alguma diferença essencial entre essa e a resposta aceita?
kasperd
11
A maioria das pessoas esquece de acrescentar sudo a2enmod proxy_httpe enfrenta dificuldades para executar corretamente. Também tento dar um processo completo do início ao fim em uma sequência para ajudar a mais aculturação. Obrigado pela sua pergunta.
MAK Ripon
11
+1 por mencionar "ProxyRequests Off"
Sebastian
11
Isso simplesmente não funciona para mim. 'sudo a2enmod subdomínio.domínio.com.conf' diz "ERRO: O módulo xyz não existe!" Isso precisa ser mencionado na configuração 'padrão'?
perfil completo de Dirk Schumacher
2
Correção no registro de subdomínio sudo a2ensite sub.yourdomain.com
Ali Azhar
5

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

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

Observe que isso requer mod_proxy no Apache.

Ryszard Stawiarski
fonte
Este não é um redirecionamento; proxies a conexão. A ativação do mod_proxy pode ser extremamente fácil de explorar se você não for muito cuidadoso ao configurá-lo. Eu recomendo contra isso.
Chris S
4
Ele não quer um redirecionamento, conforme seu OP. Ele quer que o URL original permaneça na barra de endereço; isso significa usar mod_proxy ou mod_rewrite e é melhor evitar o mod_rewrite.
Adaptr # 1/12
4

Você está procurando por mod_rewrite. Aqui está o link para a documentação do Apache, que inclui muitos exemplos de configurações básicas e avançadas .

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 para iniciantes de mod_rewrite .

Chris S
fonte
11
Estou em hospedagem compartilhada. Reescrever é a única opção. Posso criar um arquivo .htaccess, mas não um proxy ou host virtual.
abalter