TOC
概要
こんなシステムのとき、ユーザーから Cloudflare を通って最上段のリバプロのバックエンドが Cloudflare + proxy:on の環境のとき、「Error 1000: DNS points to prohibited IP」というエラーがでる。
発生条件
以下のどれかに当てはまるとエラーになる。
- The IP address that Cloudflare is pointing to is incorrect.
- Your service is pointing to another proxy in your zone file. Because Cloudflare is also a reverse proxy, enabling our proxy on a record may create a cyclic loop.
- The request includes an X-Forwarded-For header over 100 characters in length.
- The request includes two X-Forwarded-For headers.
- Cloudflare detects a cyclic loop; e.g., Cloudflare is proxying back to Cloudflare. This is detected when your origin responds with a “cf-ray” or “cf-connecting-ip” header.
原因
今回の構成の場合
1. X-Forwarded-For が2つある
2. ユーザーから近いリバプロから Cloudflare に戻るときに cf-ray, cf-connecting-ip を返してる
解決
方法はいくつかある
① ユーザーから近いリバプロで Cloudflare 系のヘッダーを消す
proxy_set_header X-Forwarded-For ""; proxy_set_header cf-ray ""; proxy_set_header cf-connecting-ip "";
② ユーザーから近いリバプロから見てバックエンド側の proxy をオフ
DNS ページから ON/OFF できるやつ
③ ユーザーから近いリバプロの hosts をバックエンド側ドメインの hosts を変える
117.102.xx.xx backend.example.com
②とやってることは一緒
結局、③でキャッシュされなくても、①でキャッシュされるのできちんと HTTP ヘッダが設定されていれば②で対応するのが1番良いと思います。
もし何らかの理由で一番下にあるグローバルIP を隠したければ③が良いと思います。
ハッピーニューイヤー