it-swarm-pt.tech

Redirecionamento do Apache para outra porta

Eu tenho lutado com isso há algum tempo e definitivamente estou fazendo algo errado. 

Eu tenho servidor Apache e um servidor JBoss na mesma máquina. Eu gostaria de redirecionar o tráfego para mydomain.com para JBoss localhost: 8080/example. O DNS está atualmente configurado para mydomain.com e irá diretamente para a porta 80 quando inserido no navegador. 

Minha pergunta é como eu redirecionar para uma porta diferente quando um determinado nome de domínio chega ao Apache (neste 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> 

ATUALIZADO com sugestões - ainda não encaminhando para a 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> 
123
agentcurry

Você deve deixar de fora o domínio http://example.com em ProxyPass e ProxyPassReverse e deixá-lo como /. Além disso, você precisa deixar o / no final de example/ para onde ele está redirecionando. Além disso, tive alguns problemas com http://example.com vs. http://www.example.com - apenas o www funcionou até eu fazer o ServerName www.example.com e o ServerAlias ​​example.com. Dê o seguinte uma chance.

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

Depois de fazer essas alterações, adicione os módulos necessários e reinicie o Apache

Sudo a2enmod proxy && Sudo a2enmod proxy_http && Sudo service Apache2 restart
177
2AMTech

Eu resolvi esse problema com o seguinte código:

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>

Eu também usei:

a2enmod proxy_http
24
Renan Vizza

Eu queria fazer exatamente isso para poder acessar o Jenkins a partir do domínio raiz. 

Eu descobri que precisava desativar o site padrão para que isso funcionasse. Aqui está exatamente o que eu fiz.

$ Sudo vi /etc/Apache2/sites-available/jenkins

E insira isso no arquivo:

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

Em seguida, você precisa ativar/desativar os sites apropriados:

$ Sudo a2ensite jenkins
$ Sudo a2dissite default
$ Sudo service Apache2 reload

Espero que ajude alguém.

8
Louth

Descobri isso por tentativa e erro. Se sua configuração especificar um ServerName, sua diretiva VirtualHost precisará fazer o mesmo. No exemplo a seguir, awesome.example.com e amazing.example.com seriam encaminhados para algum serviço local em execução na 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>

Eu sei que isso não responde exatamente a pergunta, mas eu estou colocando aqui porque este é o resultado de pesquisa para o encaminhamento de porta do Apache. Então eu acho que vai ajudar alguém um dia.

4
Ethan B Martin

Você precisa ter certeza de que o proxy está habilitado no servidor. Você pode fazer isso usando os seguintes comandos:

  a2enmod proxy
  a2enmod proxy_http

  service Apache2 restart
4
Aswin Mohanan

Esta pode ser uma questão antiga, mas aqui está o que eu fiz:

Em um arquivo .conf carregado pelo Apache:

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

Explicação: Ouça todas as solicitações para a porta 80 da máquina local. Se eu solicitei "http://something.com/somethingorother", encaminhe essa solicitação para "http://localhost:8080/somethingorother". Isso deve funcionar para um visitante externo porque, de acordo com os documentos, ele mapeia a solicitação remota para o espaço do servidor local.

Estou executando o Apache 2.4.6-2ubuntu2.2, então não tenho certeza de como o "-2ubuntu2.2" afeta a aplicabilidade mais ampla desta resposta.

Depois de fazer essas alterações, adicione os módulos necessários e reinicie o Apache

Sudo a2enmod proxy && Sudo a2enmod proxy_http && Sudo service Apache2 restart
3

Se você não tem que usar um proxy para o JBoss e mydomain.com:8080 pode ser "exposto" para o mundo, então eu faria isso.

<VirtualHost *:80>
  ServerName mydomain.com
  Redirect 301 / http://mydomain.com:8080/
</VirtualHost>
2
Michael Rice

Basta usar um proxy reverso na sua configuração do Apache (diretamente):

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

Veja aqui a documentação do Apache de como usar o mod

1
Julian Dehne

O Apache suporta hosts virtuais baseados em nome e baseados em IP. Parece que você está usando ambos, o que provavelmente não é o que você precisa.

Eu acho que você está realmente tentando configurar hospedagem virtual baseada em nome , e para isso você não precisa especificar o endereço IP.

Tente usar o <VirtualHost *: 80> para ligar a todos os endereços IP, a menos que você realmente queira hospedagem virtual baseada em IP . Esse pode ser o caso se o servidor tiver vários endereços IP e você quiser servir sites diferentes em endereços diferentes. A configuração mais comum é (eu diria) hosts virtuais baseados em nomes.

0
Martin Vilcans

Isso está funcionando no ISPConfig também. Na lista de sites dentro de um domínio, clique na guia Opções, adicione estas linhas:;

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

Então vá para o site e wolaa :) Isso também funciona com o protocolo HTTPS.

0
kodmanyagha

Você precisa de 2 coisas:

  1. Adicione um ServerAlias www.mydomain.com à sua configuração
  2. mude seu proxypass para ProxyPassMatch ^(.*)$ http://localhost:8080/example$1, para evitar que o mod_dir e as barras finais interfiram.
0
Jon Lin

Todos são excelentes insights para acessar portas através de nomes de domínio em servidores virtuais. Não esqueça, no entanto, para habilitar servidores virtuais; isso pode ser comentado:

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

Nós rodamos o WSGI com um servidor Apache no domínio sxxxx.com e um servidor golang rodando na porta 6800. Alguns firewalls parecem bloquear nomes de domínio com portas. Esta foi a nossa solução:

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

Meu Apache ouve duas portas diferentes 

Listen 8080
Listen 80  

Eu uso o 80 quando eu quero um URL transparente e não colocar a porta após o URL Útil para o google services que não permitirá url local? 

Mas eu uso o 8080 para desenvolvimento interno, onde eu uso a porta como uma referência para um "ambiente de desenvolvimento"

0
Miguel