ローカル管理トンネルは、マシン上の cloudflared インスタンスとして動作します。cloudflared のプロパティは、コマンドラインパラメーター を変更するか、トンネルの 設定ファイル を編集して設定できます。
単一のサービスを cloudflared 経由で接続する場合、CLI で素早く設定できます。複数のサービスを接続し、特定のオリジン向けにプロパティや例外を設定する必要がある場合は、トンネル設定ファイルが役立ちます。設定ファイルでは、cloudflared インスタンス全体のトップレベルプロパティと、オリジン固有のプロパティ を定義できます。設定オプションの一覧は、ターミナルで cloudflared tunnel help を実行してください。
設定ファイルがない場合、cloudflared はポート 8080 経由でアウトバウンドトラフィックをプロキシします。
プライベートネットワーク向けのファイル構造
Cloudflare One Client を使うエンドユーザーに プライベートネットワークを公開する 場合は、warp-routing キーを追加し、
true に設定します。
tunnel: <Tunnel-UUID>
credentials-file: /path/<Tunnel-UUID>.json
warp-routing:
enabled: trueローカルサービスをインターネットに公開する場合、各サービスに公開ホスト名を割り当てられます。
tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551ef
credentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json
ingress:
- hostname: gitlab.widgetcorp.tech
service: http://localhost:80
- hostname: gitlab-ssh.widgetcorp.tech
service: ssh://localhost:22
- service: http_status:404イングレスルールを含む設定ファイルは、必ずファイル末尾にキャッチオールルールを置く必要があります。この例では、リクエストが先行するどのホスト名にも一致しない場合、cloudflared は 404 ステータスコードで応答します。
cloudflared は受信リクエストを受け取ると、上から下へ各イングレスルールを評価し、一致するルールを探します。ルールは受信リクエストのホスト名、パス、またはその両方に一致できます。ルールがホスト名を指定しない場合は、すべてのホスト名に一致します。ルールがパスを指定しない場合は、すべてのパスに一致します。
最後のイングレスルールは、すべてのトラフィックに一致するキャッチオールルールである必要があります。
複数のルールを指定する設定ファイルの例です。
tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551ef
credentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json
ingress:
# Rules map traffic from a hostname to a local service:
- hostname: example.com
service: https://localhost:8000
# Rules can match the request's path to a regular expression:
- hostname: static.example.com
path: \.(jpg|png|css|js)$
service: https://localhost:8001
# Rules can match the request's hostname to a wildcard character:
- hostname: "*.example.com"
service: https://localhost:8002
# An example of a catch-all rule:
- service: https://localhost:8003ワイルドカードを使うと、複数のサブドメインのトラフィックを照合できます。たとえば hostname キーを *.example.com に設定すると、alpha.example.com と beta.example.com の両方のトラフィックがオリジンへルーティングされます。cloudflared は、test.*.example.com のようにホスト名の途中にあるワイルドカードには対応していません。
path キーには正規表現も入力できます。たとえば hostname が static.example.com で path が \.(jpg|png|css|js)$ の場合、一致する URL には https://static.example.com/data.js や http://static.example.com/images/photo.jpg などがあります。Cloudflare はパスの正規表現を Go の syntax パッケージ ↗ で解析します。
cloudflared は HTTP に加え、SSH、RDP、任意の TCP サービス、Unix ソケットなどのプロトコルに対応しています。組み込みの hello_world テストサーバーへトラフィックをルーティングしたり、HTTP ステータスで応答したりすることもできます。対応するサービスタイプの一覧は、公開アプリケーション向けプロトコル を参照してください。
tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551ef
credentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json
ingress:
# Example of a request over TCP:
- hostname: example.com
service: tcp://localhost:8000
# Example of an HTTP request over a Unix socket:
- hostname: staging.example.com
service: unix:/home/production/echo.sock
# Example of a request mapping to the Hello World test server:
- hostname: test.example.com
service: hello_world
# Example of a rule responding to traffic with an HTTP status:
- service: http_status:4041 つの cloudflared インスタンス内で複数のオリジンへトラフィックをプロキシする場合、イングレスルールの一部として 設定オプション を指定し、各サービスへのリクエスト送信方法を定義できます。
次の例では、トップレベル設定の connectTimeout: 30s が、その cloudflared インスタンス内のすべてのサービスに 30 秒の接続タイムアウトを設定します。service: localhost:8002 のイングレスルールは、そのサービスの connectTimeout を 10s に設定し、トップレベル設定の例外を作ります。ほかのサービスには、引き続き 30 秒の接続タイムアウトが適用されます。
tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551ef
credentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json
originRequest: # Top-level configuration
connectTimeout: 30s
ingress:
# The localhost:8000 service inherits all root-level configuration.
# In other words, it will use a connectTimeout of 30 seconds.
- hostname: example.com
service: localhost:8000
- hostname: example2.com
service: localhost:8001
# The localhost:8002 service overrides some root-level config.
- service: localhost:8002
originRequest:
connectTimeout: 10s
disableChunkedEncoding: true
# Some built-in services such as `http_status` do not use any configuration.
# The service below will simply respond with HTTP 404.
- service: http_status:404設定ファイルのイングレスルールを検証するには、次を実行します。
cloudflared tunnel ingress validateこれにより、設定ファイルで指定したイングレスルールのセットが有効であることを確認できます。
cloudflared が正しいトラフィックを正しいローカルサービスへプロキシすることを確認するには、cloudflared tunnel ingress rule を使います。URL を先頭から末尾まで各ルールと照合し、最初に一致したルールを表示します。例:
cloudflared tunnel ingress rule https://foo.example.comUsing rules from /usr/local/etc/cloudflared/config.yml
Matched rule #3
hostname: *.example.com
service: https://localhost:8000特定のトンネルの設定ファイルを変更するときは、cloudflared レプリカ を使い、ダウンタイムを最小限にして新しい設定を反映することを推奨します。
- 元のバージョンの設定ファイルで
cloudflaredインスタンスを動かします。 - 更新後の設定ファイルで
cloudflaredレプリカを起動します。 - レプリカが完全に起動し、使えるようになるまで待ちます。
- 最初の
cloudflaredインスタンスを停止します。
これで cloudflared は、更新後の設定ファイルで動作します。