리버스 프록시에서 오류 429 발생

안녕하세요, 제 Discourse는 리버스 프록시(NPM)로 실행되고 있습니다.

Discourse가 x-forwarded 필드를 지원하지 않아서, 사용자가 등록하는 IP 등을 확인하려고 할 때마다 항상 리버스 프록시의 IP 주소가 표시됩니다.

Discourse에서 요청을 스니핑해 보니 X-forwarded 헤더는 존재하는데, access.log에는 IP가 리버스 프록시로 표시됩니다.

Discourse용 nginx 설정 파일(NPM의 nginx가 아닌) 또는 설정 템플릿을 변경해야 하는지 내부적으로 확인해 보았습니다.

이 부분에 대해 도움을 주실 수 있으신가요? Discourse가 web.ratelimit 템플릿을 활성화하여 429 오류를 계속 보내고 있기 때문입니다.

:frowning:
도움 주셔서 감사합니다.

Set up Discourse on a server with existing Apache sites 에서 리버스 프록시 IP에 대한 내부 nginx를 구성하는 방법의 예를 참조하세요.

나도 이 문제로 고충을 겪고 있습니다.

Apache 2.4 vHost를 사용하는 Debian 서버를 운영 중이며, 이 중 하나의 vHost가 Discourse Docker 컨테이너입니다. Apache에는 mod_remoteip가 활성화되어 있습니다(mod_extract_forwarded는 없었으며), 하지만 설정 옵션은 없습니다. vHost 설정은 꽤 단순합니다:

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

8083은 Discourse Docker 컨테이너의 노출된 HTTP 포트입니다.

대략 이 정도입니다.

Apache access.log로 생성된 통계에서 다른 방문자(IP 기준)를 볼 수 있으며, 더 중요한 것은 사용자들의 마지막 IP도 서로 다르게 보입니다(이것은 저에게 간단한 확인이었습니다). 따라서 방문자의 IP 주소가 Apache 프록시를 통해 Discourse로 노출되는 것 같습니다. 며칠 전에 활성화한 mod_remoteip를 켜기 전에도 이미 이런 상태였습니다.

어쨌든, 다시 문제가 생겼습니다. 크라쿠프(폴란드)의 IPv4 주소에서 크롤러 또는 DoS 공격이 진행 중입니다. 많은 수의 429 에러를 생성하고 있습니다. 저에게는 괜찮지만, 다른 모든 방문자들도 이 에러를 받고 있습니다.

그렇다면 연결 제한에 도달하면 모든 사람이 에러를 받는 건가요? 아니면 IP별로 적용되는 건가요?

제 설정에서 누락된 것이 있거나 개선/조정할 수 있는 부분이 있을까요? 몇 주 전에도 Claudebot으로 인해 문제가 있었고, 며칠 전에도 마찬가지였기 때문에, 아마도 제한을 조금 높여야 할 것 같습니다.

감사합니다.
Roi 드림

원격 IP 주소가 Discourse에 전달되도록 설정을 추가했나요, 아니면 모든 사용자가 프록시를 통해 접속하는 것처럼 보이나요?

x-forwarded-for를 검색해 보세요

음… :see_no_evil: Nginx (Discourse) 부분을 잊어버렸네요. :see_no_evil: 감사합니다! :slight_smile:

app.yml을 수정하고 컨테이너를 재빌드했습니다. 컨테이너가 다시 올라온 직후 봇이 거의 즉시 복구되었습니다. 아직까지 429 에러는 확인되지 않습니다. “일반” 사용자들에게도 이렇게 유지되기를 바랍니다.

그게 바로 문제인 것 같네요… 사용자 관리자 페이지를 확인하면 항상 서로 다른 “마지막 IP” 항목들이 보였습니다. 즉, mod_remoteip나 Nginx 설정 변경 없이도 Discourse가 사용자의 실제 IP를 확인한 것입니다. :man_shrugging:

어쨌든, Nginx 설정 변경이 이 문제의 해결책이 될지 궁금합니다! :slight_smile: