2011-12-16 17 views
95

Ho lottato con questo per un po 'di tempo e sto sicuramente facendo qualcosa di sbagliato.Apache reindirizza su un'altra porta

Ho un server Apache e un server JBoss sulla stessa macchina. Mi piacerebbe reindirizzare il traffico per mydomain.com a JBoss localhost: 8080/esempio. Il DNS è attualmente configurato per mydomain.com e andrà direttamente alla porta 80 quando inserito nel browser.

La mia domanda è come reindirizzare a una porta diversa quando un determinato nome di dominio viene in Apache (in questo caso, "mydomain.com")?

<VirtualHost ip.addr.is.here> 
    ProxyPreserveHost On 
    ProxyRequests Off 
    ServerName mydomain.com 
    ProxyPass http://mydomain.com http://localhost:8080/example 
    ProxyPassReverse http://mydomain.com http://localhost:8080/example 
</VirtualHost> 

AGGIORNATO w/Suggerimenti - Ancora non è l'inoltro alla porta 8080

<VirtualHost *:80> 
    ProxyPreserveHost On 
    ProxyRequests Off 
    ServerName mydomain.com 
    ServerAlias www.mydomain.com 
    ProxyPass http://mydomain.com http://localhost:8080/example 
    ProxyPassReverse http://mydomain.com http://localhost:8080/example 
</VirtualHost> 
+0

Sembra abbastanza buono. Quali sono i tuoi sintomi? –

+0

I sympotms sono che ho messo www.mydomain.com nel browser ma e va alla directory root di apache. Invece, mi piacerebbe che reindirizzasse a una subdirectory localhost jboss: 8080/subdir. Attualmente sto lavorando per il reindirizzamento di vari domini direttamente alla porta 80, ma non riesco a farlo andare in un'altra porta. – agentcurry

+0

Ho la stessa identica richiesta: hai trovato una soluzione? – Cystack

risposta

138

Si dovrebbe lasciare il dominio http://example.com in ProxyPass e ProxyPassReverse e lasciarlo come /. Inoltre, è necessario lasciare / alla fine di example/ dove si sta reindirizzando. Inoltre, ho avuto qualche problema con http://example.com rispetto a http://www.example.com - solo il www ha funzionato fino a quando ho creato il ServerName www.example.com e il Server.com esempio.com. Dare il seguente un andare.

<VirtualHost *:80> 
    ProxyPreserveHost On 
    ProxyRequests Off 
    ServerName www.example.com 
    ServerAlias example.com 
    ProxyPass/http://localhost:8080/example/ 
    ProxyPassReverse/http://localhost:8080/example/ 
</VirtualHost> 

Dopo aver apportato queste modifiche, aggiungere i moduli necessari e riavviare apache

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart 
+1

Sarebbe lo stesso per un server CentOS? (Non vedo perché no, solo per essere sicuro). E quale file di configurazione sarebbe? (da qualche parte in/etc/httpd/conf sto indovinando ...) – Jeremy

+1

Ha funzionato, ma ho visto che nella pagina di benvenuto della mia applicazione, il css non è stato caricato (che in precedenza ha funzionato su example.com:8080/example). e ho anche alcune eccezioni. qualche idea di ciò che mi manca? –

2

Se non c'è bisogno di utilizzare un proxy per JBoss e mydomain.com:8080 può essere "esposti "al mondo, quindi lo farei.

<VirtualHost *:80> 
    ServerName mydomain.com 
    Redirect 301/http://mydomain.com:8080/ 
</VirtualHost> 
+0

Utilizzare una porta diversa da 80 non solo sembra brutto, ma può anche causare problemi con server proxy o ISP. In tal caso, basta rimuovere Apache ed eseguire JBoss sulla porta 80, invece! –

+0

L'esecuzione di tutto sotto JBoss è un'opzione, stavo solo cercando di evitare di spostare i siti di apache su JBoss, ma non dovrebbe essere troppo dispendioso in termini di tempo. Grazie per il feedback. – agentcurry

0

Apache supporta host virtuali basati su nome e IP. Sembra che tu stia usando entrambi, che probabilmente non è quello che ti serve.

Penso che si stia effettivamente provando a impostare name-based virtual hosting, e per questo non è necessario specificare l'indirizzo IP.

Prova < VirtualHost *: 80> per eseguire il bind a tutti gli indirizzi IP, a meno che non si desideri veramente ip based virtual hosting. Questo può essere il caso se il server ha diversi indirizzi IP e vuoi servire siti diversi su indirizzi diversi. L'impostazione più comune è (suppongo) host virtuali basati sul nome.

+0

Questo ha senso, il nome basato è tutto ciò di cui ho bisogno. L'ho cambiato ma non lo instradavo ancora sull'altra porta. – agentcurry

0

avete bisogno di 2 cose:

  1. Aggiungi un ServerAlias www.mydomain.com alla propria configurazione
  2. cambiare la vostra ProxyPass a ProxyPassMatch ^(.*)$ http://localhost:8080/example$1, per mantenere possibilmente mod_dir e slash da interferire.
+0

Ho aggiunto ServerAlias ​​ma ancora senza fortuna. – agentcurry

23

Ho risolto questo problema con il seguente codice:

LoadModule proxy_module modules/mod_proxy.so 
LoadModule proxy_http_module modules/mod_proxy_http.so 
<VirtualHost *:80> 
ProxyPreserveHost On 
ProxyRequests Off 
ServerName myhost.com 
ServerAlias ww.myhost.com 
ProxyPass/http://localhost:8080/ 
ProxyPassReverse/http://localhost:8080/ 
</VirtualHost> 

Ho anche usato:

a2enmod proxy_http 
7

Volevo d o esattamente così ho potuto accedere a Jenkins dal dominio principale.

Ho trovato che dovevo disabilitare il sito predefinito per farlo funzionare. Ecco esattamente quello che ho fatto.

$ sudo vi /etc/apache2/sites-available/jenkins 

E inserire questo in un file:

<VirtualHost *:80> 
    ProxyPreserveHost On 
    ProxyRequests Off 
    ServerName mydomain.com 
    ServerAlias mydomain 
    ProxyPass/http://localhost:8080/ 
    ProxyPassReverse/http://localhost:8080/ 
    <Proxy *> 
     Order deny,allow 
     Allow from all 
    </Proxy> 
</VirtualHost> 

Dopodiché è necessario per abilitare/disabilitare i siti di raccolta:

$ sudo a2ensite jenkins 
$ sudo a2dissite default 
$ sudo service apache2 reload 

Speranza che aiuta qualcuno.

+0

Grazie per aver contribuito a @Louth. Da tempo ho dato questo e non ho più il server. Mi dà ancora fastidio che non l'ho mai fatto funzionare, potrei avviare un nuovo server solo per testare di nuovo. Grazie ancora, sarò sicuro di aggiornare se/quando provo di nuovo. – agentcurry

+0

Il wiki Jenkins spiega come eseguire Jenkins dietro Apache: https: //wiki.jenkins-ci.org/display/JENKINS/Running + Jenkins + dietro + Apache – mneute

2

Questa potrebbe essere una vecchia questione, ma ecco quello che ho fatto:

In un .conf file caricato da apache:

<VirtualHost *:80> 
    ServerName something.com 
    ProxyPass/http://localhost:8080/ 
</VirtualHost> 

Spiegazione: Ascolta tutte le richieste alla porta 80 della macchina locale. Se ho richiesto "http://something.com/somethingorother", inoltra la richiesta a "http://localhost:8080/somethingorother". Questo dovrebbe funzionare per un visitatore esterno perché, secondo i documenti, associa la richiesta remota allo spazio del server locale.

Sto eseguendo Apache 2.4.6-2ubuntu2.2, quindi non sono sicuro di come "-2ubuntu2.2" influisca sulla più ampia applicabilità di questa risposta.

Dopo aver apportato queste modifiche, aggiungere i moduli necessari e riavviare apache

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart 
4

trovato questo per tentativi ed errori. Se la tua configurazione specifica un ServerName, allora la tua direttiva VirtualHost dovrà fare lo stesso. Nell'esempio che segue, awesome.example.com e amazing.example.com sarebbero entrambi trasmessi a qualche servizio locale in esecuzione sulla porta 4567.

ServerName example.com:80 

<VirtualHost example.com:80> 
    ProxyPreserveHost On 
    ProxyRequests Off 
    ServerName awesome.example.com 
    ServerAlias amazing.example.com 
    ProxyPass/http://localhost:4567/ 
    ProxyPassReverse/http://localhost:4567/ 
</VirtualHost> 

So che questo non è esattamente rispondere alla domanda, ma io' m metterlo qui perché questo è il risultato di ricerca superiore per il port forwarding di Apache. Quindi immagino che un giorno possa aiutare qualcuno.

+0

Questo è l'unico che ha funzionato per me. Usando '*: 80' invece di' example.com: 80' significava che la porta non sarebbe stata reindirizzata. – Seb123

3

È necessario assicurarsi che il proxy sia abilitato sul server. È possibile farlo utilizzando i seguenti comandi:

a2enmod proxy 
    a2enmod proxy_http 

    service apache2 restart 
+0

Dopo 1 ora di girovagare per il tuo tip ha funzionato;) –

0

Tutte sono eccellenti informazioni sull'accesso alle porte tramite nomi di dominio su server virtuali. Non dimenticare, comunque, di abilitare i server virtuali; questo può essere commentata:

NameVirtualHost *:80 
<Directory "/home/dawba/www/"> 
allow from all 
</Directory> 

Noi usiamo WSGI con un server Apache al dominio sxxxx.com e un server golang in esecuzione sulla porta 6800. Alcuni firewall sembrano bloccare i nomi di dominio con porte.Questa è stata la nostra soluzione:

<VirtualHost *:80> 
ProxyPreserveHost On 
ProxyRequests Off 
ServerName wsgi.sxxxx.com 
DocumentRoot "/home/dxxxx/www" 
    <Directory "/home/dxxx/www"> 
    Options Indexes FollowSymLinks 
    AllowOverride None 
    Order allow,deny 
    Allow from all 
    </Directory> 
ScriptAlias /py/ "/home/dxxxx/www/py/" 
WSGIScriptAlias /wsgiprog /home/dxxxx/www/wsgiprog/Form/Start.wsgi 
</VirtualHost> 

<VirtualHost *:80> 
ProxyPreserveHost On 
ProxyRequests Off 
ServerName sxxxx.com 
ServerAlias www.sxxxx.com 
ProxyPass/http://localhost:6800/ 
ProxyPassReverse/http://localhost:6800/ 
</VirtualHost> 
0

mio apache ascolta 2 porte diverse,

Listen 8080 
Listen 80 

Io uso il 80 quando voglio un URL trasparente e non metto la porta dopo l'URL utile per Google servizi che non consentono l'URL locale?

Ma uso il 8080 per sviluppo interno dove uso il porto come riferimento per un "ambiente dev"

0

Ciò sta funzionando in ISPConfig troppo. Nell'elenco dei siti Web entra in un dominio, fai clic sulla scheda Opzioni, aggiungi queste righe:;

ProxyPass/http://localhost:8181/ 
ProxyPassReverse/http://localhost:8181/ 

Quindi andare al sito Web e wolaa :) Questo sta funzionando anche il protocollo HTTPS.

Problemi correlati