Olá, meu Discourse está rodando atrás de um proxy reverso (NPM).
O Discourse não suporta o campo x-forwarded e, por isso, sempre mostra o endereço IP do meu proxy reverso quando, por exemplo, verificamos de qual IP o usuário está se registrando…
Fiz um sniffing da requisição no Discourse e o X-forwarded está presente, mas no access.log a visualização do IP é a do proxy reverso.
Pelo que vi na internet, é necessário alterar o modelo de configuração ou o arquivo de configuração do nginx para o Discourse (não o nginx do NPM).
Pode me ajudar com isso? Porque o Discourse ativou o modelo web.ratelimit e está enviando muitos erros 429.
Tenho um servidor Debian com Apache 2.4 vHosts e um desses vHosts é o contêiner Docker do Discourse. No Apache, o mod_remoteip está ativado (não havia mod_extract_forwarded), mas sem nenhuma opção de configuração. A configuração do vHost é bem simples:
RequestHeader set X-Forwarded-Proto "https"
ProxyPreserveHost On
ProxyRequests Off
ProxyPass /.well-known !
ProxyPass / http://localhost:8083/
ProxyPassReverse / http://localhost:8083/
8083 é a porta http exposta do contêiner Docker do Discourse.
É basicamente isso.
Vejo os diferentes visitantes (por IP) nas estatísticas criadas com o Apache access.log e, mais importante, também vejo diferentes últimos IPs para os usuários (esta foi uma verificação simples para mim). Portanto, parece que os endereços IP dos visitantes estão sendo expostos através do proxy Apache para o Discourse. Isso já acontecia sem o mod_remoteip ativado, que eu só ativei há alguns dias.
De qualquer forma, estou tendo problemas novamente agora. Algum crawler ou ataque DoS está rodando em nosso servidor com um IPv4 de Cracóvia, Polônia. Ele está gerando muitos erros 429. Isso é aceitável para mim, mas todos os outros visitantes também recebem esses erros.
É também o caso? Então, quando o limite de conexão é atingido, todos recebem um erro? Ou por IP?
Está faltando algo na minha configuração ou posso melhorá-la/ajustá-la? Tivemos problemas com o Claudebot algumas semanas e também alguns dias atrás, então talvez o limite precise ser aumentado um pouco.
Eu apenas editei o app.yml e executei um rebuild no container. O bot voltou quase instantaneamente após o container subir novamente. Ainda não vejo nenhum erro 429. Espero que continue assim para usuários “normais”.
Essa é a questão… Quando verifico a página de administração dos usuários, sempre vi entradas diferentes de “último IP”. Então, de alguma forma, o Discourse viu os IPs reais dos usuários, mesmo sem o mod_remoteip e também sem a alteração da configuração do Nginx.
De qualquer forma, estou curioso para ver se a alteração da configuração do Nginx trouxe a solução para este problema!