Предложение по шаблону Cloudflare для получения реального IP-адреса пользователей

Всем привет,

Я только что узнал об этом сложным и долгим путём касательно настройки real_ip_header CF-Connecting-IP; в Cloudflare для nginx…

У меня довольно сложная конфигурация, где Nginx Proxy Manager работает в отдельном Docker-образе (я использую SWAG от linuxserver.io, что, кстати, отлично), поэтому путь соединения выглядит так:
Пользователь -> Cloudflare -> Сервер (1-й Docker-контейнер: Nginx -> 2-й Docker-контейнер: Discourse)

Оба Docker-контейнера находятся в одной Docker-сети и взаимодействуют друг с другом — это нормально.
У меня возникла реальная проблема с получением исходного IP-адреса пользователя в логах Discourse. Я прочитал все полезные обсуждения здесь и добавил шаблон Cloudflare в свой файл app.yml, но это всё равно не сработало…

После долгих мучений я понял, что проблема не в самом шаблоне Cloudflare, а в том, что контейнер Discourse получал IP-адрес от контейнера NGINX, и мне пришлось добавить диапазон CIDR Docker-сети в директиву set_real_ip_from следующим образом:
set_real_ip_from 172.18.0.0/16;

Чтобы помочь будущим администраторам, можно ли добавить эту строку в шаблон Cloudflare? Диапазон IP 172.18.0.0/16 всё равно является частным, поэтому даже если у вас NPM не работает в Docker-контейнере, добавление этого диапазона не навредит.

Моё предложение — изменить эту строку в файле cloudflare.template.yml:
sed -i "/sendfile on;/a $CONTENTS\nreal_ip_header CF-Connecting-IP;" /etc/nginx/conf.d/discourse.conf

на следующую:
sed -i "/sendfile on;/a set_real_ip_from 172.18.0.0/16;\n$CONTENTS\nreal_ip_header CF-Connecting-IP;" /etc/nginx/conf.d/discourse.conf

Что вы думаете по этому поводу?

Существует множество тем, посвящённых использованию обратного прокси-сервера, в которых описывается, как это сделать. Однако не все пользователи Cloudflare используют обратный прокси.

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

Верно. И обратное тоже справедливо: не каждый, кто использует обратный прокси, применяет Cloudflare :wink:

Это предложение действительно призвано облегчить жизнь тем, кто использует Cloudflare. Для тех, кто не применяет обратный прокси в Docker, оно ничего не изменит, но может сэкономить часы поиска ответа на простой вопрос.

Тем, кто использует Cloudflare, скорее всего, придётся несладко. Вы можете поискать здесь и найти множество примеров, подтверждающих это. Установка шаблона — лишь одна из проблем, с которыми вы можете столкнуться, и при этом самая простая в решении. (Я бы порекомендовал использовать настоящий CDN, например bunny.net — он недорогой, но не бесплатный, и легко настраивается, однако это не то, о чём вы спрашивали.)

Конечно, ваша проблема не имела ничего общего с Cloudflare, а касалась обратного прокси, поэтому поиск по Cloudflare, скорее всего, не помог!

Тем не менее, добавление ещё нескольких стандартных шаблонов, таких как обратный прокси (и тот, который я очень хочу — для предварительной компиляции ресурсов и их отправки в S3), — отличная идея.

Удачи.