리버스 프록시 X-Forwarded-For

최근 포럼을 훨씬 더 성능이 좋은 호스트로 이전했으며, 높은 가용성을 달성하기 위해 노력하고 있습니다.

리버스 프록시에서 Forward Proto와 For 헤더를 추가했지만, Discourse의 nginx 설정에서는 Proto만 인식했습니다.

server 블록 아래에 다음을 추가해야 했습니다:

set_real_ip_from loadbalancerip;
real_ip_header X-Forwarded-For;

이 내용을 추가하기 위한 Discourse 환경 변수가 있을까요?
아니면 app.yml에 추가할 수 있는 인수가 있을까요?

이것이 찾으시는 내용인 것 같습니다:

아니요, 이 가이드는 컨테이너와 호스트 사이에 공유되는 nginx 소켓을 설정하는 방법을 설명합니다.

재빌드 후 컨테이너의 nginx 설정에 다음을 선언적으로 포함하는 방법을 찾고 있습니다:

set_real_ip_from loadbalancerip;
real_ip_header X-Forwarded-For;

컨테이너의 내부 nginx에 이 내용을 추가하려는 건가요? 기본적으로 이미 추가되어 있어 불필요하다고 생각합니다:

이 기능이 작동하려면 이 줄이 필요합니다.
이것 없이 모든 요청은 여전히 로드 밸런서 IP로 보입니다.
제 Discourse가 429 오류로 중단되었기 때문에 알고 있습니다.

불분명한 경우를 대비하여 제 인프라 구조는 다음과 같습니다:
user > haproxy > discourse

물론 Discourse에는 nginx reverse proxy가 포함되어 있습니다.

haproxy에 포워딩 헤더를 포함했지만, Discourse 내부의 nginx가 forwarded for를 존중하지 않았습니다. 작동하려면 제 OP에 있는 2줄을 추가하고 컨테이너를 재시작해야 했습니다.

2-컨테이너 빌드를 사용 중이신가요?

nginx가 서버 블록에서 이러한 변수를 기본적으로 읽지 않기 때문에, 커스텀 로드 밸런서 IP를 위한 내장된 환경 변수는 없다고 생각합니다.

또한, 실행 중인 컨테이너 내부에서 nginx 설정을 수동으로 수정했다면, 다음 재빌드 시 그 변경 사항이 지워질 것입니다.

영구적으로 적용하고 재빌드 후에도 유지되려면 app.yml(또는 듀얼 컨테이너인 경우 web_only.yml)의 replace 명령을 사용해야 합니다. .yml 파일의 맨 아래 run: 섹션으로 스크롤하여 아래 블록을 추가하세요. 이 블록은 discourse 빌더가 server { 블록이 열린 후에 실제 IP 설정을 자동으로 주입하도록 지시합니다:

run:
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: /server.+{/
      to: |
        server {
          set_real_ip_from 192.168.1.100; ## 실제 로드 밸런서 IP/서브넷으로 대체하세요
          real_ip_header X-Forwarded-For;
          real_ip_recursive on;

(인덴테이션과 공백이 run 블록의 나머지 부분과 일치하는지, 그리고 yml 파일은 매우 엄격하므로 이를 꼭 확인하세요)