{"id":20906,"date":"2026-08-22T18:18:36","date_gmt":"2026-08-22T16:18:36","guid":{"rendered":"https:\/\/webhosting.de\/nginx-sendfile-tcp-nopush-ratgeber-performance-setup\/"},"modified":"2026-08-22T18:18:36","modified_gmt":"2026-08-22T16:18:36","slug":"nginx-sendfile-tcp-nopush-guide-prestanda-konfiguration","status":"publish","type":"post","link":"https:\/\/webhosting.de\/sv\/nginx-sendfile-tcp-nopush-ratgeber-performance-setup\/","title":{"rendered":"Att anv\u00e4nda NGINX sendfile och tcp_nopush p\u00e5 r\u00e4tt s\u00e4tt f\u00f6r maximal prestanda"},"content":{"rendered":"<p>Med <strong>nginx sendfile<\/strong> och <strong>tcp_nopush<\/strong> Jag levererar statiska filer med \u201dzero-copy\u201d fr\u00e5n filsystemet till socketen och minskar d\u00e4rmed m\u00e4rkbart b\u00e5de CPU-belastningen och antalet paket. Om de \u00e4r korrekt inst\u00e4llda \u00f6kar b\u00e5da direktiven \u00f6verf\u00f6ringseffektiviteten, minskar overheaden och l\u00e4gger grunden f\u00f6r en smidig nginx-optimering av tillg\u00e5ngar och nedladdningar.<\/p>\n\n<h2>Centrala punkter<\/h2>\n\n<ul>\n  <li><strong>Nollkopia<\/strong> med sendfile: f\u00e4rre kopior, h\u00f6gre genomstr\u00f6mning<\/li>\n  <li><strong>tcp_nopush<\/strong> buffrar paket: st\u00f6rre ramar, mindre overhead<\/li>\n  <li><strong>Kombination<\/strong> r\u00e4knas: sendfile + tcp_nopush + tcp_nodelay<\/li>\n  <li><strong>Anv\u00e4ndningsfall<\/strong> prioritera: statiska tillg\u00e5ngar, stora nedladdningar<\/li>\n  <li><strong>Tester<\/strong> f\u00f6r NFS\/SMB: M\u00e4ta effekten, st\u00e4ng av sendfile vid behov<\/li>\n<\/ul>\n\n<h2>Varf\u00f6r sendfile frig\u00f6r s\u00e5 mycket prestanda f\u00f6r NGINX<\/h2>\n\n<p>Jag aktiverar <strong>sendfile<\/strong>, eftersom k\u00e4rnan kan skicka filer direkt via n\u00e4tverksstacken utan att beh\u00f6va ta en omv\u00e4g via ytterligare kopieringsoperationer i anv\u00e4ndarutrymmet. Denna \u201dzero-copy\u201d-v\u00e4g minskar antalet kontextbyten och sparar CPU-cykler, s\u00e4rskilt n\u00e4r m\u00e5nga klienter samtidigt h\u00e4mtar statiskt inneh\u00e5ll. Stora filer som bilder, CSS, JavaScript eller arkiv gynnas eftersom data\u00f6verf\u00f6ringen sker j\u00e4mnare och med mindre overhead. \u00c4ven systemcacherna fungerar effektivare eftersom f\u00e4rre minnesflyttningar sker och k\u00e4rnan styr datastr\u00f6mmen. P\u00e5 lokala filsystem \u00e4r vinsten tydligast, vilket \u00e4r anledningen till att jag f\u00f6rst m\u00e4ter d\u00e4r innan jag \u00f6verf\u00f6r resultaten till mer exotiska konfigurationer.<\/p>\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-server-setup-8934.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Vad tcp_nopush egentligen g\u00f6r och n\u00e4r det kommer till sin r\u00e4tt<\/h2>\n\n<p>Med <strong>tcp_nopush<\/strong> Jag ber systemet att f\u00f6rst skicka TCP-paket n\u00e4r de \u00e4r fullt fyllda, ist\u00e4llet f\u00f6r att skicka sm\u00e5 segment f\u00f6r tidigt. Under Linux motsvarar detta TCP_CORK, under FreeBSD TCP_NOPUSH, och i b\u00e5da fallen minskar antalet paket m\u00e4rkbart. Direktivet minimerar inte latensen, utan syftar till ett b\u00e4ttre f\u00f6rh\u00e5llande mellan nyttodata och overhead. Jag anv\u00e4nder tcp_nopush specifikt f\u00f6r statiska filer, eftersom sammanh\u00e4ngande datastr\u00f6mmar d\u00e4r ger st\u00f6rst effektivitetsvinster. Utan sendfile har tcp_nopush ingen effekt, d\u00e4rf\u00f6r aktiverar jag alltid b\u00e5da inst\u00e4llningarna tillsammans.<\/p>\n\n<h2>sendfile och tcp_nopush i kombination: s\u00e5 h\u00e4r l\u00e4gger jag grunden<\/h2>\n\n<p>Kombinationen av <strong>sendfile<\/strong> och tcp_nopush minskar antalet kopior och grupperar paket, vilket g\u00f6r att en server per CPU-k\u00e4rna kan hantera betydligt fler parallella \u00f6verf\u00f6ringar. Jag konfigurerar b\u00e5da p\u00e5 http-kontextniv\u00e5n och l\u00e4gger ofta till tcp_nodelay s\u00e5 att den sista delen av ett fl\u00f6de kan skickas utan v\u00e4ntetid. Det \u00e4r fortfarande viktigt att testa med verklig trafik, eftersom paketstorlekar, MTU och klienter varierar och den b\u00e4sta balansen kan skilja sig n\u00e5got beroende p\u00e5 arbetsbelastningen. F\u00f6r statiska kataloger r\u00e4cker det oftast med global aktivering, medan jag vid dynamiska svarsv\u00e4gar h\u00e5ller ett \u00f6ga p\u00e5 effekten. Denna kombination ger en solid grund f\u00f6r ytterligare nginx-optimerings\u00e5tg\u00e4rder som l\u00e4ggs till senare.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>direktiv<\/th>\n      <th>Syfte<\/th>\n      <th>Typiska effekter<\/th>\n      <th>Beroende<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td><strong>sendfile p\u00e5<\/strong><\/td>\n      <td>Zero-Copy fr\u00e5n fil till socket<\/td>\n      <td>Mindre belastning p\u00e5 processorn, h\u00f6gre genomstr\u00f6mning<\/td>\n      <td>Ett lokalt filsystem \u00e4r idealiskt<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>tcp_nopush p\u00e5<\/strong><\/td>\n      <td>Fylla paket, s\u00e4nka omkostnaderna<\/td>\n      <td>F\u00e4rre segment per fil<\/td>\n      <td>Fungerar endast med sendfile<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>tcp_nodelay on<\/strong><\/td>\n      <td>Skicka de sista byte utan att v\u00e4nta<\/td>\n      <td>Snabb avslutning av \u00f6verf\u00f6ringen<\/td>\n      <td>Kompletterar tcp_nopush<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\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_performance_meeting_8371.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>S\u00e5 h\u00e4r samverkar tcp_nodelay med tcp_nopush<\/h2>\n\n<p>Jag aktiverar <strong>tcp_nopush<\/strong>, f\u00f6r att skicka b\u00f6rjan av en \u00f6verf\u00f6ring i st\u00f6rre paket, och till\u00e5ter samtidigt tcp_nodelay s\u00e5 att avslutningen inte fastnar. B\u00e5da inst\u00e4llningarna p\u00e5verkar olika faser i fl\u00f6det och st\u00f6r inte varandra n\u00e4r NGINX levererar filer via sendfile. S\u00e4rskilt vid m\u00e5nga sm\u00e5 filer f\u00f6rhindrar tcp_nodelay att klienten v\u00e4ntar i on\u00f6dan p\u00e5 grund av sm\u00e5 m\u00e4ngder \u00e5terst\u00e5ende data. Jag testar kombinationen f\u00f6rst i staging-milj\u00f6n, observerar RTT:er och segmentstorlekar och j\u00e4mf\u00f6r dem med live-metriker. P\u00e5 s\u00e5 s\u00e4tt s\u00e4kerst\u00e4ller jag effektivitet i b\u00f6rjan och snabbhet i slutet av \u00f6verf\u00f6ringen.<\/p>\n\n<pre><code>http {\n    sendfile on;\n    tcp_nopush on;\n    tcp_nodelay on;\n}\n<\/code><\/pre>\n\n<h2>Typiska anv\u00e4ndningsscenarier: d\u00e4r direktiven har stor inverkan<\/h2>\n\n<p>Vid stora <strong>Nedladdningar<\/strong> Precis som f\u00f6r videor, arkiv eller ISO-avbildningar minskar k\u00e4rnans Zero-Copy-v\u00e4g CPU-tiden per \u00f6verf\u00f6ring avsev\u00e4rt. I CDN-liknande konfigurationer med m\u00e5nga CSS-, JS- och teckensnittsfiler sparar tcp_nopush segment och \u00f6kar d\u00e4rmed den anv\u00e4ndbara bandbredden per socket. P\u00e5 WordPress-sidor med bra caching g\u00e4ller de flesta f\u00f6rfr\u00e5gningarna statiska tillg\u00e5ngar, vilket g\u00f6r att jag ser effekten d\u00e4r mycket snabbt. \u00c4ven byggartefakter, containerbilder eller installationsprogram drar nytta av detta, f\u00f6rutsatt att de finns lokalt och inte kommer via ett instabilt n\u00e4tverksfilsystem. Den som f\u00f6rv\u00e4ntar sig belastningstoppar f\u00e5r med denna kombination ut mycket stabilitet ur den befintliga h\u00e5rdvaran.<\/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-performance-optimization-2378.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Praktiskt exempel: NGINX f\u00f6r WordPress med caching och tillg\u00e5ngar<\/h2>\n\n<p>I WordPress-installationer anv\u00e4nder jag <strong>sendfile<\/strong>, tcp_nopush och tcp_nodelay globalt, levererar statiska resurser direkt och h\u00e5ller PHP-FPM f\u00f6r dynamiska s\u00f6kv\u00e4gar tydligt \u00e5tskilda. Jag l\u00e4gger till meningsfulla cache-headers f\u00f6r bilder, CSS och JavaScript s\u00e5 att webbl\u00e4sarna orsakar f\u00e4rre rundresor. N\u00e4r jag levererar str\u00f6mningsliknande svar tar jag h\u00e4nsyn till interaktionen med buffring och testar hur chunkstorlekar p\u00e5verkar latens och genomstr\u00f6mning; detta passar bra ihop med \u00f6versikten \u00f6ver <a href=\"https:\/\/webhosting.de\/sv\/http-svar-streaming-hosting-prestanda-prestanda-bitar\/\">Svarsstr\u00f6mning i bitar<\/a>. F\u00f6r textbaserat inneh\u00e5ll anv\u00e4nder jag komprimering utan att packa bin\u00e4rfiler i on\u00f6dan. P\u00e5 s\u00e5 s\u00e4tt f\u00f6rblir beg\u00e4randefl\u00f6det stabilt, CPU:n belastas inte f\u00f6r mycket och tiden till f\u00f6rsta byte blir kort.<\/p>\n\n<pre><code>http {\n    sendfile on;\n    tcp_nopush on;\n    tcp_nodelay on;\n\n keepalive_timeout 65;\n    gzip on;\n    gzip_types text\/css application\/javascript image\/svg+xml;\n\n    server {\n listen 80;\n server_name blog.example.com;\n root \/var\/www\/blog;\n\n location \/ {\n try_files $uri $uri\/ \/index.php?$args;\n }\n\n        location ~ \\.php$ {\n include fastcgi_params;\n fastcgi_pass unix:\/run\/php\/php-fpm.sock;\n            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n }\n\n location ~* \\.(jpg|jpeg|png|gif|css|js|ico|svg|woff2?)$ {\n expires 30d;\n add_header Cache-Control \"public, max-age=2592000\";\n }\n    }\n}\n<\/code><\/pre>\n\n<h2>N\u00e4r jag medvetet inaktiverar sendfile<\/h2>\n\n<p>Jag byter <strong>sendfile<\/strong> om filerna ligger p\u00e5 NFS, SMB eller distribuerade filsystem, som i mitt test ger s\u00e4mre genomstr\u00f6mning. Vissa drivrutiner eller f\u00f6rdr\u00f6jningar i lagringsv\u00e4gen kan upph\u00e4va f\u00f6rdelarna med zero-copy, varf\u00f6r m\u00e4tningar \u00e4r avg\u00f6rande. Vid sporadiska n\u00e4tverksproblem st\u00e4nger jag f\u00f6rst av tcp_nopush f\u00f6r att avgr\u00e4nsa effekterna innan jag ifr\u00e5gas\u00e4tter sendfile i sig. \u00c4ven ovanliga k\u00e4rnbuggar eller \u00e4ldre stackar kan vara sk\u00e4l att tillf\u00e4lligt byta till den klassiska l\u00e4s- och skrivv\u00e4gen. Det \u00e4r viktigt att inf\u00f6ra \u00e4ndringar stegvis och underbygga dem med m\u00e4tv\u00e4rden.<\/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_performance_3456.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Felk\u00e4llor som jag h\u00e5ller koll p\u00e5<\/h2>\n\n<p>Jag kontrollerar f\u00f6rst om <strong>tcp_nopush<\/strong> \u00e4r aktiverad av misstag medan sendfile \u00e4r avst\u00e4ngd, eftersom inst\u00e4llningen d\u00e5 inte har n\u00e5gon effekt. N\u00e4r det g\u00e4ller dynamiska s\u00f6kv\u00e4gar observerar jag om ytterligare buffringar \u00f6kar latensen och v\u00e4ger f\u00f6rdelarna mot svarstiden. I n\u00e4tverk med h\u00f6g latens m\u00e4ter jag om st\u00f6rre paket verkligen hj\u00e4lper eller om jag beh\u00f6ver finjustera segmentstorlekar och keep-alive. \u00c4ven MTU-konfigurationen och n\u00e4tverkskortets avlastningsfunktioner kan m\u00e4rkbart p\u00e5verka resultatet. Tydliga loggar, pcap-prov och korrelerade systemmetriker visar mig snabbt var jag beh\u00f6ver justera.<\/p>\n\n<h2>Att t\u00e4nka helhetsm\u00e4ssigt kring NGINX-prestanda: ytterligare justeringsm\u00f6jligheter<\/h2>\n\n<p>F\u00f6rutom <strong>sendfile<\/strong> Det l\u00f6nar sig att ange r\u00e4tt antal worker_processes och worker_connections, s\u00e5 att jag inte begr\u00e4nsar antalet socklar p\u00e5 konstgjord v\u00e4g. Under Linux anv\u00e4nder jag epoll och ser till att det finns tillr\u00e4ckligt med filbeskrivare, s\u00e5 att belastningstoppar inte leder till flaskhalsar. F\u00f6r textinneh\u00e5ll aktiverar jag gzip eller Brotli och testar om komprimeringsniv\u00e5n belastar processorn p\u00e5 ett rimligt s\u00e4tt. P\u00e5 transportniv\u00e5n h\u00e5ller jag anslutningarna \u00f6ppna l\u00e4ngre och optimerar Keep-Alive, vilket beskrivs i handledningen <a href=\"https:\/\/webhosting.de\/sv\/http-keep-alive-tuning-serverbelastning-prestandaoptimering-floede\/\">Keep-Alive-inst\u00e4llning<\/a> ger praktiska riktlinjer. TLS, \u00e5teranv\u00e4ndning av sessioner samt HTTP\/2 eller HTTP\/3 kompletterar konfigurationen och m\u00f6jligg\u00f6r h\u00f6g parallellitet med m\u00e5ttlig latens.<\/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_performance_4203.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Begr\u00e4nsningar och specialfall: TLS, HTTP\/2\/3 och proxyserveranv\u00e4ndning<\/h2>\n\n<p>Jag tar h\u00e4nsyn till att <strong>sendfile<\/strong> tekniskt sett endast g\u00e4ller f\u00f6r okrypterade filv\u00e4gar eller s\u00e4rskilda k\u00e4rnfunktioner. Vid klassisk TLS krypterar NGINX byten i anv\u00e4ndarutrymmet, varf\u00f6r f\u00f6rdelen med zero-copy g\u00e5r f\u00f6rlorad; moderna k\u00e4rnor kan delvis flytta krypteringen till k\u00e4rnan, vilket \u00e5terst\u00e4ller effekten, men detta \u00e4r inte tillg\u00e4ngligt i alla konfigurationer. Vid <strong>HTTP\/2<\/strong> Om data finns i ramar, flera svar delar p\u00e5 en TCP-anslutning och NGINX ompaketerar aktivt byten \u2013 d\u00e5 \u00e4r sendfile mindre relevant. <strong>HTTP\/3<\/strong> baseras p\u00e5 UDP\/QUIC och f\u00f6ljer \u00e5terigen andra regler, vilket inneb\u00e4r att jag snarare uppn\u00e5r effektivitetsvinster genom buffertar, \u00f6verbelastningskontroll och korrekt valda chunkstorlekar. Som <strong>Omv\u00e4nd proxy<\/strong> sendfile tr\u00e4der endast i kraft n\u00e4r jag faktiskt serverar filer fr\u00e5n det lokala filsystemet; svar fr\u00e5n <em>proxy_pass<\/em> eller . <em>fastcgi_pass<\/em> g\u00e5r \u00e4nd\u00e5 via anv\u00e4ndarutrymmet. D\u00e4rf\u00f6r separerar jag tillg\u00e5ngarna strikt fr\u00e5n den dynamiska s\u00f6kv\u00e4gen, s\u00e5 att Zero-Copy-metoden utnyttjas maximalt.<\/p>\n\n<h2>Att f\u00f6rst\u00e5 komprimering p\u00e5 r\u00e4tt s\u00e4tt: gzip\/Brotli kontra gzip_static<\/h2>\n\n<p>N\u00e4r NGINX komprimerar inneh\u00e5ll i realtid m\u00e5ste det l\u00e4sa filen, bearbeta den och skriva ut resultatet \u2013 och d\u00e5 g\u00e5r <strong>sendfile<\/strong> sin f\u00f6rdel. F\u00f6r statiska tillg\u00e5ngar anv\u00e4nder jag d\u00e4rf\u00f6r, d\u00e4r det \u00e4r m\u00f6jligt, <em>f\u00f6rkomprimerade<\/em> Filer (t.ex. .gz eller .br) och l\u00e5ter dem levereras direkt. P\u00e5 s\u00e5 s\u00e4tt bibeh\u00e5lls Zero-Copy-v\u00e4gen, eftersom NGINX kan vidarebefordra den f\u00f6rkomprimerade filen precis som vilken annan resurs som helst. F\u00f6r textintensivt inneh\u00e5ll som s\u00e4llan \u00e4ndras uppn\u00e5r jag p\u00e5 s\u00e5 s\u00e4tt CPU-besparingar och stabil genomstr\u00f6mning utan att f\u00f6rlora \u00f6verf\u00f6ringstid. N\u00e4r det g\u00e4ller bin\u00e4ra filer och redan komprimerade format slipper jag all komprimering under k\u00f6rning \u2013 h\u00e4r \u00e4r det ren I\/O-genomstr\u00f6mning som r\u00e4knas, och sendfile plus tcp_nopush visar sina styrkor.<\/p>\n\n<h2>AIO, directio och sidcache: m\u00f6nster f\u00f6r sm\u00e5 och stora filer<\/h2>\n\n<p>Jag kombinerar <strong>sendfile<\/strong> med asynkron I\/O och direkt disk\u00e5tkomst f\u00f6r att uppn\u00e5 b\u00e4sta m\u00f6jliga resultat beroende p\u00e5 filstorlek. Sm\u00e5 till medelstora filer drar nytta av k\u00e4rnans sidcache och f\u00f6rblir p\u00e5 sendfile-v\u00e4gen. Mycket stora filer kan d\u00e4remot tr\u00e4nga undan cachen; d\u00e5 l\u00e4ser jag dem specifikt med <em>direktiv<\/em> utanf\u00f6r cachen och arbetar med AIO-tr\u00e5dar. P\u00e5 s\u00e5 s\u00e4tt avlastar jag minnet och h\u00e5ller latensen l\u00e5g f\u00f6r andra f\u00f6rfr\u00e5gningar. Ett typiskt m\u00f6nster ser ut s\u00e5 h\u00e4r:<\/p>\n\n<pre><code>http {\n    # Standardv\u00e4g: Zero-Copy fr\u00e5n sidcachen\n    sendfile on;\n    tcp_nopush on;\n    tcp_nodelay on;\n\n # Stora filer: f\u00f6rbi cachen och asynkron l\u00e4sning\n    aio threads;\n    directio 4m; # g\u00e4ller endast f\u00f6r filer &gt;= 4 MiB\n    output_buffers 1 512k;    # Buffert f\u00f6r directio-v\u00e4gar\n    sendfile_max_chunk 1m;    # J\u00e4mn belastning vid h\u00f6g belastning\n}\n<\/code><\/pre>\n\n<p>Med denna gradering f\u00f6rblir sm\u00e5 tillg\u00e5ngar extremt effektiva, samtidigt som mycket stora \u00f6verf\u00f6ringar inte \u00f6verbelastar arbetsminnet. Viktigt: directio inaktiverar sendfile-v\u00e4gen f\u00f6r ber\u00f6rda filer \u2013 precis som jag avser att g\u00f6ra f\u00f6r anv\u00e4ndningsfallet med stora filer.<\/p>\n\n<h2>R\u00e4ttvisa och fl\u00f6deskontroll under belastning<\/h2>\n\n<p>Under perioder med h\u00f6g belastning vill jag undvika att en enda str\u00f6m monopoliserar processorn eller sockeln. Jag anv\u00e4nder <strong>sendfile_max_chunk<\/strong>, s\u00e5 att NGINX returnerar k\u00e4rnan efter en definierad m\u00e4ngd byte och ger utrymme \u00e5t andra anslutningar. F\u00f6r bandbreddshantering \u00e4r f\u00f6ljande till hj\u00e4lp <em>limit_rate<\/em> och <em>limit_rate_after<\/em>, till exempel f\u00f6r att begr\u00e4nsa massnedladdningar samtidigt som UI-resurserna f\u00f6rblir snabba. Med <em>postpone_output<\/em> Jag styr vid vilken svarsstorlek NGINX b\u00f6rjar skicka \u2013 i kombination med tcp_nopush ser jag d\u00e4rmed till att paketdelningen blir ren. Dessutom ser jag till att <em>lingering_close<\/em>, s\u00e5 att \u00e5terst\u00e5ende paket kan skickas vidare p\u00e5 ett korrekt s\u00e4tt och att anslutningen inte avslutas abrupt.<\/p>\n\n<h2>Filsystem, readahead och lagringsv\u00e4gar<\/h2>\n\n<p>D\u00e4rf\u00f6r att <strong>sendfile<\/strong> N\u00e4r man anv\u00e4nder sidcacher spelar det underliggande filsystemet en viktig roll. Jag kontrollerar readahead-v\u00e4rdena och justerar dem s\u00e5 att sekventiella l\u00e4soperationer av stora filer inte avstannar, utan att mindre resurser tr\u00e4ngs undan. P\u00e5 <em>ext4<\/em> eller . <em>xfs<\/em> Jag observerar hur v\u00e4l prefetching och I\/O-schemal\u00e4ggaren harmonierar med mitt genomstr\u00f6mningsm\u00f6nster. P\u00e5 n\u00e4tverksfilsystem (NFS\/SMB) testar jag rsize\/wsize, caching och latenser noggrant, eftersom \u00e4ven sm\u00e5 avvikelser neutraliserar f\u00f6rdelarna med zero-copy. Min regel \u00e4r fortfarande: utnyttja f\u00f6rst de lokala s\u00f6kv\u00e4garna maximalt, justera sedan de externa stackarna f\u00f6rsiktigt \u2013 och l\u00e5t alltid m\u00e4tv\u00e4rdena g\u00e5 f\u00f6re magk\u00e4nslan.<\/p>\n\n<h2>Pragmatisk anpassning av n\u00e4tverksstacken och NIC-avlastning<\/h2>\n\n<p>Vid ett stort antal anslutningar f\u00f6rlitar jag mig p\u00e5 den automatiska buffertjusteringen i moderna stackar, men justerar s\u00e4ndnings- och mottagningsbuffertarna vid behov. NIC-avlastningar som TSO, GSO och GRO minskar CPU-belastningen m\u00e4rkbart; vid m\u00e4tningar \u00e4r jag dock f\u00f6rsiktig, eftersom paketf\u00e5ngster kan f\u00f6rvr\u00e4ngas av avlastningen (till synes f\u00e5, mycket stora segment). D\u00e4rf\u00f6r korrelerar jag <em>pcap<\/em>\u2011Sp\u00e5r med m\u00e4tv\u00e4rden fr\u00e5n NGINX och k\u00e4rnan f\u00f6r att skilja verkliga tr\u00e5dstorlekar fr\u00e5n avlastningsartefakter. Vid latensspikar avbryter jag testerna kortvarigt med avlastningen inaktiverad, dokumenterar skillnaden och avg\u00f6r sedan vad som ger st\u00f6rst nytta vid kontinuerlig drift.<\/p>\n\n<h2>Konfigurationsmallar per plats: aktivera och inaktivera selektivt<\/h2>\n\n<p>Jag h\u00e5ller d\u00f6rren \u00f6ppen f\u00f6r att, <strong>sendfile<\/strong> att skriva \u00f6ver beroende p\u00e5 s\u00f6kv\u00e4g eller filtyp. F\u00f6r statiska kataloger f\u00f6rblir den aktiverad, medan jag f\u00f6r str\u00f6mmande eller dynamiska s\u00f6kv\u00e4gar inaktiverar den selektivt n\u00e4r buffertar eller filter (t.ex. komprimering) har f\u00f6retr\u00e4de. Ett kort exempel:<\/p>\n\n<pre><code>server {\n    listen 80;\n    server_name static.example.com;\n    root \/var\/www\/static;\n\n # Statiska resurser: Zero-Copy\n    location \/assets\/ {\n sendfile on;\n tcp_nopush on;\n        tcp_nodelay on;\n expires 7d;\n    }\n\n # Dynamiskt inneh\u00e5ll eller streaming: Flexibilitet f\u00f6re Zero-Copy\n    location \/api\/ {\n sendfile off;\n proxy_pass http:\/\/app_upstream;\n    }\n}\n<\/code><\/pre>\n\n<p>Denna \u00e5tskillnad f\u00f6rhindrar att jag g\u00e5r miste om f\u00f6rdelar p\u00e5 den ena sidan, bara f\u00f6r att en annan v\u00e4g st\u00e4ller s\u00e4rskilda krav.<\/p>\n\n<h2>Range, Slices och stora kataloger<\/h2>\n\n<p>Vid stora objekt g\u00e4ller f\u00f6ljande <strong>R\u00e4ckvidd<\/strong>-f\u00f6rfr\u00e5gningar utnyttjar sina styrkor: Klienten laddar endast n\u00f6dv\u00e4ndiga delar, och anslutningarna f\u00f6rblir stabila. I inneh\u00e5llskataloger med mycket stora filer segmenterar jag g\u00e4rna \u00f6verf\u00f6ringarna logiskt \u2013 serverbelastningen f\u00f6rdelas j\u00e4mnare, och fel som avbrott tar mindre tid. I cachelagringsscenarier f\u00f6rebygger jag \u201eThundering Herds\u201c genom att buffra svar p\u00e5 ett meningsfullt s\u00e4tt, men utan att artificiellt h\u00e5lla kvar sm\u00e5 delar och \u00e5terst\u00e5ende data. Samspelet med tcp_nopush \u00e4r centralt i detta sammanhang: jag h\u00e5ller inledande segment stora, men l\u00e5ter inte slutet v\u00e4nta.<\/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-performance-5678.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>M\u00e4t- och teststrategi: P\u00e5litligt p\u00e5visa effekter<\/h2>\n\n<p>Jag underbygger optimeringarna med reproducerbara tester. P\u00e5 serversidan \u00f6vervakar jag CPU-profiler, <em>1TP4Beg\u00e4ran_tid<\/em>, <em>1 TP 4 Tbyte skickade<\/em>, aktiva anslutningar och kontextbyten. I n\u00e4tverket m\u00e4ter jag segmentstorlekar, \u00e5teruts\u00e4ndningar och RTT-f\u00f6rdelning; jag korrelerar paketf\u00e5ngster med socket-statistik f\u00f6r att ta h\u00e4nsyn till avlastningseffekter. P\u00e5 klientsidan j\u00e4mf\u00f6r jag TTFB, First Contentful Paint och nedladdningstider under realistiska RTT-v\u00e4rden och bandbredder. Jag varierar MTU, Keep-Alive-inst\u00e4llningar och filstorlekar s\u00e5 att jag inte bara ser kurvor f\u00f6r b\u00e4sta t\u00e4nkbara fall. Till slut avg\u00f6r jag utifr\u00e5n konkreta siffror om sendfile\/tcp_nopush ger \u00f6nskad stabilitet och effektivitet i den aktuella arbetsbelastningen \u2013 och finjusterar tills de g\u00f6r det.<\/p>\n\n<h2>HTTP-detaljer som g\u00f6r skillnad: Range och streaming<\/h2>\n\n<p>Jag anv\u00e4nder <strong>R\u00e4ckvidd<\/strong>-Beg\u00e4randen vid stora filer, s\u00e5 att klienterna endast laddar ner n\u00f6dv\u00e4ndiga delar och anslutningarna f\u00f6rblir stabila. S\u00e4rskilt vid videof\u00f6rskjutningar och \u00e5terupptagna uppdateringar bidrar ett v\u00e4lfungerande st\u00f6d f\u00f6r byteintervall till att f\u00f6rdelningen av genomstr\u00f6mningen sker p\u00e5 ett effektivt s\u00e4tt; bakgrundsinformation finns p\u00e5 sidan om <a href=\"https:\/\/webhosting.de\/sv\/http-raeckvidd-foerfragningar-media-och-nedladdning-hosting-prestanda-byte\/\">HTTP-Range-f\u00f6rfr\u00e5gningar<\/a>. F\u00f6r l\u00f6pande svar med v\u00e4xande inneh\u00e5ll testar jag str\u00f6mningsstrategier och ser till att buffertarna inte oavsiktligt beh\u00e5ller data f\u00f6r l\u00e4nge. Samtidigt tar jag h\u00e4nsyn till cacher och anger l\u00e4mpliga rubriker s\u00e5 att proxyservrar och webbl\u00e4sare fungerar korrekt. Jag tar h\u00e4nsyn till samspelet med tcp_nopush, eftersom paketstorlekar och tidpunkten f\u00f6r t\u00f6mningen har direkt inverkan p\u00e5 den upplevda hastigheten.<\/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-performance-5678.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Kortfattat sammanfattat<\/h2>\n\n<p>Med <strong>sendfile<\/strong> Jag vidarebefordrar filer effektivt direkt till k\u00e4rnan, och med tcp_nopush ser jag till att paketen fylls p\u00e5 ett l\u00e4mpligt s\u00e4tt innan de belastar linjen. Dessa b\u00e5da direktiv kompletterar varandra, medan tcp_nodelay levererar den sista byte-resten utan f\u00f6rdr\u00f6jning. Jag testar effekten under verklig trafik, h\u00e5ller koll p\u00e5 lagringsv\u00e4gen, MTU, Keep-Alive och komprimering och m\u00e4ter noggrant. F\u00f6r WordPress- och CDN-liknande arbetsbelastningar blir nyttan s\u00e4rskilt snabbt tydlig, eftersom m\u00e5nga f\u00f6rfr\u00e5gningar g\u00e4ller statiska resurser. Den som anv\u00e4nder inst\u00e4llningarna p\u00e5 ett m\u00e5linriktat s\u00e4tt uppn\u00e5r h\u00f6gre genomstr\u00f6mning per k\u00e4rna, minskar overhead och skapar reserver f\u00f6r verkliga tillv\u00e4xttoppar.<\/p>","protected":false},"excerpt":{"rendered":"<p>Praktisk guide till konfigurationen av NGINX:s sendfile och tcp_nopush f\u00f6r maximal prestanda vid leverans av statiska filer och stora nedladdningar.<\/p>","protected":false},"author":1,"featured_media":20899,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[834],"tags":[],"class_list":["post-20906","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-plesk-webserver-plesk-administration-anleitungen"],"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":"165","_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 sendfile","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":"20899","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/20906","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/comments?post=20906"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/20906\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media\/20899"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media?parent=20906"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/categories?post=20906"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/tags?post=20906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}