
Tengo un subdominio DDNS sub1.dom1.com
con IP estática de (IP ficticia) 99.88.77.66.55
.
Tengo un dominio, dom2.com
alojado fuera del sitio con una entrada DNS CNAME que apunta sub2.dom2.com
y sub3.dom2.com
a la misma IP (nuevamente, ficticia), 99.88.77.66.55
.
En 99.88.77.66.55
, tengo una LAN detrás de mi firewall. En esta LAN, tengo tres servidores:
- Un servidor web con FQDN local de
www.local.lan
al menos192.168.1.3:80
- Un servidor de aplicaciones con FDQN local de
app.local.lan
al menos192.168.1.4:8069
- Un servidor de archivos con FQDN local de
fs.local.lan
al192.168.1.5:2430
Consulte el diagrama a continuación para obtener más aclaraciones. Los tres servidores se ejecutan como servidores virtuales dentro de cárceles en el mismo sistema freeBSD (freeNAS).
Lo que quiero lograr
Según el diagrama anterior, quiero agregar un servidor proxy inverso para ejecutarlo dentro de una cárcel en el sistema mencionado anteriormente. Las solicitudes de la WAN deben dirigirse al servidor apropiado según el nombre del host proporcionado en el encabezado HTTP.
Consideraciones
- Reenvío de puertos estándar:Actualmente, accedo a estos servidores mediante un simple reenvío de puertos en el enrutador LAN. Esta suele ser una solución aceptable; sin embargo, cuando surge la necesidad de perturbar la red de forma remota, se convierte en un desafío mantener relaciones directas entre los puertos WAN y LAN. Además, para otros usuarios además de mí, que necesitan acceder a estos servidores, es más fácil para ellos no tener que recordar los números de puerto.
- Aplicación DD-WRT:Dado que mi enrutador ejecuta firmware DD-WRT con una unidad USB de 4 GiB montada, busqué instalar y ejecutar un servidor proxy inverso en el enrutador, usando Pound o algo similar. He realizado una búsqueda exhaustiva en la web buscando formas de lograrlo. El problema que encuentro es que la mayoría de las guías o tutoriales son antiguos y contienen enlaces rotos a los recursos necesarios.
- Apache/Nginx:Cualquiera de estas dos parece una solución viable. Sin embargo, al igual que las soluciones DD-WRT que investigué, muchas de las guías proporcionan enlaces rotos o ningún enlace a los recursos necesarios. El otro obstáculo que tengo ante mí con las opciones de Apache o Nginx es que la mayoría de las guías y tutoriales asumen que ya sé todo lo que hay que saber sobre Apache o Nginx. Estoy empezando sin experiencia previa con ninguna de las plataformas y estoy dispuesto a aprender y experimentar para que todo funcione. La mayoría de las guías y tutoriales solo muestran las
server
secciones del código requerido. Además, se supone que ya conoce las dependencias necesarias y cómo implementarlas.
Pasos que ya he tomado
Nginx: Muestra de mi archivo nginx.conf. Es sólo una porción. Hay otras server
secciones para los otros servidores con los detalles pertinentes cambiados.
#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;
}
}
}
Esto, sin embargo; devuelve un error 502 - Puerta de enlace incorrecta al intentar conectarse.
Apache: Es importante tener en cuenta que estaba intentando esto con Apache22. Mi último archivo httpd.conf se ve así:
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
Cuando intento iniciar Apache22, usando:
service apache22 start
Obtengo lo siguiente:
Invalid command 'ProxyPass', perhaps misspelled or defined by a module not included in the server configuration
Después de mucha investigación, sé que lo más probable es que esto se deba al hecho de que solo mod_proxy
cargué uno de los muchos módulos requeridos: el mod_proxy_html
módulo. La razón es que después de una búsqueda exhaustiva, solo pude encontrar un enlace que funcione para este módulo específico.
Libra: Tuve problemas al intentar instalar ipkg en DD-WRT. Esto podría deberse a la arquitectura atheos de mi enrutador en particular. También encontré muchos enlaces rotos como mencioné anteriormente.
Bien, dejando de lado la larga explicación, esto es lo que estoy buscando de la comunidad.
Dado que me he acercado más al uso de Nginx, ¿cómo puedo configurar correctamente mi nginx.conf
archivo para hacer lo que estoy intentando hacer? ¿Qué está causando el error 502 y cómo lo soluciono?
Respuesta1
Para la solución nginx:
server_name
siempre debe ser el nombre de host solicitado (en el encabezado http).
- Puede poner un
*
aquí para que el contenido esté disponible en cualquier dominio/host.
proxy_pass
no debe terminar con a /
, excepto que sea especialmente necesario.
Lo que he visto 502 Bad gateway
más comúnmente es cuando nginx no puede conectarse al upsteam ( proxy_pass
).
- ¿Revisó su política de firewall para DMZ->LAN?
- ¿Revisaste las
error.log
pistas?