El proxy inverso basado en el encabezado http en Nginx devuelve 502 Bad Gateway

El proxy inverso basado en el encabezado http en Nginx devuelve 502 Bad Gateway

Tengo un subdominio DDNS sub1.dom1.comcon IP estática de (IP ficticia) 99.88.77.66.55.

Tengo un dominio, dom2.comalojado fuera del sitio con una entrada DNS CNAME que apunta sub2.dom2.comy sub3.dom2.coma 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:

  1. Un servidor web con FQDN local de www.local.lanal menos192.168.1.3:80
  2. Un servidor de aplicaciones con FDQN local de app.local.lanal menos192.168.1.4:8069
  3. Un servidor de archivos con FQDN local de fs.local.lanal192.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).

Diagrama de Red

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

  1. 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.
  2. 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.
  3. 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 serversecciones 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 serversecciones 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_proxycargué uno de los muchos módulos requeridos: el mod_proxy_htmlmó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.confarchivo 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_namesiempre 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_passno debe terminar con a /, excepto que sea especialmente necesario.

Lo que he visto 502 Bad gatewaymá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.logpistas?

información relacionada