レート制限에 사용되는 헤더가 무엇인지에 대해 질문이 있습니다. 맥락으로, 우리는 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
감사합니다.
pfaffman
(Jay Pfaffman)
11월 16, 2021, 9:25오후
2
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
pfaffman
(Jay Pfaffman)
11월 16, 2021, 11:57오후
4
그렇다면 권장 설정을 이에 맞게 조정해야 합니다.
또는 IP 주소나 속도 제한을 신경 쓰지 않는다면, 속도 제한 템플릿을 삭제할 수 있습니다.