Problema Error 429 con proxy inverso

Hola, mi Discourse se ejecuta con un proxy inverso (NPM).

Discourse no soporta el campo x-forwarded y, por lo tanto, siempre me muestra la dirección IP de mi proxy inverso cuando, por ejemplo, buscamos desde qué IP se está registrando un usuario, etc.

He inspeccionado la solicitud en Discourse y el X-forwarder está presente, pero en access.log la IP visible es la del proxy inverso.

He visto en internet que es necesario cambiar la plantilla de configuración o el archivo de configuración de nginx para Discourse (no el nginx de NPM).

¿Me puedes ayudar con esto? Porque Discourse activa la plantilla web.rate_limit y envía muchos errores 429.

:frowning:
Gracias por tu ayuda.

Consulta Set up Discourse on a server with existing Apache sites para ver un ejemplo de cómo configurar el nginx interno para tu IP de proxy inverso.

1 me gusta

Yo también estoy teniendo problemas con esto.

Tengo un servidor Debian con Apache 2.4 vHosts y uno de estos vHosts es el contenedor Docker de Discourse. En Apache, mod_remoteip está habilitado (no había mod_extract_forwarded), pero sin ninguna opción de configuración. La configuración del vHost es bastante simple:

RequestHeader set X-Forwarded-Proto "https"
ProxyPreserveHost On
ProxyRequests Off
ProxyPass /.well-known !
ProxyPass / http://localhost:8083/
ProxyPassReverse / http://localhost:8083/

8083 es el puerto http expuesto del contenedor Docker de Discourse.

Eso es prácticamente todo.

Veo los diferentes visitantes (por IP) en las estadísticas creadas con el Apache access.log y, lo que es más importante, también veo diferentes últimas IPs para los usuarios (esta fue una comprobación sencilla para mí). Así que parece que las direcciones IP de los visitantes se exponen a través del proxy de Apache a Discourse. Esto ya ocurría sin tener activado mod_remoteip, que solo activé hace unos días.

De todos modos, estoy teniendo problemas de nuevo ahora. Algún rastreador o ataque DoS se está ejecutando en nuestro servidor con una IPv4 de Cracovia, Polonia. Está generando muchos errores 429. Eso está bien para mí, pero todos los demás visitantes también reciben estos errores.

¿Es también este el caso? ¿Así que cuando se alcanza el límite de conexión, todo el mundo recibe un error? ¿O por IP?

¿Falta algo en mi configuración o puedo mejorarla/ajustarla? Tuvimos problemas con Claudebot hace unas semanas y también hace unos días, así que tal vez el límite necesite ser un poco más alto.

Gracias y saludos,
Roi

¿Añadiste las cosas para ver que la dirección IP remota llega a Discourse o todos los usuarios parecen provenir del proxy?

Busca x-forwarded-for

Ehm… :see_no_evil: Olvidé la parte de Nginx (Discourse). :see_no_evil: ¡Gracias! :slight_smile:

Acabo de editar app.yml y ejecuté una reconstrucción en el contenedor. El bot regresó casi instantáneamente después de que el contenedor volvió a estar en línea. Aún no veo ningún error 429. Espero que siga así para los usuarios “normales”.

Esa es la cuestión… Cuando reviso la página de administración de los usuarios, siempre vi diferentes entradas de “última IP”. Así que de alguna manera Discourse vio las IPs reales de los usuarios, incluso sin mod_remoteip y también sin el cambio de configuración de Nginx. :man_shrugging:

De todos modos, ¡tengo curiosidad por ver si el cambio de configuración de Nginx trajo la solución a este problema! :slight_smile:

1 me gusta