DNSとCloudflare
NexCMPには1つのDNS名(メインドメイン)が必要であり、2つのモードで動作します。
モードA:DNSが直接サーバーを指す場合
- Aレコード
cloud.example.com → <server public IPv4>(およびサーバーがIPv6を持つ場合はAAAAレコード)を作成します。 - 使用する場合のオプション:同じIPを指す
admin.cloud.example.comおよびpartner.cloud.example.com。 - installerを実行(または再実行)します。名前がサーバー自身のパブリックIPに名前解決されることを検出し、ポート80でのHTTP-01チャレンジを通じてLet's Encrypt証明書を取得します。
モードB:ドメインがCloudflareによってプロキシされている場合
オレンジ色のクラウド(Proxied)を指定して同じレコードを作成します。インストーラーは、名前がCloudflareのアドレスのみに名前解決されることを検出し、Cloudflareモードに切り替えます:
- nginxは引き続きサーバー上の80/443でリッスンします;
- 訪問者の実際のIPは
CF-Connecting-IPヘッダーから読み取られます(Cloudflareの公開レンジからの接続にのみ適用されるため、他のユーザーに偽装されることはありません)。 - 証明書はLet's Encryptを通じて取得されます(Cloudflareがチャレンジをオリジンに転送します)。それがまだ不可能な場合は、"Full"モードが機能するように自己署名オリジン証明書が作成され、後からインストーラーを再実行することでLet's Encryptにアップグレードされます。
--behind-cloudflareを使用してこのモードを強制できます。
::: important CloudflareでのSSL/TLSモードの設定 CloudflareでSSL/TLS › Overviewに移動し、インストーラーがLet's Encrypt証明書を報告したらFull (strict)を選択します。自己署名オリジン証明書を使用する場合はFullを使用します。Flexibleはリダイレクトループを引き起こします。 :::
TIP
"Always Use HTTPS"が有効な場合、Cloudflareは検証リクエストをオリジンのポート443に送信します。インストーラーは、最初に一時的な自己署名証明書を作成し、次にLet's Encryptを再試行することでこれに対処します。
確認
bash
dig +short cloud.example.com # A record (a Cloudflare address in mode B)
curl -I https://cloud.example.com/healthz
sudo certbot certificates # certificate name, domains and expiry証明書はcertbotのタイマーによって自動的に更新されます。更新にはwebroot/var/www/nexcmp-acmeを使用するため、(直接またはCloudflare経由で)ポート80にアクセス可能な状態を維持する必要があります。
よくある問題
| 症状 | 原因 | 対処法 |
|---|---|---|
| インストーラーに「DNS … does not point to … (nor to Cloudflare) — skipping nginx/TLS」と表示される | DNSレコードが欠落している、誤っている、または伝播していない | レコードを修正し、伝播を待ってからインストーラーを再実行してください。 |
ブラウザにERR_TOO_MANY_REDIRECTSがCloudflareの背後にあると表示される | SSLモードがFlexibleになっている | Full (strict)(またはFull)を設定してください。 |
| Cloudflareのエラー 525/526 | オリジン証明書が拒否された | 自己署名オリジン証明書の場合はFullを使用し、Let's Encryptの場合は**Full (strict)**を使用します。 |
| 訪問者のログがすべてCloudflareのIPになる | Cloudflareモードになっていない | --behind-cloudflareを指定してインストーラーを再実行してください。 |
詳細はInstallation errorsをご覧ください。