Привет, @Falco, доходит ли до тебя в логах nginx реальный IP (который предоставляет Cloudflare через заголовок CF-Connecting-IP)? У меня нет — я вижу только IP cloudflared.
Думаю, нужно сделать одно или оба из следующих действий (после расследования вернусь с уточнениями):
- добавить в конфигурацию nginx строку
set_real_ip_fromдля IPcloudflared. Если проблема именно в этом, то, вероятно, ни одна из остальных строкset_real_ip_from(предоставленных вtemplates/cloudflare.template.yml) не нужна пользователям argotunnel. В таком случае, возможно, стоит добавить отдельный шаблон для argotunnel в репозиторий Docker, который будет брать IPcloudflaredиз переменной окружения или из твоего основного файлаapp.yml. исправитьподтверждено: не требуетсяlog_format. Хотя, думаю, это, скорее всего, не проблема.
Редактирование:
Вот что я делаю, чтобы это заработало:
Не используй шаблон Cloudflare — в этом нет смысла.
Вместо этого добавь следующее в свой app.yml:
hooks:
after_web_config:
- file:
path: /etc/nginx/conf.d/cloudflare_tunnel_real_ip.conf
contents: |
# Восстанавливаем оригинальные IP посетителей (ngx_http_realip_module)
set_real_ip_from 10.100.20.200/32; # твой диапазон IP cloudflared/argotunnel
real_ip_header CF-Connecting-IP;
Кстати, это автоматически попадает в контекст http в nginx, что вполне уместно.
P.S. На мой взгляд, для чистоты кода шаблон Cloudflare должен также генерировать свою конфигурацию nginx в отдельный файл, а не использовать sed -i для добавления её в /etc/nginx/conf.d/discourse.conf.