Come reindirizzare i sottodomini a una porta diversa sullo stesso server?


67

Ho alcuni sottodomini che voglio reindirizzare a porte specifiche sullo stesso server. Di 'che ho

dev.mydomain.com 

Voglio dev.mydomain.comreindirizzare in modo trasparente a mydomain.com:8080e voglio preservare il nome del sottodominio originale l'URL del browser.

Come posso farlo con Apache 2.2? Ho Apache 2.2 in esecuzione sulla porta predefinita 80. Non riesco a capire la configurazione di scrittura per farlo accadere.

Ho già impostato la dev.mydomain.comrisoluzione in DNS per mydomain.com.

Questo è per un server di sviluppo Intranet che ha un indirizzo IP non instradabile, quindi non sono così preoccupato per exploit e sicurezza che comprometterebbero un server pubblico.

Risposte:


69

Soluzione

Ecco cosa mi è venuto in mente dopo essere stato impostato nella giusta direzione da Miles Erickson. Volevo che la barra degli indirizzi riflettesse il sottodominio / dominio originale della richiesta e non il server e la porta reindirizzati, ma mi ha messo sulla strada giusta per Google usando una soluzione VirtualHoste finalmente ho trovato una soluzione che includeva l'uso di mod_proxy.

<VirtualHost *:80>
    ServerAdmin me@mydomain.com
    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>

7
Per tutti coloro che questa risposta non ha funzionato per, tenere a mente che è necessario abilitare mods mod_proxycosì come proxy_http.
matewka,

9

Supponendo che dev.mydomain.com possa essere risolto nell'IP di mydomain.com, è possibile aggiungere quanto segue al proprio httpd.conf:

NameVirtualHost *:80

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

Documentazione Apache pertinente:

  1. Guida alla creazione di host virtuali basati sul nome
  2. Core , inclusi VirtualHost e NameVirtualHost
  3. Reindirizzare

Domanda correlata: reindirizzamento di Apache in base al nome host

(Nota: la versione originale di questa risposta suggeriva erroneamente l'uso di RedirectMatch, che, come sottolineato da @ChrisS, non è in grado di analizzare la parte del dominio dell'URL.)


1
vedere la mia risposta autonoma per ciò che ho effettivamente utilizzato, che è questa idea di VirtualHost con mod_proxy per preservare l'host originale invece di fare un reindirizzamento. Questo è un server interno, quindi non mi occupo di sicurezza o exploit di mod_proxy.

1
Ho trovato numerosi altri suggerimenti, ma alla fine ha funzionato per me su Windows Server 2008 R2 / Apache 2.2.25.
HPWD,

1
Il problema con questa soluzione è che in tuo fratello non rimani sul primo dominio, ottieni un 302 al secondo.
Pleymor,

7

Esegui la seguente riga sul terminale (specifica correttamente il tuo dominio e il nome del sottodominio)

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

Incolla il codice seguente e modifica come requisito

<VirtualHost *:80>
        ServerAdmin admin@example.com
        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>

Esegui le seguenti righe sul terminale (specifica correttamente il tuo dominio e il nome del sottodominio)

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2ensite subdomain.example.com.conf
sudo service apache2 restart

3
C'è qualche differenza essenziale tra questa e la risposta accettata?
Kasperd,

1
La maggior parte delle persone dimentica di aggiungere in sudo a2enmod proxy_httpmodo da avere difficoltà a funzionare correttamente. Inoltre, cerco di dare un processo completo dall'inizio alla fine in una sequenza per aiutare più in modo accurato. Grazie per la tua domanda
MAK Ripon,

1
+1 a causa della menzione di "ProxyRequests Off"
Sebastian

1
Questo non funziona per me. "sudo a2enmod subdomain.domain.com.conf" dice "ERRORE: il modulo xyz non esiste!" Deve essere menzionato nella configurazione 'predefinita'?
Dirk Schumacher,

2
Correzione nella registrazione del sottodominio sudo a2ensite sub.yourdomain.com
Ali Azhar

5

Aggiungi nella configurazione del tuo vhost principale le seguenti righe:

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

Nota che questo richiede mod_proxy su Apache.


Questo non è un reindirizzamento; inoltra la connessione. Abilitare mod_proxy può essere estremamente facile da sfruttare se non si è molto attenti a configurarlo. Consiglio vivamente contro questo.
Chris S,

4
Non vuole un reindirizzamento, secondo il suo PO. Vuole che l'URL originale rimanga nella barra degli indirizzi; questo significa usare mod_proxy o mod_rewrite, ed è meglio evitare mod_rewrite.
adattamento

4

Stai cercando mod_rewrite. Ecco il link alla documentazione di Apache che include molti esempi di configurazioni di base e avanzate .

E se non riesci a interpretare la documentazione da solo, prova ad aggiungere questo a httpd.conf:

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

E se questo non è un chiaro esempio, ecco un link anche a una guida per principianti mod_rewrite .


1
Sono su hosting condiviso. Riscrivi è l'unica opzione. Posso creare un file .htaccess, ma non un proxy o un host virtuale.
Abalter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.