# discourse/docker에서 Nginx 구성을 직접 수정하는 방법은 무엇인가요?

**URL:** https://meta.discourse.org/t/how-can-i-modify-the-nginx-configuration-directly-within-discourse-docker/406863
**Category:** Self-hosting
**Tags:** nginx
**Created:** [7월 5, 2026, 8:51오전 UTC](https://meta.discourse.org/t/how-can-i-modify-the-nginx-configuration-directly-within-discourse-docker/406863 "2026-07-05T08:51:52Z")
**Posts on this page:** 1
**Showing post:** 2

<div class="post-metadata">

### Author: ![Ethsim2](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ethsim2/32/522255_2.png) [@Ethsim2](https://meta.discourse.org/u/Ethsim2)
#### Post date: [7월 5, 2026, 9:42오전 UTC](https://meta.discourse.org/t/how-can-i-modify-the-nginx-configuration-directly-within-discourse-docker/406863/2 "2026-07-05T09:42:50Z")

</div>

아마도 다음과 같이 **설정만** 하고 싶지는 않을 것입니다:

```nginx
set_real_ip_from 127.0.0.1;
real_ip_header proxy_protocol;

```

이 설정은 다음 두 가지 조건이 **모두** 참일 때만 정확합니다:

1. HAProxy가 실제로 Discourse 컨테이너에 PROXY 프로토콜을 전송하고 있는 경우.
2. Discourse 컨테이너 내부의 Nginx가 HAProxy를 `127.0.0.1`로 인식하는 경우.

많은 HAProxy → Discourse Docker 환경에서는 PROXY 프로토콜 대신 `X-Forwarded-For`를 사용하는 것이 더 단순하고 일반적인 방법입니다.

HAProxy에서 전달된 IP 헤더가 전송되도록 확인하십시오:

```haproxy
defaults
    mode http
    option httplog
    option forwardfor

```

또는 백엔드 설정에서:

```haproxy
backend be_discourse
    option forwardfor
    server app 127.0.0.1:8080 check

```

그런 다음 Discourse 컨테이너 설정에서 `app.yml`을 통해 Nginx의 real-IP 변경 사항을 유지하도록 하십시오. 실행 중인 컨테이너 내부의 파일을 직접 편집하지 마십시오. 재빌드 시 변경 사항이 사라지기 때문입니다.

기존 `run:` 섹션 아래에 `/var/discourse/containers/app.yml`에 다음과 같은 내용을 추가하십시오:

```yml
run:
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: "types {"
      to: |
        set_real_ip_from 127.0.0.1;
        # HAProxy가 연결하는 실제 Docker 브리지/네트워크 범위로 조정하십시오
        set_real_ip_from 172.17.0.0/16;
        real_ip_header X-Forwarded-For;
        real_ip_recursive on;
        types {

```

그런 다음 재빌드하십시오:

```bash
cd /var/discourse
./launcher rebuild app

```

`set_real_ip_from`을 조정하여 HAProxy가 Discourse 컨테이너 내부의 Nginx에 연결할 때 Nginx가 인식하는 실제 소스 IP/범위와 일치하도록 해야 할 수 있습니다. Docker의 경우, 이는 `127.0.0.1`이 아닐 수 있으며 `172.17.0.1`과 같은 Docker 브리지 주소나 사용자 정의 Docker 네트워크 범위일 수 있습니다.

PROXY 프로토콜을 사용해야 하는 특별한 이유가 있다면, HAProxy가 이를 명시적으로 전송해야 합니다:

```haproxy
backend be_discourse
    server app 127.0.0.1:8080 check send-proxy

```

그리고 Nginx는 단순히 `real_ip_header proxy_protocol`을 읽는 것이 아니라 `proxy_protocol`로 리스닝해야 합니다:

```yml
run:
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: "listen 80;"
      to: "listen 80 proxy_protocol;"

  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: "types {"
      to: |
        set_real_ip_from 127.0.0.1;
        set_real_ip_from 172.17.0.0/16;
        real_ip_header proxy_protocol;
        types {

```

중요한 수정 사항은 다음과 같습니다: **`real_ip_header proxy_protocol`만으로는 불완전합니다**. Nginx에는 `listen 80 proxy_protocol;`도 필요하고, HAProxy에는 `send-proxy`가 필요합니다. 그렇지 않다면, HAProxy HTTP 모드 설정에서 일반적으로 사용되는 `X-Forwarded-For`를 사용하십시오. HAProxy에서 `option forwardfor`는 `X-Forwarded-For` 클라이언트 IP 헤더를 추가하는 표준 방법입니다. Nginx의 PROXY 프로토콜을 사용할 경우, `real_ip_header proxy_protocol`이 작동하려면 `listen` 지시문에 `proxy_protocol`이 포함되어야 합니다.

즉, 요약하면 다음과 같습니다:

- PROXY 프로토콜을 사용해야 할 특별한 이유가 없는 한 `X-Forwarded-For`를 사용하십시오.
- 두 모드를 혼합하지 마십시오.
- HAProxy가 `send-proxy`를 사용하지 않는 경우, `real_ip_header proxy_protocol`은 작동하지 않습니다.
- Discourse Docker를 사용하는 경우, 실행 중인 컨테이너 내부가 아닌 `app.yml`에서 변경 사항을 수행하십시오.

---

_[View the full topic](https://meta.discourse.org/t/how-can-i-modify-the-nginx-configuration-directly-within-discourse-docker/406863)._
