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


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

dev.mydomain.com 

Ich will dev.mydomain.com transparent umleiten zu mydomain.com:8080 und ich möchte den ursprünglichen Sub-Domain-Namen die URL des Browsers beibehalten.

Wie mache ich das mit Apache 2.2? Ich habe Apache 2.2 auf dem Standard-Port ausgeführt 80. Ich kann die Schreibkonfiguration nicht herausfinden, um dies zu erreichen.

Ich habe es schon eingerichtet dev.mydomain.com in DNS auflösen mydomain.com.

Dies ist für einen Intranet-Entwicklungsserver, der eine nicht routingfähige IP hat   Adresse, so bin ich nicht so besorgt über Exploits und Sicherheit, dass   würde einen öffentlich zugänglichen Server kompromittieren.


60
2017-10-28 00:57


Ursprung




Antworten:


Lösung

Hier ist es, was ich endlich herausgefunden habe, nachdem Miles Erickson in die richtige Richtung gegangen ist. Ich wollte, dass die Adressleiste die ursprüngliche Subdomain / Domäne der Anfrage und nicht den umgeleiteten Server und Port widerspiegelt, aber er hat mich auf den richtigen Weg zu Google geführt, um eine Lösung zu verwenden VirtualHost und ich fand schließlich eine Lösung, die die Verwendung von enthielt 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>

63
2017-10-28 15:36



Für alle, für die diese Antwort nicht funktionierte, bedenke, dass du Mods aktivieren musst mod_proxy ebenso gut wie proxy_http. - matewka


Unter der Annahme, dass dev.mydomain.com in die IP-Adresse von mydomain.com aufgelöst werden kann, 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 von namensbasierten virtuellen Hosts
  2. Ader, einschließlich VirtualHost und NameVirtualHost
  3. Umleiten

Verwandte Frage: Apache Redirect basierend auf Hostname

(Anmerkung: Die ursprüngliche Version dieser Antwort schlug fälschlicherweise die Verwendung von RedirectMatch vor, was, wie @ChrisS hilfreich hervorhebt, den Domain-Teil der URL nicht analysieren kann.)


9
2017-10-28 01:18



Siehe meine selbst erstellte Antwort für das, was ich tatsächlich benutzt habe, nämlich diese Idee von VirtualHost mit mod_proxy, um den ursprünglichen Host zu erhalten, anstatt eine Weiterleitung zu machen. Dies ist ein interner Server, so dass ich mich nicht mit Sicherheit oder Exploits von mod_proxy befasse. - Jarrod Roberson
Ich habe zahlreiche andere Vorschläge gefunden, aber das funktionierte für mich auf Windows Server 2008 R2 / Apache 2.2.25. - HPWD
Das Problem mit dieser Lösung ist, dass du bei deinem Bruder nicht auf der ersten Domain bleibst, sondern eine 302 zur zweiten bekommst. - Pleymor


Fügen Sie 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.


6
2017-10-28 02:01



Dies ist keine Weiterleitung. Es zeigt die Verbindung an. Das Aktivieren von mod_proxy kann sehr einfach ausgeführt werden, wenn Sie nicht sehr vorsichtig sind, es zu konfigurieren. Ich kann es nur wärmstens empfehlen. - Chris S
Er will keine Umleitung, wie es in seinem OP steht. Er möchte, dass die ursprüngliche URL in der Adressleiste verbleibt. Das bedeutet, dass Sie entweder mod_proxy oder mod_rewrite verwenden und mod_rewrite besser vermeiden. - adaptr


Sie suchen nach mod_rewrite. Hier ist der Link zur Apache-Dokumentation Dazu gehören viele Beispiele für Basic und fortgeschritten Konfigurationen ..

Und wenn Sie die Dokumentation nicht selbst interpretieren können, versuchen Sie dies in httpd.conf hinzuzufügen:

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

Und wenn das kein klares Beispiel ist, hier ist ein Link zu einem mod_rewrite Einsteigerhandbuch auch.


3
2017-10-28 00:59



Es ist nicht korrekt. mod_rewrite sollte nur als letzter Ausweg verwendet werden, wenn nichts anderes zu tun ist. Die angegebenen Redirect- und Proxy-Lösungen sind in diesem (und fast jedem denkbaren) Fall weit überlegen. - adaptr
@adaptr Das tut eine Umleitung, ich sehe nicht, wie irgendwelche der anderen Redirects "weit überlegen" sind. Und zu empfehlen, dass er einen Proxy einrichtet, wenn er Apache / Security / Performance / etc eindeutig nicht versteht, ist das ernst? - Chris S
Ich bin auf Shared Hosting. Rewrite ist die einzige Option. Ich kann eine .htaccess-Datei erstellen, aber keinen Proxy oder virtuellen Host. - abalter


Führen Sie die folgende Zeile am Terminal aus (geben Sie Ihren Domain- und Sub-Domainnamen korrekt an)

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

Fügen Sie den folgenden Code ein und ändern Sie ihn als Ihre Anforderung

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

Führen Sie die folgenden Zeilen am Terminal aus (geben Sie Ihren Domain- und Sub-Domainnamen korrekt an)

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

2
2018-01-18 09:29



Gibt es einen wesentlichen Unterschied zwischen dieser und der akzeptierten Antwort? - kasperd
Die meisten Leute vergessen zu addieren sudo a2enmod proxy_http So haben sie Schwierigkeiten, richtig zu laufen. Ich versuche auch, den gesamten Prozess von Anfang bis Ende in einer Sequenz zu geben, um die Anpassung zu erleichtern. Danke für deine Frage. - M.A.K. Ripon
+1 wegen der Erwähnung von "ProxyRequests Off" - Sebastian
Das funktioniert einfach nicht für mich. 'sudo a2enmod subdomain.domain.com.conf' sagt "FEHLER: Modul x.y.z existiert nicht!" Muss es in der Standardkonfiguration erwähnt werden? - Dirk Schumacher
Korrektur beim Registrieren der Subdomain sudo a2ensite sub.yourdomain.com - Ali Azhar