Apache reindirizza su un’altra porta

Ho lottato con questo per un po ‘di tempo e sto sicuramente facendo qualcosa di sbagliato.

Ho un server Apache e un server JBoss sulla stessa macchina. Mi piacerebbe redirect 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 faccio a redirect su una porta diversa quando un determinato nome di dominio viene in Apache (in questo caso, “mydomain.com”)?

 ProxyPreserveHost On ProxyRequests Off ServerName mydomain.com ProxyPass http://mydomain.com http://localhost:8080/example ProxyPassReverse http://mydomain.com http://localhost:8080/example  

AGGIORNATO w / Suggerimenti – Ancora non inoltro alla porta 8080

  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  

    Dovresti escludere il dominio http://example.com in ProxyPass e ProxyPassReverse e lasciarlo come / . Inoltre, è necessario lasciare la / alla fine example/ a cui si sta reindirizzando. Inoltre, ho avuto qualche problema con http://example.com vs http://www.example.com – solo il www ha funzionato fino a quando ho creato il ServerName http://www.example.com e il Server.com esempio.com. Dare il seguente un andare.

      ProxyPreserveHost On ProxyRequests Off ServerName www.example.com ServerAlias example.com ProxyPass / http://localhost:8080/example/ ProxyPassReverse / http://localhost:8080/example/  

    Dopo aver apportato queste modifiche, aggiungi i moduli necessari e riavvia apache

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

    Ho risolto questo problema con il seguente codice:

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

    Ho anche usato:

     a2enmod proxy_http 

    Volevo fare esattamente questo in modo da poter accedere a Jenkins dal dominio principale.

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

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

    E inserisci questo nel file:

      ProxyPreserveHost On ProxyRequests Off ServerName mydomain.com ServerAlias mydomain ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/  Order deny,allow Allow from all   

    Successivamente è necessario abilitare / disabilitare i siti appropriati:

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

    Spero che aiuti qualcuno.

    Trovato per prove ed errori. Se la tua configurazione specifica un ServerName, allora la tua direttiva VirtualHost dovrà fare lo stesso. Nell’esempio seguente, awesome.example.com e amazing.example.com verranno entrambi inoltrati ad un servizio locale in esecuzione sulla porta 4567.

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

    So che questo non risponde esattamente alla domanda, ma lo sto mettendo qui perché questo è il risultato di ricerca in alto per il port forwarding di Apache. Quindi immagino che un giorno possa aiutare qualcuno.

    Devi assicurarti che il proxy sia abilitato sul server. Puoi farlo usando i seguenti comandi:

      a2enmod proxy a2enmod proxy_http service apache2 restart 

    Se non devi usare un proxy per JBoss e mydomain.com:8080 può essere “esposto” al mondo, allora lo farei.

      ServerName mydomain.com Redirect 301 / http://mydomain.com:8080/  

    Questa potrebbe essere una vecchia domanda, ma ecco cosa ho fatto:

    In un file .conf caricato da apache:

      ServerName something.com ProxyPass / http://localhost:8080/  

    Spiegazione: Ascolta tutte le richieste sulla 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 usando 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, aggiungi i moduli necessari e riavvia apache

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

    Basta usare un proxy inverso nella configurazione di apache (direttamente):

     ProxyPass /foo http://foo.example.com/bar ProxyPassReverse /foo http://foo.example.com/bar 

    Guarda qui per la documentazione di apache su come usare il mod

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

    Penso che tu stia effettivamente cercando di creare un hosting virtuale basato sul nome , e per questo non hai bisogno di specificare l’indirizzo IP.

    Prova per collegarsi a tutti gli indirizzi IP, a meno che tu non voglia realmente un hosting virtuale basato su ip . 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.

    Hai bisogno di 2 cose:

    1. Aggiungi un ServerAlias www.mydomain.com alla tua configurazione
    2. cambia il tuo proxy in ProxyPassMatch ^(.*)$ http://localhost:8080/example$1 , per mantenere possibilmente mod_dir e le barre finali da interfering.

    Tutti sono eccellenti informazioni sull’accesso alle porte tramite nomi di dominio su server virtuali. Non dimenticare, comunque, di abilitare i server virtuali; questo potrebbe essere commentato:

     NameVirtualHost *:80  allow from all  

    Eseguiamo 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 le porte. Questa è stata la nostra soluzione:

      ProxyPreserveHost On ProxyRequests Off ServerName wsgi.sxxxx.com DocumentRoot "/home/dxxxx/www"  Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all  ScriptAlias /py/ "/home/dxxxx/www/py/" WSGIScriptAlias /wsgiprog /home/dxxxx/www/wsgiprog/Form/Start.wsgi   ProxyPreserveHost On ProxyRequests Off ServerName sxxxx.com ServerAlias www.sxxxx.com ProxyPass / http://localhost:6800/ ProxyPassReverse / http://localhost:6800/  

    Il mio apache ascolta 2 porte diverse,

     Listen 8080 Listen 80 

    Uso 80 quando desidero un URL trasparente e non inserisco la porta dopo l’URL utile per i servizi Google che non consentono l’URL locale?

    Ma io uso l’8080 per lo sviluppo interno dove uso la porta come riferimento per un “ambiente di sviluppo”

    Funziona anche in ISPConfig. 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/ 

    Poi vai al sito web e wolaa 🙂 Funziona anche con il protocollo HTTPS.