Как решить проблему, когда весь трафик отображается как исходящий с серверов Cloudflare, а не с IP-адреса браузера пользователя

Как решить проблему, когда после развёртывания Discourse в контейнере 1Panel с использованием обратного прокси и настройки CDN Cloudflare для домена весь трафик отображается как исходящий от серверов Cloudflare, а не от реальных IP-адресов браузеров пользователей?

В файле app.yml вы хотите использовать шаблон Cloudflare.

2 лайка

Пробовал, не получается :rofl:. Возможно, причина в том, что я развернул в контейнере 1panel и использовал обратный прокси?

Можете ли вы напрямую отредактировать файл конфигурации nginx? Если да, внесите изменения, предложенные здесь. После перезагрузки службы nginx всё должно заработать. Надеюсь, это поможет!

1 лайк

Интересно узнать причины использования двух обратных прокси: одного у хостинг-провайдера и CloudFlare. Есть ли для этого техническое обоснование?

1 лайк

Я развернул Discourse в контейнере с помощью панели управления сервером 1Panel (с открытым исходным кодом), чтобы упростить управление сервером.

Архитектура 1Panel выглядит следующим образом: Пользователь -> Cloudflare -> Nginx 1Panel -> Контейнер Discourse.

Мое понимание таково: даже если я изменю конфигурацию app.yml в Discourse, Nginx от 1Panel все равно будет находиться между Cloudflare и Discourse.

Итак, это техническое ограничение, введенное 1panel.

Вы запускаете несколько серверов или только Discourse на VPS? Если вы запускаете только Discourse, вам, вероятно, не нужен 1panel. Если только нет технической причины, по которой вам нужен 1panel.

Мой Discourse работает нативно на VPS за Cloudflare. Эта конфигурация работает.

Помимо Discourse, есть OpenClaw :grinning_face:

1 лайк

Почти наверняка.

IP-адрес, который вы видите, — это IP-адрес контейнера 1panel?

При просмотре пользователей администратором последний используемый IP-адрес отображается как IP-адрес Cloudflare.

Вы это уже реализовали?

https://support.cpanel.net/hc/en-us/articles/360051107513-How-to-restore-visitors-IP-with-mod-remoteip#:~:text=The%20Apache%20mod_remoteip%20module%20restores%20the%20original,instead%20of%20the%20original%20visitor’s%20IP%20address.

Это решение для Apache, позволяющее использовать IP-адрес конечного пользователя вместо IP-адреса Cloudflare.

1 лайк

Спасибо, я использую nginx. Я изучил несколько руководств, в которых предлагается настроить конфигурационный файл обратного прокси-сервера на хосте с nginx. Попробую это сделать, когда будет время.

Вы установили шаблон Cloudflare, как предлагалось? Если нет, то почему вы спрашиваете о помощи здесь?

Шаблон Cloudflare? Я уже изменил конфигурационный файл YAML и включил шаблон Cloudflare. Однако я развернул Discourse в контейнере через 1Panel (архитектура 1Panel: пользователь → Cloudflare → 1Panel Nginx → контейнер Discourse). Изменения только в файле YAML недостаточно; необходимо также изменить конфигурационный файл обратного прокси-сервера Nginx внутри 1Panel. Сейчас у меня нет времени, поэтому я ещё не приступил к этим изменениям.

It sounds like you need to modify 1Panel’s instance of nginx to utilize its real_ip functionality for user requests. Cloudflare sends along this information with the CF-Connecting-IP header, and you can utilize that header to tell nginx what to do with itself.

It would likely be worthwhile to build some script-based automation to regularly download cloudflare’s proxy address lists (ipv4, ipv6) to keep your nginx real_ip ranges updated.

If you don’t have access to your 1Panel nginx.conf file, you’re probably out of luck. Nginx’s real_ip + cloudflare’s CF-Connecting-IP header is how this problem is intended to be solved if you’re managing your own reverse proxy in front of self-hosted Discourse.