[{"data":1,"prerenderedAt":362},["ShallowReactive",2],{"document-library-menu":3,"document-content--docs-technology-cloudflare-docs":58,"document-library-links--docs-technology-cloudflare-docs":357},[4,8,12],{"title":5,"path":6,"stem":7,"children":-1},"Resources","\u002Fdocs","docs\u002Findex",{"title":9,"path":10,"stem":11,"children":-1},"Project Initiation","\u002Fdocs\u002Fproject-initiation","docs\u002F1.project-initiation",{"title":13,"icon":14,"path":15,"stem":16,"children":17,"page":-1},"Technology","i-lucide-layers","\u002Fdocs\u002Ftechnology","docs\u002F2.technology\u002Findex",[18,23,28,33,38,43,48,53],{"title":19,"path":20,"stem":21,"icon":22,"children":-1},"Laravel","\u002Fdocs\u002Ftechnology\u002Flaravel","docs\u002F2.technology\u002F1.laravel","i-simple-icons-laravel",{"title":24,"path":25,"stem":26,"icon":27,"children":-1},"Flutter","\u002Fdocs\u002Ftechnology\u002Fflutter","docs\u002F2.technology\u002F2.flutter","i-simple-icons-flutter",{"title":29,"path":30,"stem":31,"icon":32,"children":-1},"Nuxt","\u002Fdocs\u002Ftechnology\u002Fnuxt","docs\u002F2.technology\u002F3.nuxt","i-simple-icons-nuxt",{"title":34,"path":35,"stem":36,"icon":37,"children":-1},"Tailwind","\u002Fdocs\u002Ftechnology\u002Ftailwind","docs\u002F2.technology\u002F4.tailwind","i-simple-icons-tailwindcss",{"title":39,"path":40,"stem":41,"icon":42,"children":-1},"Cursor","\u002Fdocs\u002Ftechnology\u002Fcursor","docs\u002F2.technology\u002F5.cursor","i-simple-icons-cursor",{"title":44,"path":45,"stem":46,"icon":47,"children":-1},"AWS","\u002Fdocs\u002Ftechnology\u002Famazon","docs\u002F2.technology\u002F6.amazon","i-simple-icons-amazon",{"title":49,"path":50,"stem":51,"icon":52,"children":-1},"Cloudflare","\u002Fdocs\u002Ftechnology\u002Fcloudflare","docs\u002F2.technology\u002F7.cloudflare","i-simple-icons-cloudflare",{"title":54,"path":55,"stem":56,"icon":57,"children":-1},"MySQL","\u002Fdocs\u002Ftechnology\u002Fmysql","docs\u002F2.technology\u002F8.mysql","i-simple-icons-mysql",{"id":59,"title":49,"body":60,"description":351,"extension":352,"meta":353,"navigation":354,"path":50,"seo":355,"stem":51,"__hash__":356},"docs\u002Fdocs\u002F2.technology\u002F7.cloudflare.md",{"type":61,"value":62,"toc":333},"minimark",[63,71,77,87,92,142,146,165,168,172,186,190,217,221,227,253,257,272,278,282,285,289,294,297,301,304,308,311,315,320],[64,65,66,67,70],"p",{},"Cloudflare sits in front of the origin. DNS, certificates, caching, and an initial filter for abusive traffic are handled there, so ",[68,69,44],"a",{"href":45}," can focus on running the application. Public forms on this site also use Turnstile, Cloudflare’s challenge, and a submission is accepted only after that check succeeds.",[64,72,73,74,76],{},"It is part of the delivery infrastructure. It is not a product we resell, and it does not replace authentication and validation inside ",[68,75,19],{"href":20},".",[64,78,79,83,84,76],{},[68,80,82],{"href":81},"\u002F_action\u002Fcontact-us","Start a conversation"," about a platform that needs this edge, or read ",[68,85,86],{"href":10},"Project initiation",[88,89,91],"h2",{"id":90},"at-a-glance","At a glance",[93,94,95,106],"table",{},[96,97,98],"thead",{},[99,100,101,104],"tr",{},[102,103],"th",{},[102,105],{},[107,108,109,118,126,134],"tbody",{},[99,110,111,115],{},[112,113,114],"td",{},"Kind",[112,116,117],{},"Edge network",[99,119,120,123],{},[112,121,122],{},"Fits",[112,124,125],{},"DNS, TLS, caching, challenges on public forms",[99,127,128,131],{},[112,129,130],{},"Origin behind it",[112,132,133],{},"AWS, for the application and the database",[99,135,136,139],{},[112,137,138],{},"Does not replace",[112,140,141],{},"Application authentication, validation, or backups",[88,143,145],{"id":144},"when-we-use-it","When we use it",[147,148,149,156,159,162],"ul",{},[150,151,152,153,155],"li",{},"Providing a certificate and a hostname for a ",[68,154,29],{"href":30}," application or a Laravel API, without running that service on the origin",[150,157,158],{},"Caching assets and anonymous pages that are safe to cache, so the origin is not requested for every visit",[150,160,161],{},"Challenging public forms, so scripted submissions are rejected before they reach application code",[150,163,164],{},"Keeping DNS with the rest of the edge configuration",[64,166,167],{},"Authenticated API traffic is a poor candidate for caching. Caching is not enabled for a whole portal, because private pages must not be stored and served to other visitors.",[88,169,171],{"id":170},"what-we-rely-on","What we rely on",[147,173,174,177,180,183],{},[150,175,176],{},"DNS and TLS for the hostnames the product uses",[150,178,179],{},"Cache rules that match the routes: static assets and selected public pages, not responses that belong to a session",[150,181,182],{},"Turnstile on public forms, verified on the server. A widget that the API does not verify does not provide protection",[150,184,185],{},"A clearly defined origin. The edge forwards to AWS. It is not a second, partial copy of the application configuration",[88,187,189],{"id":188},"why-it-fits-the-work","Why it fits the work",[147,191,192,199,205,211],{},[150,193,194,198],{},[195,196,197],"strong",{},"Faster repeat visits for public content."," Assets and cacheable pages are served from the edge. The API does less of that work, so it remains available for application requests.",[150,200,201,204],{},[195,202,203],{},"The origin can be changed without a client release."," Hostnames point at Cloudflare. Changing what sits behind a name is a configuration change.",[150,206,207,210],{},[195,208,209],{},"Less unsolicited traffic reaches the application."," Challenges and basic filtering handle routine abuse. Account security, authorisation, and input validation still happen in Laravel, where the rules are defined.",[150,212,213,216],{},[195,214,215],{},"Certificates without a dedicated server."," Certificates and the edge are provided as a service. That is simpler than maintaining a server whose only role is TLS.",[88,218,220],{"id":219},"how-we-build-with-it","How we build with it",[64,222,223,224,226],{},"The engagement follows ",[68,225,86],{"href":10},". The edge is part of the architecture, because caching and hostnames are difficult to correct late.",[147,228,229,235,241,247],{},[150,230,231,234],{},[195,232,233],{},"Architecture."," Which hostnames exist, which routes may be cached, and where the origin is. Public and authenticated traffic are specified separately.",[150,236,237,240],{},[195,238,239],{},"Development."," Each environment has its own hostnames. A cache rule is tested against an authenticated response before it is trusted.",[150,242,243,246],{},[195,244,245],{},"Hardening."," TLS, restricted origin access where the platform allows it, and Turnstile verified on the server. Secrets for those checks are not kept in the frontend repository history.",[150,248,249,252],{},[195,250,251],{},"Release and support."," Cache and DNS changes are made deliberately. After launch, a new public route includes a decision about whether it may be cached.",[88,254,256],{"id":255},"how-it-sits-in-the-stack","How it sits in the stack",[64,258,259,260,262,263,265,266,268,269,271],{},"Cloudflare is in front of ",[68,261,44],{"href":45},". It forwards to ",[68,264,29],{"href":30}," and Laravel. ",[68,267,24],{"href":25}," applications call the API through that hostname. ",[68,270,54],{"href":55}," is not exposed to the edge.",[64,273,274,277],{},[68,275,276],{"href":35},"Tailwind CSS"," reaches Cloudflare only as built files in the asset cache.",[88,279,281],{"id":280},"in-practice","In practice",[64,283,284],{},"This site is served through Cloudflare, and its contact form is not accepted until Turnstile has been completed and verified. Client platforms use the same division: the edge provides DNS, TLS, caching, and challenges, and the application on AWS handles the business process.",[88,286,288],{"id":287},"questions","Questions",[290,291,293],"h3",{"id":292},"is-cloudflare-enough-security-for-a-portal","Is Cloudflare enough security for a portal?",[64,295,296],{},"No. It protects the network edge. Sign-in, permissions, and validation belong in the application. An edge rule that blocks some traffic does not make an unprotected administration route acceptable.",[290,298,300],{"id":299},"do-you-put-cloudflare-in-front-of-aws-and-another-cdn-as-well","Do you put Cloudflare in front of AWS and another CDN as well?",[64,302,303],{},"Not by default. Two caches in sequence are two places where a stale or private response can be stored. AWS runs the origin. Cloudflare is the edge.",[290,305,307],{"id":306},"can-you-work-with-a-domain-we-already-control","Can you work with a domain we already control?",[64,309,310],{},"Yes. Existing DNS is a constraint we need at the start, together with the name of whoever is permitted to change it. Moving a hostname is a planned step. It is not carried out as part of an application deployment.",[88,312,314],{"id":313},"next-step","Next step",[64,316,317,318,76],{},"When a platform is being scoped, the edge should be discussed with the hosting, rather than after a production problem. ",[68,319,82],{"href":81},[64,321,322,323,326,327,326,329,326,331,76],{},"Related: ",[68,324,325],{"href":45},"Amazon Web Services",", ",[68,328,29],{"href":30},[68,330,19],{"href":20},[68,332,13],{"href":15},{"title":334,"searchDepth":335,"depth":335,"links":336},"",2,[337,338,339,340,341,342,343,344,350],{"id":90,"depth":335,"text":91},{"id":144,"depth":335,"text":145},{"id":170,"depth":335,"text":171},{"id":188,"depth":335,"text":189},{"id":219,"depth":335,"text":220},{"id":255,"depth":335,"text":256},{"id":280,"depth":335,"text":281},{"id":287,"depth":335,"text":288,"children":345},[346,348,349],{"id":292,"depth":347,"text":293},3,{"id":299,"depth":347,"text":300},{"id":306,"depth":347,"text":307},{"id":313,"depth":335,"text":314},"DNS, TLS, caching, and abuse protection in front of the sites and APIs we deliver.","md",{},{"title":49,"icon":52},{"title":49,"description":351},"RvXz4he-_QCFloR0CLpGnnFs6IzuWHYw62BNePOvI_8",[358,360],{"title":44,"path":45,"stem":46,"description":359,"icon":47,"children":-1},"Hosting for the Laravel applications, their databases, and the background jobs that support them.",{"title":54,"path":55,"stem":56,"description":361,"icon":57,"children":-1},"The relational database behind the Laravel applications we build, including the data those systems must keep accurate.",1792456194669]