it-swarm.com.de

Wie leite ich Subdomains an einen anderen Port auf demselben Server um?

Ich habe einige Subdomains, die ich zu bestimmten Ports auf demselben Server umleiten möchte. Sag ich habe

dev.mydomain.com 

Ich möchte, dass dev.mydomain.com Transparent zu mydomain.com:8080 Weiterleitet, und ich möchte den ursprünglichen Subdomainnamen, die URL des Browsers, beibehalten.

Wie mache ich das mit Apache 2.2? Ich habe Apache 2.2 auf Standardport 80 Ausgeführt. Ich kann die Schreibkonfiguration nicht herausfinden, um dies zu erreichen.

Ich habe dev.mydomain.com Bereits eingerichtet, um in DNS in mydomain.com Aufzulösen.

Dies gilt für einen Intranet-Entwicklungsserver mit einer nicht routbaren IP-Adresse. Daher bin ich nicht so besorgt über Exploits und Sicherheit, die einen öffentlich zugänglichen Server gefährden würden.

73
user35861

Lösung

Folgendes habe ich mir endlich ausgedacht, nachdem Miles Erickson mich in die richtige Richtung gesetzt hatte. Ich wollte, dass die Adressleiste die ursprüngliche Subdomain/Domain der Anfrage und nicht den umgeleiteten Server und Port widerspiegelt, aber er brachte mich auf den richtigen Weg zu Google, um eine Lösung mit VirtualHost zu finden, und ich fand schließlich eine Lösung, die schloss die Verwendung von 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>
73
user35861

Angenommen, dev.mydomain.com kann in die IP von mydomain.com aufgelöst werden, können Sie Ihrer httpd.conf Folgendes hinzufügen:

NameVirtualHost *:80

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

Relevante Apache-Dokumentation:

  1. Anleitung zum Erstellen namenbasierter virtueller Hosts
  2. Core , einschließlich VirtualHost und NameVirtualHost
  3. Weiterleiten

Verwandte Frage: Apache-Umleitung basierend auf dem Hostnamen

(Hinweis: In der Originalversion dieser Antwort wurde fälschlicherweise die Verwendung von RedirectMatch vorgeschlagen, das, wie @ChrisS hilfreich hervorhob, den Domain-Teil der URL nicht analysieren kann.)

10
Skyhawk

Führen Sie die folgende Zeile auf dem Terminal aus (geben Sie Ihren Domain- und Sub-Domain-Namen korrekt an).

Sudo nano /etc/Apache2/sites-available/subdomain.example.com.conf 

Fügen Sie den folgenden Code ein und ändern Sie ihn nach Bedarf

<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>

Führen Sie die folgenden Zeilen auf dem Terminal aus (geben Sie Ihren Domain- und Sub-Domain-Namen korrekt an).

Sudo a2enmod proxy
Sudo a2enmod proxy_http
Sudo a2ensite subdomain.example.com.conf
Sudo service Apache2 restart
7
M.A.K. Ripon

Fügen Sie in Ihrer Haupt-vhost-Konfiguration die folgenden Zeilen hinzu:

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

Beachten Sie, dass dies mod_proxy für Apache erfordert.

5

Du suchst nach mod_rewrite. Hier ist der Link zu Apaches Dokumentation enthält viele Beispiele für grundlegende und erweiterte Konfigurationen.

Wenn Sie die Dokumentation nicht selbst interpretieren können, fügen Sie sie zu httpd.conf hinzu:

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

Und wenn dies kein klares Beispiel ist, finden Sie hier auch ein Link zu einem Anfängerhandbuch für mod_rewrite .

4
Chris S