Vraag Hoe kan ik subdomeinen omleiden naar een andere poort op dezelfde server?


Ik heb een aantal subdomeinen die ik wil omleiden naar specifieke poorten op dezelfde server. Zeg dat ik het heb

dev.mydomain.com 

ik wil dev.mydomain.com om transparant omleiden naar mydomain.com:8080 en ik wil de originele sub-domeinnaam de URL van de browser behouden.

Hoe doe ik dit met Apache 2.2? Ik heb Apache 2.2 op de standaardpoort uitgevoerd 80. Ik kan de schrijfconfiguratie niet achterhalen om dit te laten gebeuren.

Ik heb het al opgezet dev.mydomain.com op te lossen in DNS naar mydomain.com.

Dit is voor een intranet-ontwikkelserver met een niet-routeerbaar IP-adres   adres dus ik maak me niet zo druk om exploits en veiligheid   zou een openbaar server confronteren.


60
2017-10-28 00:57


oorsprong




antwoorden:


Oplossing

Hier is wat ik uiteindelijk bedacht nadat ik door Miles Erickson in de goede richting was gezet. Ik wilde dat de adresbalk het oorspronkelijke subdomein / domein van het verzoek weerspiegelt en niet de omgeleide server en poort, maar hij plaatste me op het juiste pad om een ​​oplossing te ontwikkelen met Google VirtualHost en ik heb eindelijk een oplossing gevonden die het gebruik van bevatte 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



Voor iedereen die voor dit antwoord niet werkte, moet u er rekening mee houden dat u mods moet inschakelen mod_proxy net zoals proxy_http. - matewka


Ervan uitgaande dat dev.mydomain.com kan worden omgezet naar het IP-adres van mijndomein.com, kunt u het volgende toevoegen aan uw httpd.conf:

NameVirtualHost *:80

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

Relevante Apache-documentatie:

  1. Handleiding voor het maken van op naam gebaseerde virtuele hosts
  2. Kern, inclusief VirtualHost en NameVirtualHost
  3. redirect

Gerelateerde vraag: Apache-omleiding op basis van hostnaam

(Opmerking: de oorspronkelijke versie van dit antwoord suggereerde ten onrechte het gebruik van RedirectMatch, dat, zoals nuttig door @ChrisS is aangegeven, het domeingedeelte van de URL niet kan ontleden.)


9
2017-10-28 01:18



zie mezelf voorzien van een antwoord voor wat ik feitelijk heb gebruikt, namelijk dit idee van VirtualHost met mod_proxy om de oorspronkelijke host te behouden in plaats van een omleiding. Dit is een interne server dus het gaat mij niet om beveiliging of exploits van mod_proxy. - Jarrod Roberson
Veel andere suggesties gevonden, maar dit werkte uiteindelijk voor mij op Windows Server 2008 R2 / Apache 2.2.25. - HPWD
Het probleem met deze oplossing is dat in je broer je niet bij het eerste domein blijft, je krijgt een 302 naar de tweede. - Pleymor


Voeg in je hoofdvhost-configuratie de volgende regels toe:

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

Merk op dat dit mod_proxy op Apache vereist.


6
2017-10-28 02:01



Dit is geen omleiding; het geeft de verbinding aan. Het inschakelen van mod_proxy kan zeer eenvoudig worden gebruikt als je niet erg voorzichtig bent met het configureren. Ik zou dit ten zeerste aanbevelen. - Chris S
Hij wil geen omleiding, zoals bij zijn OP. Hij wil dat de originele URL in de adresbalk blijft; dit betekent dat je mod_proxy of mod_rewrite gebruikt en dat je mod_rewrite beter kunt vermijden. - adaptr


U bent op zoek naar mod_rewrite. Hier is de link naar de documentatie van Apache waar veel voorbeelden voor zijn basis- en gevorderd configuraties ..

En als je de documentatie niet zelf kunt interpreteren, probeer dit dan toe te voegen aan httpd.conf:

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

En als dat geen duidelijk voorbeeld is, hier is een link naar een mod_rewrite beginnershandleiding te.


3
2017-10-28 00:59



Het is niet correct. mod_rewrite mag alleen als laatste redmiddel worden gebruikt, als niets anders het doet. De redirect- en proxy-oplossingen die worden gegeven, zijn veel beter in dit (en bijna alle andere denkbare) geval. - adaptr
@adaptr Dit doet een omleiding, ik zie niet in hoe andere omleidingen "veel beter" zijn. En suggereren dat hij een proxy instelt als hij duidelijk geen goed begrip heeft van Apache / Beveiliging / Prestaties / etc, is dat serieus? - Chris S
Ik ben op gedeelde hosting. Herschrijven is de enige optie. Ik kan een .htaccess-bestand maken, maar geen proxy of virtuele host. - abalter


Voer de volgende regel op terminal uit (geef uw domein- en subdomeinnaam correct op)

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

Plak de volgende code en wijzig deze als uw vereiste

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

Voer de volgende regels uit op terminal (geef uw domein- en subdomeinnaam correct op)

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

2
2018-01-18 09:29



Is er een wezenlijk verschil tussen dit en het geaccepteerde antwoord? - kasperd
De meeste mensen vergeten toe te voegen sudo a2enmod proxy_http zodat ze problemen ondervinden bij het correct werken. Ook probeer ik het volledige proces van begin tot eind in een reeks te geven om meer acculturatie te helpen. Bedankt voor uw vraag. - M.A.K. Ripon
+1 vanwege het vermelden van "ProxyRequests Off" - Sebastian
Dit werkt gewoon niet voor mij. 'sudo a2enmod subdomain.domain.com.conf' zegt 'ERROR: Module x.y.z bestaat niet!' Moet dit worden vermeld in de 'standaard'-configuratie? - Dirk Schumacher
Correctie bij het registreren van het subdomein sudo a2ensite sub.yourdomain.com - Ali Azhar