Установка Discourse на домашнем интернете с помощью Cloudflare Tunnel

Привет, @Falco, доходит ли до тебя в логах nginx реальный IP (который предоставляет Cloudflare через заголовок CF-Connecting-IP)? У меня нет — я вижу только IP cloudflared.

Думаю, нужно сделать одно или оба из следующих действий (после расследования вернусь с уточнениями):

  • добавить в конфигурацию nginx строку set_real_ip_from для IP cloudflared. Если проблема именно в этом, то, вероятно, ни одна из остальных строк set_real_ip_from (предоставленных в templates/cloudflare.template.yml) не нужна пользователям argotunnel. В таком случае, возможно, стоит добавить отдельный шаблон для argotunnel в репозиторий Docker, который будет брать IP cloudflared из переменной окружения или из твоего основного файла 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.

1 лайк