İçeriğe geç

NextPDF Cloudflare köprüsünün yapılandırması

Paketi üç değişmez yapılandırma nesnesi yönetir. Bu sayfadaki her varsayılan, src/Cloudflare/ içindeki ilgili kurucu imzasından okunur; bir belirtimden veya tahminden alınmaz. Bu sayfada bir üst sınır belirtildiğinde, o üst sınır bu paketin uyguladığı sınırdır. Cloudflare platform kapasitesi hakkında bir iddia değildir.

İşleyicinin yapılandırması. final readonly. Doğrudan veya CloudflareRendererConfig::fromArray() ile oluşturun.

AlanTürVarsayılanAnlamı
workerUrlstring— (zorunlu)Worker uç noktası URL’si. HTTPS kullanmalıdır.
apiTokenstring— (zorunlu)Taşıyıcı (bearer) belirteci. #[SensitiveParameter] olarak işaretlidir.
renderTimeoutint30Sabitlenmiş cURL taşımasının uyguladığı, saniye cinsinden aktarım zaman aşımı.
defaultCssstring''HTML’nizden önce yüke eklenen CSS.
maxHtmlSizeint5000000İstek gönderilmeden önce uygulanan, bayt cinsinden en büyük HTML girdisi boyutu.
r2FontBucket?stringnullÖzel yazı tipi paketleri için R2 bucket adı.
fallbackToLocalbooltrueErişilemeyen bir Worker’ın yerel işleyiciye geri dönüp dönmeyeceği.
pinnedPublicKeyslist<string>[]SHA-256 SPKI parmak izleri, biçim sha256/<base64>.
backupPublicKeyslist<string>[]Yedek SPKI sabitlemeleri; döndürme bağımsız olarak doğrulanabilsin diye ayrı tutulurlar.

isValid() yalnızca şu koşullarda true döndürür: workerUrl !== '' ve apiToken !== ''. allPublicKeyPins(), pinnedPublicKeys ile backupPublicKeys birleşiminin yinelenmemiş halini döndürür. TLS katmanı, SPKI karması bu birleşimin herhangi bir üyesinde bulunan bir sertifikayı kabul eder. Bu davranış, sunulan SPKI parmak izi kümesi sabitlenmiş kümeyle kesiştiğinde sabitlenmiş bağlantıyı doğrulayan RFC 7469 §2.6 ile uyumludur. RFC 7469 §2.5, yedek sabitlemeyi istenmeyen sabitleme doğrulama hatasına karşı birincil kurtarma mekanizması olarak tanımlar. Sertifika döndürme işlemi uç noktayı bozmasın diye en az bir yedek sabitleme tutun — bkz. /integrations/cloudflare/security-and-operations/.

CloudflareRendererConfig::fromArray(), snake_case anahtarlarını okur ve bir anahtar eksikse ya da türü yanlışsa aynı varsayılanları uygular:

Dizi anahtarıEşlendiği alan
worker_urlworkerUrl
api_tokenapiToken
render_timeoutrenderTimeout (varsayılan 30)
default_cssdefaultCss
max_html_sizemaxHtmlSize (varsayılan 5000000)
r2_font_bucketr2FontBucket
fallback_to_localfallbackToLocal (varsayılan true)
pinned_public_keyspinnedPublicKeys (dize olmayan üyeler atılır)
backup_public_keysbackupPublicKeys (dize olmayan üyeler atılır)
<?php
declare(strict_types=1);
use NextPDF\Cloudflare\CloudflareRendererConfig;
$config = CloudflareRendererConfig::fromArray([
'worker_url' => 'https://pdf-renderer.example.workers.dev/render',
'api_token' => getenv('CF_PDF_TOKEN') ?: '',
'render_timeout' => 60,
'r2_font_bucket' => 'pdf-fonts',
'pinned_public_keys' => ['sha256/YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg='],
'backup_public_keys' => ['sha256/Vjs8r4z+80wjNcr1YKepWQboSIRi63WsWXhIMN+eWys='],
]);

Bu sınırlar, herhangi bir istek süreçten ayrılmadan önce CloudflareSecurityPolicy::validate() tarafından uygulanır. Sayılar kaynaktan alınır:

SınırDeğerNerede
En büyük HTML girdisimaxHtmlSize (varsayılan 5000000 bayt)CloudflareSecurityPolicy::validate()
En büyük çözülmüş base64 data-URI boyutu13631488 bayt (≈13 MB)CloudflareSecurityPolicy::MAX_DATA_URI_BYTES

İkisinden birinin aşılması, kuralı ihlal eden boyutu ve sınırı belirten bir iletiyle RuntimeException fırlatır. base64 üst sınırı, açma bombasına (decompression bomb) karşı koruma sağlar. İlke, çözülmüş boyutu base64 uzunluğundan tahmin eder ve üst sınırda ya da üzerinde reddeder. <meta http-equiv="refresh"> etiketi de büyük/küçük harfe duyarsız biçimde reddedilir; çünkü işlenen sayfanın içinden yönlendirme tetikleyebilir.

Paket yalnızca kendi uyguladığı sınırları belirtir. Worker’ın kendi istek, CPU veya bellek üst sınırları hakkında hiçbir iddiada bulunmaz. Bunlar için Cloudflare’in resmi belgelerine ve kendi Worker uygulamanıza başvurun.

Bir Worker’ın — veya onun önündeki bir PHP ağ geçidinin — gelen işleme isteklerine uyguladığı isteğe bağlı istek koruma katmanının yapılandırması. final readonly.

AlanTürVarsayılanAnlamı
maxRequestsPerMinuteint60İstemci başına dakika başına istek üst sınırı.
maxRequestsPerHourint1000İstemci başına saat başına istek üst sınırı.
maxPayloadSizeBytesint10485760En büyük gelen yük (≈10 MB).
allowedOriginslist<string>[]CORS izin listesi. Boş olması, burada hiçbir origin kısıtlamasının ifade edilmediği anlamına gelir.
requireApiKeybooltrueBir API anahtarının gerekli olup olmadığı.
apiKeyHeaderstring'X-Api-Key'API anahtarını taşıyan başlık.
rateLimitWindowSecondsint60Dakikalık pencerenin saniye cinsinden uzunluğu.

fromArray(), max_requests_per_minute, max_requests_per_hour, max_payload_size_bytes, allowed_origins, require_api_key, api_key_header ve rate_limit_window_seconds anahtarlarını okur. isValid(), her sayısal alanın pozitif olmasını ve apiKeyHeader alanının boş olmamasını gerektirir.

İşlenen PDF’lerin S3 uyumlu API üzerinden Cloudflare R2’ye arşivlenmesine yönelik yapılandırma. final readonly.

AlanTürVarsayılanAnlamı
bucketNamestring— (zorunlu)R2 bucket’ı. S3 adlandırma kuralına göre doğrulanır.
accountIdstring— (zorunlu)Varsayılan uç noktayı oluşturmak için kullanılan Cloudflare hesap kimliği.
accessKeyIdstring— (zorunlu)R2 erişim anahtarı kimliği. #[SensitiveParameter].
secretAccessKeystring— (zorunlu)R2 gizli erişim anahtarı. #[SensitiveParameter].
endpointstring''Özel S3 uç noktası. Boş olması, varsayılanı accountId değerinden oluşturur.
pathPrefixstring'pdfs/'Yüklenen nesneler için anahtar öneki.
maxFileSizeBytesint104857600Yüklemeden önce uygulanan en büyük yükleme boyutu (≈100 MB).

Kurucu, S3 uyumlu kurala uymayan ve boş olmayan bir bucketName değerini reddeder. Kural şudur: 3–63 karakter, küçük harf alfasayısal ve kısa çizgi, başta ve sonda bir alfasayısal karakter. İhlal durumunda InvalidArgumentException fırlatılır. isValid(), bucketName, accountId, accessKeyId ve secretAccessKey alanlarının boş olmamasını gerektirir. endpoint boş olduğunda getEndpoint(), https://<accountId>.r2.cloudflarestorage.com döndürür.

apiToken, accessKeyId ve secretAccessKey, #[SensitiveParameter] özniteliğini taşır; bu nedenle PHP bunları yığın izlerinden gizler. Bunları ortam değişkenlerinden veya bir gizli bilgi yöneticisinden sağlayın. Bunları asla commit etmeyin. Yapılandırma nesneleri değişmezdir; bu nedenle bir kez ayarlanan değer oluşturulduktan sonra değiştirilemez.

  • /integrations/cloudflare/quickstart/ — bu yapılandırmayı ilk işleme akışında uygulayın.
  • /integrations/cloudflare/production-usage/ — geri dönüş, R2 arşivlemesi ve API korumasının birlikte bağlanmış hali.
  • /integrations/cloudflare/security-and-operations/ — sabitleme, SSRF savunması ve gizli bilgi döndürme.