ข้ามไปยังเนื้อหา

คู่มือนักพัฒนา Cloudflare

แพ็กเกจ Cloudflare ย้ายการเรนเดอร์ Portable Document Format (PDF) ไปยังขอบเขตของ Worker ให้ถือว่าการเรนเดอร์ด้วย Worker การสำรองในเครื่อง การป้องกัน application programming interface (API) และคลังเก็บ R2 เป็นความสามารถที่แยกจากกัน โดยแต่ละส่วนจัดการความล้มเหลวของตนเอง

ใช้คู่มือนี้เมื่อสร้างบริการเรนเดอร์ที่ขอบเครือข่าย เอนด์พอยต์เรนเดอร์ที่มีการป้องกัน เวิร์กโฟลว์การจัดเก็บถาวร หรือเส้นทางการสำรองในเครื่องด้วย nextpdf/cloudflare

เลเยอร์เป็นเจ้าของโดยความรับผิดชอบสิ่งที่ไม่ควรใส่ไว้ที่นี่
เอนด์พอยต์ของแอปพลิเคชันแอปพลิเคชันอนุญาตผู้เรียกใช้งาน ทำให้คำขอเรนเดอร์เป็นรูปแบบมาตรฐาน และบังคับใช้นโยบายทางธุรกิจโทเค็นของ Worker ที่ฝังไว้ในโค้ด
การป้องกัน APInextpdf/cloudflare และแอปพลิเคชันการตรวจสอบคีย์ API การตรวจสอบขนาดเพย์โหลด และการตัดสินใจจำกัดอัตราภายในกระบวนการการเรียกเก็บเงิน สิทธิ์ของผู้เช่า หรือการบังคับใช้โควตาแบบคงทน
ตัวเรนเดอร์ Cloudflarenextpdf/cloudflareตรวจสอบ Hypertext Markup Language (HTML) และ Worker Uniform Resource Locator (URL) ส่งเพย์โหลดการเรนเดอร์ และแยกวิเคราะห์การตอบกลับการเรนเดอร์เทมเพลตหรือการสืบค้นโดเมน
Workerการปรับใช้แอปพลิเคชันเรียกใช้ Browser Rendering และส่งคืนไบต์ PDF หรือผลลัพธ์ที่มีโครงสร้างนโยบายการจัดเก็บฝั่ง PHP
การสำรองในเครื่องการปรับใช้แอปพลิเคชันเรนเดอร์เมื่อ Worker ไม่พร้อมใช้งานการสำรองแบบเงียบที่ปิดบังปัญหาขัดข้องด้านปฏิบัติการ
คลังเก็บ R2nextpdf/cloudflareอัปโหลดไฟล์ PDF สร้างคีย์อ็อบเจกต์ และสร้าง signed URLเมทาดาทาทางธุรกิจที่อ่อนไหวซึ่งยังไม่ผ่านการตรวจทาน
ขั้นตอนพฤติกรรมการดำเนินการของนักพัฒนา
การสร้างคอนฟิกโหลด Worker URL โทเค็น API ค่าหมดเวลา ขีดจำกัดขนาด การสำรอง และพินจัดเก็บความลับไว้ในคอนฟิกการปรับใช้
การป้องกันคำขอ(ทางเลือก) ApiProtection ตรวจสอบคีย์ ขนาด และขีดจำกัดอัตราเรียกใช้ก่อนงานเรนเดอร์ที่มีต้นทุนสูง
การเรียกตัวเรนเดอร์CloudflareHtmlRenderer ตรวจสอบ HTML และ Worker URL จากนั้นส่ง JavaScript Object Notation (JSON)จัดการกรณี Worker ไม่พร้อมใช้งานและความล้มเหลวในการเรนเดอร์แยกจากกัน
การแยกวิเคราะห์การตอบกลับCloudflareResponseParser::parse() รับเอาต์พุต PDF แบบไบนารีหรือเอาต์พุต JSON ที่มีโครงสร้างปฏิเสธเอาต์พุตที่ไม่ถูกต้องหรือไม่ใช่ PDF
การสำรองในเครื่องตัวเรนเดอร์ในเครื่อง (ทางเลือก) จัดการความล้มเหลวของ Workerฉีดแฟกทอรีของตัวเรนเดอร์ในเครื่องเฉพาะเมื่อโฮสต์รองรับเท่านั้น
คลังเก็บ R2R2ArchiveManager จัดเก็บไบต์ PDF และสร้าง signed URLจัดเก็บเฉพาะเมทาดาทาที่ไม่อ่อนไหว เว้นแต่จงใจจัดเก็บข้อมูลอ่อนไหว
เส้นทางวัตถุประสงค์
app/Pdf/Cloudflare/*ตัวห่อหุ้มของแอปพลิเคชันสำหรับ CloudflareHtmlRenderer
app/Pdf/Workers/*data transfer objects (DTOs) ของคำขอ Worker และนโยบายเฉพาะเอนด์พอยต์
app/Pdf/Archive/*การประสานงานคลังเก็บ R2 และการตัดสินใจด้านการเก็บรักษา
app/Pdf/Fallback/*LocalRendererFactoryInterface และงานพัฒนาการสำรองที่ได้รับอนุญาต
tests/Pdf/Cloudflare/*การทดสอบกรณี Worker ขัดข้อง โทเค็นไม่ถูกต้อง เพย์โหลด และคลังเก็บ

แยกโทเค็น API ฝั่ง PHP ออกจากโทเค็นของ Worker โดย PHP จะยืนยันตัวตนกับ Worker และ Worker ควรยืนยันตัวตนคำขอขาเข้าก่อนเริ่มงานเบราว์เซอร์

<?php
use NextPDF\Cloudflare\ApiProtection;
use NextPDF\Cloudflare\ApiProtectionConfig;
use NextPDF\Cloudflare\ApiKeyValidator;
$protection = new ApiProtection(
new ApiProtectionConfig(maxRequestsPerMinute: 30),
new ApiKeyValidator([$expectedApiKey]),
);
$result = $protection->checkRequest(
clientId: $clientId,
payloadSize: strlen($html),
apiKey: $presentedApiKey,
);
if (!$result->allowed) {
return new JsonResponse(['error' => $result->denialReason], 429, $result->toHeaders());
}

สร้างตัวเรนเดอร์ด้วยดีเพนเดนซี PHP Standards Recommendation (PSR) จากเฟรมเวิร์กของคุณ รวมถึง PSR-18 และ PSR-17 ระบุการสำรองในเครื่องให้ชัดเจน เพื่อให้ผู้ปฏิบัติงานเห็นได้ว่าระบบหยุดใช้ Worker เมื่อใด

<?php
use NextPDF\Cloudflare\CloudflareHtmlRenderer;
use NextPDF\Cloudflare\CloudflareRendererConfig;
$renderer = new CloudflareHtmlRenderer(
config: CloudflareRendererConfig::fromArray([
'worker_url' => getenv('NEXTPDF_CLOUDFLARE_WORKER_URL'),
'api_token' => getenv('NEXTPDF_CLOUDFLARE_API_TOKEN'),
'render_timeout' => 30,
'max_html_size' => 1_000_000,
'fallback_to_local' => false,
]),
httpClient: $httpClient,
requestFactory: $requestFactory,
streamFactory: $streamFactory,
);
$rendered = $renderer->render($html, widthPt: 595.28);

จัดเก็บถาวรหลังการเรนเดอร์สำเร็จและนโยบายอนุมัติผลลัพธ์แล้วเท่านั้น ให้ถือว่า public URL และ signed URL เป็นการตัดสินใจคนละส่วนกัน

<?php
use NextPDF\Cloudflare\R2ArchiveManager;
$upload = $archive->upload(
pdfData: $rendered->pdfData,
filename: 'invoice-1234.pdf',
metadata: [
'document_type' => 'invoice',
],
);
if ($upload->isValid()) {
$temporaryUrl = $archive->generateSignedUrl($upload->key, 600);
}

อย่าใส่ชื่อลูกค้า ที่อยู่อีเมล ยอดรวมใบแจ้งหนี้ หรือตัวระบุที่อยู่ภายใต้ข้อกำหนดไว้ในเมทาดาทาของอ็อบเจกต์ เว้นแต่นโยบายการเก็บรักษาและการเข้าถึงจะอนุญาตอย่างชัดเจน

จุดขยายความสามารถใช้สำหรับข้อจำกัด
LocalRendererFactoryInterfaceการสำรองในเครื่องผ่าน Artisan หรือตัวเรนเดอร์อื่นต้องส่งคืนอ็อบเจกต์ที่นำ LocalRendererInterface ไปใช้
ApiProtectionConfigนโยบายคีย์ API ขนาดเพย์โหลด และการจำกัดอัตราขีดจำกัดในหน่วยความจำมีผลต่อแต่ละกระบวนการ
ApiKeyValidatorตัวช่วยสำหรับการตรวจสอบคีย์แบบ timing-safe และการหมุนเวียนคีย์จัดเก็บความลับไว้นอกซอร์สโค้ด
R2ArchiveConfigบักเก็ต ข้อมูลรับรอง คำนำหน้าเส้นทาง เอนด์พอยต์ และขีดจำกัดขนาดห้ามบันทึกข้อมูลรับรองลงในล็อกโดยเด็ดขาด
PinnedCurlTransportการบังคับใช้พิน Internet Protocol (IP) และ Subject Public Key Info (SPKI)ต้องใช้รันไทม์ที่รองรับ cURL และแฟกทอรีการตอบกลับ
CloudflareResponseParserการแยกวิเคราะห์การตอบกลับของ Workerปฏิเสธเอาต์พุต PDF ที่ไม่ถูกต้องและการตอบกลับที่เป็นข้อผิดพลาด
  1. สร้างเส้นทางการเรนเดอร์ในเครื่องก่อน
  2. เพิ่มการเรนเดอร์ด้วย Worker โดยใช้ฟิกซ์เจอร์ HTML ขนาดเล็กที่เป็นตัวแทน
  3. เปิดใช้การป้องกันคำขอก่อนเปิดเผยเอนด์พอยต์สาธารณะ
  4. เพิ่มการอัปโหลด R2 หลังจากโฟลว์การเรนเดอร์และการตอบกลับเสถียรแล้วเท่านั้น
  5. ทดสอบเส้นทางกรณี Worker ล่ม โทเค็นไม่ถูกต้อง เพย์โหลดใหญ่เกินขนาด การจำกัดอัตรา และความล้มเหลวของ R2
  6. เพิ่มล็อกที่แยกแยะการเรนเดอร์ด้วย Worker การเรนเดอร์แบบสำรอง การอัปโหลดคลังเก็บ และการสร้าง signed URL
ความล้มเหลวตำแหน่งที่ควรจัดการการตอบสนองที่แนะนำ
คีย์ API ที่ขาดหายหรือไม่ถูกต้องเลเยอร์การป้องกัน APIปฏิเสธคำขอก่อนที่งานเรนเดอร์จะเริ่มต้น
เพย์โหลดใหญ่เกินขนาดการป้องกัน API หรือการตรวจสอบของตัวเรนเดอร์ส่งคืนผลการตรวจสอบที่ล้มเหลวโดยไม่เรียก Worker
Worker URL ที่ไม่ปลอดภัยนโยบายความปลอดภัยของตัวเรนเดอร์ทำให้คอนฟิกหรือคำขอล้มเหลวก่อนเกิด input/output (I/O) ผ่านเครือข่าย
Worker ไม่พร้อมใช้งานขอบเขตของตัวเรนเดอร์ใช้การสำรองอย่างชัดเจนเฉพาะเมื่อได้รับอนุญาตเท่านั้น มิฉะนั้นให้ล้มเหลวอย่างเห็นได้ชัด
ความล้มเหลวในการอัปโหลด R2ขอบเขตของคลังเก็บส่งคืนการตอบกลับ PDF หากการจัดเก็บถาวรเป็นทางเลือก และให้ล้มเหลวหากนโยบายกำหนดให้ต้องจัดเก็บถาวร
ความล้มเหลวในการหมุนเวียนพินการปรับใช้และการปฏิบัติงานหมุนเวียนด้วยพินสำรองและแผนการย้อนกลับ
ประเด็นที่เกี่ยวข้องค่าเริ่มต้นเมื่อใดควรแทนที่
การสำรองเปิดใช้งานตามค่าเริ่มต้นของคอนฟิกปิดใช้งานเมื่อการเรนเดอร์ในเครื่องจะละเมิดการแบ่งแยกของการปรับใช้
ขนาด HTML สูงสุด5,000,000 ไบต์ลดลงสำหรับเอนด์พอยต์สาธารณะ
time to live (TTL) ของ signed URL3600 วินาทีลดให้สั้นลงสำหรับ PDF ที่อ่อนไหว
ชุดพินว่างเปล่าเพิ่มพินเฉพาะเมื่อมีแผนการหมุนเวียนและพินสำรองเท่านั้น
ข้อกำหนดคีย์ APIเปิดใช้งานตามค่าเริ่มต้นของคอนฟิกการป้องกันปิดใช้งานเฉพาะสำหรับการเรียกภายในที่เป็นส่วนตัวและยืนยันตัวตนแล้วเท่านั้น
  • การทดสอบตัวเรนเดอร์ครอบคลุม HTML ที่ถูกต้อง HTML ที่ใหญ่เกินขนาด Worker URL ที่ไม่ถูกต้อง และการตอบกลับที่เป็นข้อผิดพลาดของ Worker
  • การทดสอบการป้องกัน API ครอบคลุมคีย์ที่ขาดหาย คีย์ที่ไม่ถูกต้อง เพย์โหลดที่ใหญ่เกินไป และการเกินขีดจำกัดอัตรา
  • การทดสอบ R2 ครอบคลุมการอัปโหลดที่สำเร็จ การอัปโหลดที่ใหญ่เกินไป สถานะ Hypertext Transfer Protocol (HTTP) ที่ล้มเหลว บักเก็ตที่ไม่ถูกต้อง และการสร้าง signed URL
  • การทดสอบการสำรองยืนยันว่าเส้นทางตัวเรนเดอร์ในเครื่องชัดเจนและสังเกตการณ์ได้
  • การทดสอบการขนส่งครอบคลุม IP ที่ปักหมุด พินคีย์สาธารณะ การหมดเวลา และการปิดใช้การเปลี่ยนเส้นทางตามนโยบาย
  • การทดสอบด้านการสังเกตการณ์ยืนยันว่ามีเหตุการณ์ล็อกที่แยกจากกันสำหรับการเรนเดอร์ การสำรอง การจัดเก็บถาวร และการสร้าง signed URL