
Estou usando o Apache para redirecionar um subdomínio para uma porta ( mod_proxy
, mod_proxy_http
, mod_proxy_ajp
) e tabelas IP para restringir o acesso direto à porta, exceto para mim e para o servidor local.
Minhas tabelas IP são assim:
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- !c-24-7-110-109.hsd1.ca.comcast.net anywhere tcp dpt:tproxy
ACCEPT tcp -- localhost anywhere tcp dpt:tproxy
DROP tcp -- !c-24-7-110-109.hsd1.ca.comcast.net anywhere tcp dpt:http-alt
DROP tcp -- !c-24-7-110-109.hsd1.ca.comcast.net anywhere tcp dpt:webmin
ACCEPT tcp -- localhost anywhere tcp dpt:webmin
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
O contexto que vou usar neste post é:
Sonatipo Nexus:nexus.example.com => example.com:8081
CI Jenkins:jenkins.example.com => example.com:8080
Webmin:webmin.example.com => example.com:10000
O que estou trabalhando agora não é acesso direto à porta, exceto para mim. Também quero que o sistema local seja capaz de acessar portas que é o que acredito ter agora. Estou usando mod_proxy_ajp
para Jenkins CI e Webmin e mod_proxy_http
para Sonatype Nexus.
Quando visito portos diretos, cada um desses serviços carrega perfeitamente. Quando peço a outra pessoa para carregar cada um, ela não consegue, então está funcionando.
Agora, porém, ao tentar acessar um dos subdomínios, recebo uma carga sem fim (loop infinito?)
Porém, quando executo um tracert no subdomínio, ele termina bem, então posso riscar o loop infinito.
Aqui está minha configuração de host virtual Sonatype Nexus apache:
<VirtualHost *:80>
ServerName nexus.majornoob.com
ServerAlias www.nexus.majornoob.com
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:8081/
ProxyPassReverse / http://localhost:8081/
ProxyPassReverseCookiePath / /
ErrorLog /var/www/majornoob/error-nexus.log
LogLevel warn
CustomLog /var/www/majornoob/access-nexus.log combined
</VirtualHost>
e aqui está meu Jenkins:
<VirtualHost *:80>
ServerName jenkins.majornoob.com
ServerAlias www.jenkins.majornoob.com
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / ajp://127.0.0.1:8080/
ProxyPassReverse / ajp://127.0.0.1:8080/
ProxyPassReverseCookiePath / /
ErrorLog /var/www/majornoob/error-jenkins.log
LogLevel warn
CustomLog /var/www/majornoob/access-jenkins.log combined
</VirtualHost>
Esses dois exemplos de hosts virtuais estão usando mod_proxy_ajp
e mod_proxy_http
respectivamente.
Alguém pode me ajudar a descobrir por que estou recebendo uma carga infinita?
Obrigado.
editar:Deixa pra lá no loop infinito. Depois de algum tempo, recebi um erro 503 Serviço indisponível.
Responder1
As regras do iptables são avaliadas em ordem, de cima para baixo, conforme impressas. O problema que você tem é que a conexão proxy é do localhost, o que corresponde a esta regra:
DROP tcp -- !c-24-7-110-109.hsd1.ca.comcast.net anywhere tcp dpt:tproxy
localhost
não é c-24-7-...
, então a conexão é interrompida. O módulo proxy eventualmente expira; se a regra fosse REJECT em vez de DROP, você receberia um erro muito mais rápido (porque seria negado explicitamente, em vez de a tentativa de conexão simplesmente desaparecer).
A solução é bastante simples: reordene as regras para que “aceite do localhost” antes de “negue de qualquer outro lugar”. (O roteamento IP corresponde ao mais específico, mas como os iptables são multifatoriais, isso não é necessariamente definido).
Geralmente, eu recomendo ter uma primeira regra que permita toda a comunicação do host local (por meio da interface de loopback, caso alguém tente algo estranho pela Ethernet); tente adicionar
iptables -I INPUT -i lo -s localhost -d localhost -j ACCEPT
para inserir ( -I
) no topo da lista.