
Eu tenho um subdomínio DDNS sub1.dom1.com
com IP estático de (IP fictício) 99.88.77.66.55
.
Eu tenho um domínio dom2.com
hospedado fora do local com uma entrada DNS CNAME apontando sub2.dom2.com
para sub3.dom2.com
o mesmo IP (novamente, fictício) 99.88.77.66.55
.
Em 99.88.77.66.55
, tenho uma LAN atrás do meu firewall. Nesta LAN, tenho três servidores:
- Um servidor web com FQDN local de
www.local.lan
pelo menos192.168.1.3:80
- Um servidor de aplicativos com FDQN local de
app.local.lan
pelo menos192.168.1.4:8069
- Um servidor de arquivos com FQDN local de
fs.local.lan
pelo menos192.168.1.5:2430
Veja o diagrama abaixo para esclarecimentos. Todos os três servidores estão rodando como servidores virtuais dentro de jails no mesmo sistema freeBSD (freeNAS).
O que eu quero realizar
De acordo com o diagrama acima, desejo adicionar um servidor proxy reverso para ser executado em uma prisão no sistema mencionado acima. As solicitações da WAN precisam ser direcionadas ao servidor apropriado com base no nome do host fornecido no cabeçalho HTTP.
Considerações
- Fordwarding de porta padrão:Atualmente, acesso esses servidores através do simples encaminhamento de porta no roteador LAN. Esta é geralmente uma solução aceitável, no entanto, quando surge a necessidade de causar problemas na rede remotamente, torna-se um desafio manter relações diretas de porta WAN para LAN. Além disso, para outros usuários além de mim, que precisam acessar esses servidores, é mais fácil para eles não precisarem se lembrar dos números das portas.
- Aplicação DD-WRT:Como meu roteador está executando firmware DD-WRT com uma unidade USB de 4 GiB montada, procurei instalar e executar um servidor proxy reverso no roteador, usando Pound ou algo semelhante. Fiz uma extensa pesquisa na web procurando maneiras de fazer isso. O problema que encontro é que a maioria dos guias ou tutoriais são antigos e contêm links quebrados para os recursos necessários.
- Apache/Nginx:Qualquer um desses dois parece uma solução viável. No entanto, como as soluções DD-WRT que pesquisei, muitos dos guias fornecem links quebrados ou nenhum link para os recursos necessários. O outro obstáculo diante de mim com as opções Apache ou Nginx é que a maioria dos guias e tutoriais presumem que eu já sei tudo o que há para saber sobre Apache ou Nginx. Estou começando sem nenhuma experiência anterior com nenhuma das plataformas e estou disposto a aprender e experimentar para fazer as coisas funcionarem. Os guias e tutoriais mostram principalmente apenas as
server
seções do código necessário. Além disso, são feitas suposições de que você já conhece as dependências necessárias e como implementá-las.
Passos que já dei
Nginx: Amostra do meu arquivo nginx.conf. É apenas uma porção. Existem outras server
seções para os outros servidores com os detalhes pertinentes alterados.
#nginx.conf
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name sub1.dom1.com #I've also tried www.lan.lan, here.
access_log off;
error_log off;
location / {
proxy_pass http://192.168.1.3:80/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_ass_x_forwarded_for;
proxy_max_temp_file_size 0;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_ready_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
}
Isto, no entanto; retorna um erro 502 - Bad Gateway ao tentar se conectar.
Apache: Importante notar que eu estava tentando isso com o Apache22. Meu arquivo httpd.conf mais recente é assim:
LoadFile /usr/local/bin/libxml2.so
LoadModule proxy_html_module libexec/apache22/mod_proxy_html.so
LoadModule xml2enc_module libexec/apache22/mod_xl2enc.so
<VirtualHost *:80>
ServerName sub1.dom1.com
ServerAlias sub1.dom.com
ProxyPass / http://192.168.1.3:80/
ProxyPassReverse / http://192.168.1.3:80
</VirtualHost>
<VirtualHost *:80>
ServerName sub2.dom2.com
ServerAlias sub2.dom2.com
ProxyPass / http://192.168.1.4:8069/
ProxyPassReverse / http://192.168.1.4:8069
</VirtualHost>
<VirtualHost *:80>
ServerName sub3.dom2.com
ServerAlias sub3.dom2.com
ProxyPass / http://192.168.1.5:2430/
ProxyPass / http://192.168.1.5:2430
</VirtualHost
Quando tento iniciar o Apache22, usando:
service apache22 start
Eu recebo o seguinte:
Invalid command 'ProxyPass', perhaps misspelled or defined by a module not included in the server configuration
Depois de muita pesquisa, sei que isso provavelmente é causado pelo fato de eu mod_proxy
ter carregado apenas um dos muitos módulos necessários, o mod_proxy_html
módulo. A razão é que, após extensa pesquisa, só consegui encontrar um link funcional para este módulo específico.
Libra: Tive problemas ao tentar instalar o ipkg no DD-WRT. Isso pode ser devido à arquitetura atheos do meu roteador específico. Também encontrei muitos links quebrados, conforme mencionado anteriormente.
Ok, então, com a explicação prolixa fora do caminho, aqui está o que estou procurando na comunidade.
Dado que cheguei mais perto de usar o Nginx, como posso configurar corretamente meu nginx.conf
arquivo para fazer o que estou tentando fazer? O que está causando o erro 502 e como posso corrigi-lo?
Responder1
Para a solução nginx:
server_name
deve ser sempre o nome do host solicitado (no cabeçalho http).
- Você poderia colocar
*
aqui para disponibilizar o conteúdo em qualquer domínio/host.
proxy_pass
não deve terminar com /
, exceto quando especialmente necessário.
Já vi 502 Bad gateway
mais comumente quando o nginx não consegue se conectar ao upsteam ( proxy_pass
).
- Você verificou sua política de firewall para DMZ->LAN?
- Você verificou as
error.log
dicas?