Cenário
Eu tenho um subdomínio de 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 site com uma entrada DNS CNAME apontando sub2.dom2.com
e sub3.dom2.com
para o mesmo IP (novamente, fictício), 99.88.77.66.55
.
Em 99.88.77.66.55
, tenho uma LAN por trás do meu firewall. Nesta LAN, tenho três servidores:
- Um servidor da Web com o FQDN local de
www.local.lan
at 192.168.1.3:80
- Um servidor de aplicativos com FDQN local de
app.local.lan
at 192.168.1.4:8069
- Um servidor de arquivos com o FQDN local de
fs.local.lan
at 192.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, eu quero adicionar um servidor proxy reverso para executar dentro de uma cadeia no sistema mencionado acima. Solicitações da WAN precisam ser direcionadas para o servidor apropriado com base no nome do host fornecido no cabeçalho HTTP.
Considerações
-
Standard Port Fordwarding: Atualmente, acesso esses servidores por meio do simples encaminhamento de porta no roteador LAN. Em geral, essa é uma solução aceitável, no entanto, quando surge a necessidade de causar problemas na rede remotamente, torna-se um desafio manter os relacionamentos diretos entre as portas WAN e LAN. Além disso, para usuários que não sejam eu mesmo, que precisam acessar esses servidores, é mais fácil para eles não terem que se lembrar dos números de porta.
-
Aplicativo DD-WRT: Como meu roteador está executando o firmware DD-WRT com uma unidade USB de 4 GiB montada, examinei a instalação e a execução de um servidor proxy reverso no roteador, usando Pound ou algo similar. Eu fiz uma extensa pesquisa na web procurando maneiras para 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 ser 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 pressupõe que eu já saiba tudo o que há para saber sobre o Apache ou o Nginx. Eu estou começando sem nenhuma experiência anterior com qualquer uma das plataformas, e estou disposto a aprender e experimentar para fazer as coisas funcionarem. Os guias e tutoriais mostram principalmente apenas as seções
server
do código necessário. Além disso, são feitas suposições que você já conhece as dependências necessárias e como implementá-las.
Etapas que já tomei
Nginx: Amostra do meu arquivo nginx.conf. É apenas uma porção. Existem outras seções server
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;
}
}
}
Isso, no entanto; retorna um erro 502 - Bad Gateway ao tentar se conectar.
Apache: Importante notar que eu estava tentando isso com o Apache22. Meu último arquivo httpd.conf é 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 que apenas um dos muitos módulos mod_proxy
carregados, o módulo mod_proxy_html
. A razão é que, depois de uma extensa pesquisa, só consegui encontrar um link de trabalho para esse módulo específico.
Pound: tive problemas ao tentar instalar o ipkg no DD-WRT. Isso pode ser devido à arquitetura atheos do meu roteador particular. Eu também encontrei muitos links quebrados como mencionado anteriormente.
Como você pode ajudar
Ok, então com a explicação prolixa do caminho, aqui está o que eu estou procurando da comunidade.
Tendo em vista que cheguei mais perto usando o Nginx, como configurar corretamente meu arquivo nginx.conf
para fazer o que estou tentando fazer? O que está causando o erro 502 e como corrigi-lo?