{"id":20914,"date":"2026-08-23T08:31:43","date_gmt":"2026-08-23T06:31:43","guid":{"rendered":"https:\/\/webhosting.de\/nginx-cache-wordpress-speed\/"},"modified":"2026-08-23T08:31:43","modified_gmt":"2026-08-23T06:31:43","slug":"nginx-cache-wordpress-hastighed","status":"publish","type":"post","link":"https:\/\/webhosting.de\/da\/nginx-cache-wordpress-speed\/","title":{"rendered":"NGINX FastCGI-cache: S\u00e5dan g\u00f8r du WordPress hurtigere"},"content":{"rendered":"<p>Jeg g\u00f8r WordPress m\u00e6rkbart hurtigere ved at <strong>NGINX-cache<\/strong> p\u00e5 serverniveau og leverer HTML-svar direkte. P\u00e5 den m\u00e5de falder TTFB markant, PHP-FPM forbliver ledig, og databasen skal behandle f\u00e6rre <strong>Foresp\u00f8rgsler<\/strong>.<\/p>\n\n<h2>Centrale punkter<\/h2>\n<ul>\n  <li><strong>Serversiden<\/strong> I stedet for et plugin: FastCGI-cache aflaster PHP og reducerer ventetiden.<\/li>\n  <li><strong>Udrensning<\/strong> ved \u00e6ndringer: Indholdet holdes opdateret og fornyes m\u00e5lrettet.<\/li>\n  <li><strong>Udelukkelser<\/strong> Omr\u00e5derne til login, indk\u00f8bskurv og kasse er dynamiske.<\/li>\n  <li><strong>Skalering<\/strong> under belastning: Caches bruges oftere og mindsker serverbelastningen.<\/li>\n  <li><strong>M\u00e5lbar<\/strong> hurtigere: TTFB-, RPS- og CPU-v\u00e6rdierne forbedres markant.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/nginx-cache-optimierung-4832.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Hvordan NGINX FastCGI Cache g\u00f8r WordPress hurtigere<\/h2>\n<p>N\u00e5r siden \u00e5bnes f\u00f8rste gang, renderer WordPress siden, hvorefter NGINX gemmer det f\u00e6rdige svar som <strong>HTML<\/strong> og leverer fremtidige identiske foresp\u00f8rgsler uden PHP-FPM. P\u00e5 den m\u00e5de reducerer jeg CPU-tid og kontekstskift, mens filsystemet henholdsvis OS-cachen hurtigt <strong>Hits<\/strong> leverer. Is\u00e6r ved spidsbelastninger forbliver responstiden lav, fordi der ikke skal startes nogen PHP-processer. Dermed minimerer jeg TTFB og g\u00f8r det muligt at sende flere anmodninger pr. sekund. Resultatet er en mere flydende interaktion, f\u00e6rre timeouts og en klar ydeevnereserve til egentlige dynamiske processer.<\/p>\n\n<h2>Cache p\u00e5 serversiden kontra cache via plugin (inkl. sammenligning)<\/h2>\n<p>Et cache-plugin fungerer i <strong>PHP-stack<\/strong> og udl\u00f8ser ofte processer, selv n\u00e5r der er hits, mens FastCGI Cache svarer direkte p\u00e5 webserver-niveau. Dermed undg\u00e5r man mange overhead-omkostninger som PHP-initialisering og plugin-hooks. Til tilbagevendende bes\u00f8gende satser jeg prim\u00e6rt p\u00e5 den serversidige l\u00f8sning og kombinerer den efter behov med et let frontend-optimeringsplugin. Hvis man \u00f8nsker at unders\u00f8ge detaljerne grundigt, kan man starte med en slank <strong>Testfase<\/strong> og m\u00e5ler TTFB, CPU og cache-hit-rate hver for sig. Forskellene bliver meget hurtigt tydelige \u2013 is\u00e6r under belastning.<\/p>\n<table>\n  <thead>\n    <tr>\n      <th>Kriterium<\/th>\n      <th>Plugin-cache (PHP)<\/th>\n      <th>NGINX FastCGI-cache<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Svarvejledning<\/td>\n      <td>PHP initialiseres, plugin tjekker cachen<\/td>\n      <td>Webserveren leverer filen direkte<\/td>\n    <\/tr>\n    <tr>\n      <td>TTFB<\/td>\n      <td>h\u00f8jere p\u00e5 grund af PHP-start<\/td>\n      <td>meget lav ved cache-hit<\/td>\n    <\/tr>\n    <tr>\n      <td>Ressourcer<\/td>\n      <td>mere CPU\/RAM pr. anmodning<\/td>\n      <td>betydeligt f\u00e6rre ressourcer<\/td>\n    <\/tr>\n    <tr>\n      <td>Skalering<\/td>\n      <td>begr\u00e6nset af PHP-processer<\/td>\n      <td>skalerer effektivt med NGINX<\/td>\n    <\/tr>\n    <tr>\n      <td>Afh\u00e6ngigheder<\/td>\n      <td>Der kan opst\u00e5 konflikter mellem temaer og plugins<\/td>\n      <td>fungerer p\u00e5 basis af WordPress<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n<p>Derudover bruger jeg tydelige cache-n\u00f8gler og en overskuelig mappestruktur, s\u00e5 indholdet adskilles efter host, skema og URI. Hvis du er nybegynder, kan du l\u00e6se min vejledning til <a href=\"https:\/\/webhosting.de\/da\/vindue-til-optimering-af-nginx-cachen\/\">NGINX-cache-optimering<\/a> bruges som vejledning. P\u00e5 den m\u00e5de forbliver konfigurationen overskuelig, og fremtidige udvidelser kan gennemf\u00f8res hurtigere.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/nginx_fastcgi_cache_wp_0325.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Egnede scenarier og vigtige undtagelser<\/h2>\n<p>Den, der drager st\u00f8rst fordel <strong>Indhold<\/strong>, dvs. blogs, magasiner, landingssider og virksomhedswebsteder med mange anonyme bes\u00f8g. Jeg cachelagrer alle sider, der forbliver identiske for bes\u00f8gende, og udelukker alt, der er personaliseret. Dette omfatter login, profil, kommentarformularer, WooCommerce-indk\u00f8bskurv, kasse og \u00bbMine konti\u00ab. Cookies og headere fungerer som kriterier for m\u00e5lrettet at omg\u00e5 cachen. P\u00e5 den m\u00e5de forbliver offentlige sider lynhurtige, mens f\u00f8lsomme omr\u00e5der forbliver korrekt dynamiske, og brugerne f\u00e5r en problemfri oplevelse. <strong>serverer<\/strong> blive.<\/p>\n\n<h2>Tekniske grundbegreber: Cache-zone, n\u00f8gle, header<\/h2>\n<p>F\u00f8rst definerer jeg <strong>Cache-sti<\/strong> og en zone i NGINX-konfigurationen, herunder st\u00f8rrelse og inaktivitetstid. Cachen\u00f8glen indeholder skema, v\u00e6rt og URI samt eventuelt query-strings, s\u00e5 varianter holdes adskilt. Via fastcgi_cache_valid, bypass- og no-cache-regler styrer jeg, hvorn\u00e5r anmodninger omg\u00e5r cachen. Vigtige headere som Set-Cookie, Authorization og bestemte cookies fra WordPress eller WooCommerce signalerer dynamik. Derudover fastl\u00e6gger jeg, hvilke fejlsider eller 50x-svar der kortvarigt skal caches, s\u00e5 siden fortsat fungerer under belastning <strong>svar<\/strong>.<\/p>\n\n<h2>Cache-styring og rydningsstrategi<\/h2>\n<p>En cache fungerer f\u00f8rst optimalt, n\u00e5r opdateringerne er p\u00e5lidelige <strong>Rul ud<\/strong>. N\u00e5r jeg gemmer et indl\u00e6g, udf\u00f8rer jeg en m\u00e5lrettet rydning af de ber\u00f8rte URL\u2019er, herunder startsider, kategorier og feeds. Derudover indstiller jeg en passende TTL, s\u00e5 indholdet genereres p\u00e5 ny med j\u00e6vne mellemrum. P\u00e5 store websteder hj\u00e6lper preload til vigtige landingssider, s\u00e5 den f\u00f8rste bes\u00f8gende ikke oplever en koldstart. Efter hver \u00e6ndring kontrollerer jeg cache-hit-raten og om rensningerne har fjernet for\u00e6ldede fragmenter <strong>efterlade<\/strong>.<\/p>\n\n<h2>Regler for WordPress og WooCommerce<\/h2>\n<p>Jeg lader indloggede brugere konsekvent bruge cachen <strong>forbi<\/strong>, typisk ved hj\u00e6lp af wordpress_logged_in-cookien. For WooCommerce udelukker jeg indk\u00f8bskurv, kasse og \u00bbMine konti\u00ab via URI-m\u00f8nstre og holder \u00f8je med cookies som woocommerce_items_in_cart. Produktsider, kategorisider og indholdssider cacher jeg derimod som normalt. Derudover t\u00f8mmer jeg cachen, n\u00e5r lagerbeholdningen eller prisen \u00e6ndres via et hook. Denne opdeling sikrer, at offentlige sider forbliver hurtige, uden at det g\u00e5r ud over k\u00f8bsprocesserne. <strong>forstyrre<\/strong>.<\/p>\n\n<h2>V\u00e6lg TTL, Stale og Locking korrekt<\/h2>\n<p>Jeg indstiller indholdets TTL ud fra praktiske hensyn, f.eks. fra minutter til nogle f\u00e5 timer, afh\u00e6ngigt af <strong>Aktualitet<\/strong> og trafik. Stale-indstillinger giver mig mulighed for kortvarigt at levere for\u00e6ldede objekter, mens en opdateret version oprettes i baggrunden. L\u00e5sning forhindrer \u00bbstampede-effekten\u00ab, n\u00e5r mange anmodninger samtidig rammer et for\u00e6ldet objekt. Passende fejl- og timeout-regler sikrer, at bes\u00f8gende f\u00e5r et svar, selv ved korte forstyrrelser. Jeg giver flere baggrundsoplysninger om retningslinjerne i min kompakte <a href=\"https:\/\/webhosting.de\/da\/http-cache-kontrol-strategier-hosting-cachemaster\/\">Cache-kontrolstrategier<\/a>, som kan kombineres godt med FastCGI Cache.<\/p>\n\n<h2>Overv\u00e5gning og m\u00e5lev\u00e6rdier, der t\u00e6ller<\/h2>\n<p>F\u00f8rst m\u00e5ler jeg <strong>TTFB<\/strong>, derefter antal anmodninger pr. sekund og CPU-belastning, opdelt efter cache-hits og -misses. NGINX-logfiler og responsheadere viser mig, om der er tale om et HIT, MISS, BYPASS eller EXPIRED. En stigende hit-rate ved faldende CPU-belastning er mit signal p\u00e5, at reglerne virker. Derudover overv\u00e5ger jeg filsystem-I\/O og antallet af aktive PHP-processer. Til betinget caching bruger jeg ETag\/Last-Modified p\u00e5 en fornuftig m\u00e5de og henviser til min vejledning om <a href=\"https:\/\/webhosting.de\/da\/http-betinget-caching-etag-sidst-aendret-ydeevnevejledning\/\">Betinget caching med ETag<\/a>, s\u00e5 browser- og servercachen fungerer i harmoni, og belastningen p\u00e5 netv\u00e6rket m\u00e6rkbart <strong>falder<\/strong>.<\/p>\n\n<h2>Almindelige fejl og hvordan jeg l\u00f8ser dem<\/h2>\n<p>En almindelig faldgrube er, at man g\u00e5r for langt <strong>Cache-n\u00f8gle<\/strong>, som overskriver varianterne og leverer forkert indhold. Lige s\u00e5 kritisk: manglende undtagelser for cookies som wordpress_logged_in eller WooCommerce-signaler. Hvis rensningerne kun vedr\u00f8rer den enkelte side, forbliver arkiv- og startsiderne for\u00e6ldede; derfor udvider jeg de ber\u00f8rte m\u00e5l. Jeg har ogs\u00e5 ofte brug for query-strings i n\u00f8glen, ellers overskriver den ene variant den anden. For korte TTL\u2019er skaber un\u00f8dvendige MISS-rater, mens for lange TTL\u2019er \u00f8ger risikoen for for\u00e6ldede <strong>Sider<\/strong>.<\/p>\n\n<h2>Praktisk arbejdsgang til implementering<\/h2>\n<p>Jeg starter hvert projekt med en klar <strong>Planl\u00e6g<\/strong>: Definere m\u00e5l, markere stier, der skal caches, og fastl\u00e6gge dynamiske undtagelser. Derefter konfigurerer jeg cache-sti, zone, n\u00f8gle og header-reglerne. I n\u00e6ste trin tester jeg HIT\/MISS, kontrollerer cookies og overv\u00e5ger TTFB under en let belastningstest. Derefter optimerer jeg TTL, Stale og Locking, indtil kurverne ser korrekte ud. Til sidst dokumenterer jeg rensningsruter, ansvarsfordeling og en kort fremgangsm\u00e5de for redakt\u00f8rer, s\u00e5 indholdet altid <strong>frisk<\/strong> forbliver.<\/p>\n\n<h2>Praktisk NGINX-konfiguration og eksempler<\/h2>\n<p>Jeg anser konfigurationen for <strong>klar<\/strong> struktureret: en central cache-zone, entydig n\u00f8gle, klare skip-regler og nyttige diagnose-headere. Et solidt udgangspunkt ser s\u00e5ledes ud:<\/p>\n<pre><code>fastcgi_cache_path \/var\/cache\/nginx levels=1:2 keys_zone=WORDPRESS:100m \\\n    inactive=60m use_temp_path=off loader_files=200 loader_sleep=50ms loader_threshold=300ms;\n\nmap $request_method $skip_non_get {\n    default 1;\n    GET 0;\n    HEAD 0;\n}\n\nmap $http_cookie $skip_cookie {\n    default 0;\n    ~*(wordpress_logged_in|comment_author|woocommerce_items_in_cart|wp_woocommerce_session|woocommerce_cart_hash) 1;\n}\n\nmap $arg_preview $is_preview { standard 0; 1 1; }\nmap $request_uri $is_search { standard 0; ~*\\?s= 1; }\n\nserver {\n    # ...\n    set $skip_cache 0;\n    if ($skip_non_get) { set $skip_cache 1; }\n    if ($skip_cookie)  { set $skip_cache 1; }\n    if ($is_preview)   { set $skip_cache 1; }\n    if ($is_search)    { set $skip_cache 1; }\n\n    location ~ \\.php$ {\n include fastcgi_params;\n fastcgi_pass unix:\/run\/php\/php8.2-fpm.sock;\n\n        fastcgi_cache WORDPRESS;\n fastcgi_cache_key \"$scheme$request_method$host$request_uri\";\n fastcgi_cache_bypass    $skip_cache;\n        fastcgi_no_cache $skip_cache;\n\n fastcgi_cache_valid 200 301 302 10m;\n        fastcgi_cache_valid 404 1m;\n fastcgi_cache_use_stale updating error timeout http_500 http_502 http_503;\n fastcgi_cache_lock on;\n fastcgi_cache_lock_timeout 5s;\n\n        add_header X-Cache $upstream_cache_status always;\n add_header X-Cache-Key   $scheme$host$request_uri always;\n    }\n}<\/code><\/pre>\n<p>Jeg udvider det senere, afh\u00e6ngigt af projektet, med Vary-signaler (f.eks. sprog, valuta) og mere pr\u00e6cise udelukkelser. Vigtigt: POST, PUT, DELETE og alt med <strong>Autorisation<\/strong> eller <strong>Indstil cookie<\/strong> Jeg omg\u00e5r konsekvent PHP.<\/p>\n\n<h2>Variant- og cookie-strategier i detaljer<\/h2>\n<p>Jo f\u00e6rre varianter et HTML-dokument har, desto h\u00f8jere er hit-raten. Jeg reducerer bevidst antallet af varianter og opdeler kun der, hvor <strong>Udgaven skelner mellem<\/strong>:<\/p>\n<ul>\n  <li><strong>Sprog<\/strong>: En enkelt responsiv HTML-version er ideel. Hvis der findes separate sprogversioner, bruger jeg en sprogcookie eller URI\u2019en (f.eks. \/de\/, \/en\/) i n\u00f8glen, ikke user-agent.<\/li>\n  <li><strong>Enheder<\/strong>: Jeg undg\u00e5r UA-splits. Mobile-first CSS og responsive layouts bevarer cachen <strong>kompakt<\/strong>.<\/li>\n  <li><strong>Valuta\/land<\/strong>: For butikker med geolokalisering eller valutav\u00e6lger tilpasser jeg m\u00e5lrettet ud fra en stabil cookie, ikke ud fra IP-adressen. Ellers eksploderer kardinaliteten.<\/li>\n  <li><strong>Foresp\u00f8rgselsstrenge<\/strong>: Jeg s\u00e6tter nyttige parametre (f.eks. paginering, filter) p\u00e5 hvidlisten og ignorerer sporingsparametre (utm_*, gclid), s\u00e5 der ikke opst\u00e5r un\u00f8dvendige varianter.<\/li>\n<\/ul>\n<p>Man skal v\u00e6re s\u00e6rlig forsigtig med cookies fra samtykke-\/banner-plugins: Hvis de allerede s\u00e6tter cookies p\u00e5 startsiden, kan NGINX fejlagtigt opfatte det som dynamisk indhold. Jeg s\u00f8rger for, at rent <strong>visuel<\/strong> Bannere uden funktionelle konsekvenser udl\u00f8ser ikke en cache-BYPASS-kaskade.<\/p>\n\n<h2>Filsystem, cache-zone og loader-optimering<\/h2>\n<p>Valget af cache-hukommelse har en enorm indflydelse p\u00e5 ydeevnen. Jeg bruger hurtige lokale SSD\u2019er og planl\u00e6gger at <strong>keys_zone<\/strong> rigeligt (f.eks. 100\u2013256 MB til indekser), s\u00e5 metadata ikke fortr\u00e6nges. Den <strong>inaktiv<\/strong>\u2011Jeg fastl\u00e6gger tiden ud fra trafikprofilen: meget long-tail-indhold drager fordel af l\u00e6ngere inaktivitet, mens meget dynamiske portaler snarere ikke g\u00f8r det. Med loader_*-parametre regulerer jeg, hvor aggressivt NGINX forh\u00e5ndsindl\u00e6ser objekter \u2013 s\u00e5 systemet under belastning <strong>stille og roligt<\/strong> forbliver. For meget belastede websteder kan en delcache i tmpfs v\u00e6re en god id\u00e9, men jeg holder n\u00f8je \u00f8je med RAM-belastningen og inode-forbruget. Logrotation og begr\u00e6nsninger for antallet af filer forhindrer, at et volumen bliver fyldt op; overv\u00e5gningen holder \u00f8je med I\/O-ventetid, ledig plads og \u00e5bne fildeskriptorer.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/wordpress-nginx-fastcgi-cache-speed-8375.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Strukturere CDN- og browser-cachen p\u00e5 en overskuelig m\u00e5de<\/h2>\n<p>Jeg foretr\u00e6kker at kombinere NGINX-cachen med en <strong>Edge-CDN<\/strong> og solide TTL-v\u00e6rdier i browseren. Her g\u00e6lder f\u00f8lgende: Kilden (NGINX) leverer ensartede HTML-sider, CDN\u2019et bufferer dem yderligere, og browseren modtager moderat korte max-age-v\u00e6rdier, s\u00e5 redakt\u00f8rerne hurtigt kan se \u00e6ndringerne. Stale-mekanismer og <strong>revalidere<\/strong>\u2011Jeg indstiller strategierne s\u00e5ledes, at Edge-knudepunkter kan forts\u00e6tte med at levere indhold, mens NGINX genrenderer i baggrunden. Jeg udl\u00f8ser rensninger i en defineret r\u00e6kkef\u00f8lge (f\u00f8rst CDN, derefter Origin) eller synkront begge steder, s\u00e5 der ikke opst\u00e5r for\u00e6ldede flanker. Jeg kontrollerer desuden, at CDN-headere som Age, Cache-status og vary ikke er i konflikt med mine serverregler.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/nginx_fastcgi_cache_wp9331.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Forvarmning, implementering og redaktionelle arbejdsgange<\/h2>\n<p>For at undg\u00e5, at tusindvis af brugere udl\u00f8ser en koldstart efter en flush, forvarmer jeg vigtige sider <strong>m\u00e5lrettet<\/strong> F.eks.: Startsider, tops\u00e6lgere, kategorier, magasin-hub-sider. En str\u00f8mlinet preloader l\u00e6ser sitemappen, henter indholdet parallelt og overholder rate-limits, s\u00e5 hverken PHP eller databasen bliver overbelastet. Ved implementeringer skelner jeg mellem fuld opdatering (\u00e6ndring af tema\/kode) og delvis opdatering (indholdsopdatering) og dokumenterer <strong>Trin<\/strong> for redaktionen og driftsteamet. P\u00e5 den m\u00e5de forbliver udgivelsesvinduerne korte og med lav risiko.<\/p>\n\n<h2>Multisite, flersprogethed og valutalogik<\/h2>\n<p>I WordPress Multisite adskiller jeg cache-n\u00f8glerne strengt efter v\u00e6rtsnavn eller websteds-ID, s\u00e5 <strong>Undersider<\/strong> er klart adskilt. Til flersprogede sider med WPML\/Polylang foretr\u00e6kker jeg at bruge sprogstier (de\/en) eller dedikerede dom\u00e6ner; n\u00f8glen indeholder s\u00e5 skema, v\u00e6rt og sti. I webshops tager jeg n\u00f8je h\u00f8jde for valutacookies og geolokalisering: Jeg cachelagrer produkt- og kategorisider pr. valuta, mens indk\u00f8bskurven og kassen forbliver dynamiske. Hvis priser eller skattesatser \u00e6ndrer sig, udl\u00f8ser jeg en <strong>delvist<\/strong> Rens (produkt, kategori, teaser-moduler), s\u00e5 de centrale indgangssider hurtigt bliver ensartede.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/wordpress_nginx_cache_3421.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Belastningstest, m\u00e5linger og rollback<\/h2>\n<p>Inden systemet g\u00e5r i drift, simulerer jeg realistiske <strong>Tinder<\/strong> (GET\/HEAD-mix, ressourcer, HTML) og opdeler m\u00e5lingerne strengt: varmt vs. koldt, med\/uden CDN, indloggede vs. anonyme brugere. Jeg ser p\u00e5 P50\/P95-TTFB, fejlprocenter, CPU-udnyttelse, I\/O-ventetid og antallet af PHP-processer. I NGINX aktiverer jeg et passende log_format med $upstream_cache_status og tjekker stikpr\u00f8ver direkte i responsheaderen (HIT\/MISS\/BYPASS\/EXPIRED). En kort rollback-vej (skip-kontakt til cache-drift, reduceret TTL, deaktivering af enkelte regler) sikrer, at jeg ved afvigelser <strong>med det samme<\/strong> kan reagere uden at destabilisere hele systemet.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/nginxcaching-optimierung-1043.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Sikkerhed, n\u00f8jagtighed og databeskyttelse<\/h2>\n<p>Jeg s\u00f8rger konsekvent for, at fortroligt indhold ikke havner i cachen: administrationsomr\u00e5der, forh\u00e5ndsvisningsfunktioner, private sider, nonce-beskyttede handlinger. Jeg overholder skelnen mellem HEAD og GET, mens POST forbliver ikke-cachebar. Set-Cookie og Authorization betragtes som h\u00e5rde <strong>BYPASS<\/strong>\u2011signaler. Jeg udelader forh\u00e5ndsvisningssider (preview=true) og s\u00f8geresultater (s=), s\u00e5 der ikke opst\u00e5r falske resultater. Desuden kontrollerer jeg, at der ikke havner personlige data i HTML-svar, som derefter ville blive gemt bredt i cachen. Hvor det er n\u00f8dvendigt, indkapsler jeg personaliserede fragmenter via separate AJAX-endepunkter, som jeg bevidst <strong>ikke<\/strong> cache.<\/p>\n\n<h2>H\u00e5ndter edge-cases og undtagelser korrekt<\/h2>\n<p>Der er nogle m\u00f8nstre, jeg st\u00f8der p\u00e5 igen og igen: XML-sitemaps og feed-endpunkter cachelagrer jeg kortvarigt (f.eks. 1\u20135 minutter). 301\/302-omdirigeringer revaliderer jeg separat for at udelukke omdirigeringssl\u00f8jfer. Arkiv- og pagineringssider tildeles moderate TTL\u2019er, da de ofte indeholder links til <strong>frisk<\/strong> Indeholder indhold. Parametre, der kun p\u00e5virker sorteringen, kan indg\u00e5 i n\u00f8glen, men m\u00e5 ikke kunstigt forkorte TTL. Og hvis et plugin uventet s\u00e6tter cookies, tjekker jeg, om disse virkelig er n\u00f8dvendige for HTML-udskriften <strong>relevant<\/strong> er \u2013 ellers markerer jeg dem som \u00bbkan ignoreres\u00ab for at undg\u00e5 un\u00f8dvendige BYPASS-treffere.<\/p>\n\n<h2>Kort opsummeret<\/h2>\n<p>Med NGINX FastCGI Cache g\u00f8r jeg WordPress hurtigere ved at <strong>Kilde<\/strong>, leverer HTML direkte og sparer p\u00e5 dyre PHP-processer. Pr\u00e6cise udelukkelser og en p\u00e5lidelig purge-funktion holder indholdet opdateret, mens TTFB- og CPU-v\u00e6rdierne falder markant. En praktisk TTL med stale- og locking-funktioner sikrer en flydende levering, selv ved belastningsspidser. Hvis man konsekvent overv\u00e5ger m\u00e5lev\u00e6rdier og l\u00f8bende finjusterer reglerne, opn\u00e5r man vedvarende hurtige sider. P\u00e5 den m\u00e5de bliver hjemmesiden mere responsiv, forbliver nem at vedligeholde og vokser ubesv\u00e6ret i takt med stigende <strong>Trafik<\/strong> ind.<\/p>","protected":false},"excerpt":{"rendered":"<p>NGINX FastCGI Cache forbedrer WordPress\u2019 ydeevne og er et st\u00e6rkt alternativ til plugins.<\/p>","protected":false},"author":1,"featured_media":20907,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[733],"tags":[],"class_list":["post-20914","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"94","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"NGINX Cache","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"20907","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/posts\/20914","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/comments?post=20914"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/posts\/20914\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/media\/20907"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/media?parent=20914"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/categories?post=20914"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/tags?post=20914"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}