Как получить IP-адрес пользователя после обновления коммита b4a3389

Этот коммит исправил ошибку конфигурации, на которую вы опирались, но также он мог позволять любому конечному пользователю подделать свой IP-адрес, задавая этот заголовок.

Если вы уверены, что больше ничего не может взаимодействовать с вашим контейнером, есть на самом деле более простой способ, не требующий использования сокета — я только что написал руководство о том, как это сделать.

Для вашей конфигурации @CLOUD_PHT вам следует добавить следующее в определение вашего контейнера (если раздел run уже существует, добавьте эти директивы в него, иначе добавьте раздел run):

run:
  - file:
      path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
      chmod: 644
      contents: |
        real_ip_header x-forwarded-for;
  - file:
      path: /etc/nginx/conf.d/outlets/server/set-real-ip-from-host.conf
      chmod: 644
      contents: |
        set_real_ip_from 172.17.0.1;

Возможно, вам также понадобится следующее:

  - file:
      # we need to turn on recursive since we'll have at least two entries; one from the host, one from CloudFlare
      path: /etc/nginx/conf.d/outlets/server/real-ip-recursive.conf
      chmod: 644
      contents: |
        real_ip_recursive on;

в зависимости от того, обрабатывает ли nginx, запущенный на вашем сервере, заголовок Cloudflare для определения реального IP-адреса конечного пользователя (это рекомендуется) или просто добавляет свой собственный сверху. Подробнее см. в https://meta.discourse.org/t/handling-the-chain-of-trust-of-the-end-users-real-ip/406372#p-2001772-more-than-one-proxy-7.


Другие читатели: имейте в виду, что эта директива

run:
  - file:
      path: /etc/nginx/conf.d/outlets/server/set-real-ip-from-host.conf
      chmod: 644
      contents: |
        set_real_ip_from 172.17.0.1;

не подходит для всех конфигураций. Делайте это только если все подключения к контейнеру Discourse с этого IP-адреса являются доверенными.

В частности, известная проблема с IPv6-конфигурациями заключается в том, что IPv6-подключения к серверу перенаправляются docker через IPv4 — способ, которым это осуществляется, делает все подключения похожими на те, которые поступают с IP-адреса docker0 хоста. Если вы примените указанную выше директиву к вашей конфигурации, это позволит всем пользователям, подключающимся через IPv6, подделывать свой IP-адрес по своему усмотрению.