리버스 프록시와 함께 Rate Limiting

レート制限에 사용되는 헤더가 무엇인지에 대해 질문이 있습니다. 맥락으로, 우리는 set_real_ip를 포함한 nginx.conf를 사용하고 있으며, 클라이언트의 실제 IP를 Some-Client-IP 헤더로 전송하는 프로바이더를 사용하고 있습니다.

  sendfile on;
set_real_ip_from ...;
set_real_ip_from ...;
set_real_ip_from ...;
set_real_ip_from ...;

real_ip_header Some-Client-IP;
real_ip_recursive on;

Some-Client-IP는 업스트림으로부터 받는 실제 사용자 IP입니다.

현재 conf.d의 nginx용 discourse.conf에는 기본 설정이 있습니다:

아마도 모든 라우트에 대해 일반적으로 적용되는 설정입니다.

    proxy_set_header Host $http_host;
    proxy_set_header X-Request-Start "t=${msec}";
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $thescheme;
    proxy_pass http://discourse;

Discourse는 레이트 제한에 대해 X-Forwarded-For를 참조하는지, 아니면 X-Real-IP를 참조하는지 궁금합니다. production.log에서 내 리버스 프록시 IP를 확인했기 때문에 X-Forwarded-For를 참조하는 것 같습니다. 올바른 해결책은 X-Forwarded-For도 $remote_addr를 참조하도록 변경하는 것인가요?

이 스레드에서 누군가가 해당 라인을 아예 삭제했다고 보입니다. Last IP shows Reverse Proxy IP address - #5 by schleifer

감사합니다.

app.yml에 해당 스탠자를 추가했나요? 이러한 설정은 컨테이너 내부의 NGINX에 있어야 합니다. 또한 https://meta.discourse.org/t/how-to-set-up-discourse-on-a-server-with-existing-apache-sites/30013도 참고하세요. 여기는 Apache에 대한 내용이지만, 리버스 프록시를 수행하는 도구가 무엇이든 app.yml에 들어가는 부분은 동일합니다.

해당 스탠스는 현재 컨테이너의 conf.d/discourse.conf 대신 nginx.conf에 있습니다.

app.yml 부분에 대해 다음을 의미하신 건가요?

run:
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: "types {"
      to: |
        set_real_ip_from 172.17.0.0/24;
        real_ip_header X-Forwarded-For;
        real_ip_recursive on;
        types {

컨테이너 외부에 HAProxy를 사용하지 않고, 대신 DNS 제공업체가为我们(우리)를 위해 일부 사전 처리를 수행하고 있습니다. 따라서 real_ip_header는 다른 헤더 값에 있으며, 실제로는 대체해야 할 IP 주소 목록이 있습니다.

실제로 X-Forwarded-For 목록도 확인하고 있는데, 이것이 잘못된 IP가 표시되는 원인인지 궁금합니다.

예를 들어, 프로덕션 로그에서 111.11.11.111은 확인되지만, 우리가 원하는 55.555.55.55(x-real-ip에 설정된 값)는 확인되지 않는 것 같습니다.

HTTP_X_FORWARDED_FOR	111.11.11.111, 22.22.22.222, 333.33.33.333, 55.555.55.55
HTTP_X_REAL_IP	55.555.55.55

그렇다면 권장 설정을 이에 맞게 조정해야 합니다.

또는 IP 주소나 속도 제한을 신경 쓰지 않는다면, 속도 제한 템플릿을 삭제할 수 있습니다.