Nginx สามารถแคชคำขอได้ด้วยตัวเอง ข้อดีของการใช้แคช Nginx คือความเรียบง่ายเมื่อเทียบกับวานิช
จะแคชอะไร?จุดสำคัญของการแคชเซิร์ฟเวอร์คือการหลีกเลี่ยงการสร้างสคริปต์เดิมอย่างต่อเนื่อง (เช่น ฟีดโพสต์ Wordpress) ซึ่งบางครั้งอาจใช้เวลาทั้งวินาที แอปพลิเคชันจะสร้างเพจขึ้นมาหนึ่งครั้งและผลลัพธ์จะถูกเก็บไว้ในหน่วยความจำแทน เมื่อผู้เยี่ยมชมร้องขอเพจเดิมเป็นครั้งที่สอง จะไม่มีการสร้างอีกต่อไป และไคลเอนต์จะได้รับเวอร์ชันที่เก็บไว้ในหน่วยความจำ นานๆ ครั้ง (เรียกว่า ttl) เวอร์ชันที่บันทึกไว้นี้จะถูกลบและสร้างเวอร์ชันใหม่เพื่อให้ข้อมูลอัปเดตอยู่เสมอ
เกือบทุกไซต์สามารถแคชเพจสำหรับผู้ใช้ที่ไม่ได้รับอนุญาตได้ เหมาะอย่างยิ่งสำหรับไซต์ที่มีเนื้อหาที่เปิดเผยต่อสาธารณะ
การเปิดใช้งานแคชใน Nginxก่อนอื่นคุณต้องกำหนดขนาดแคชสูงสุด (ขนาดรวมของเพจทั้งหมดในแคชจะไม่เกินขนาดนี้) ซึ่งทำได้ในไฟล์การตั้งค่าหลัก (nginx.conf) ในส่วน http:
Http ( ... proxy_cache_path /var/cache/nginx ระดับ=1:2keys_zone=all:32m max_size=1g ; ... )
# ตั้งค่าขนาดแคชเป็น 1G เราจะบันทึกไว้ในโฟลเดอร์ /var/cache/nginx
อย่าลืมสร้างโฟลเดอร์แคช mkdir /var/cache/nginx.mkdir
การตั้งค่าโฮสต์เพื่อให้แคชทำงานได้ เราต้องสร้างโฮสต์ใหม่ที่จะรับฟังบนพอร์ต 80 และย้ายโฮสต์หลักไปยังพอร์ตอื่น (เช่น 81) โฮสต์แคชจะส่งคำขอไปยังโฮสต์หลักหรือให้บริการข้อมูลจากแคช
การแคชเซิร์ฟเวอร์โฮสต์ ( Listen 80; location / ( proxy_pass http://127.0.0.1:81/; proxy_cache all; proxy_cache_valid ใด ๆ 1h; ) )# แต่ละหน้าจะถูกแคชเป็นเวลา 1 ชั่วโมง
เซิร์ฟเวอร์โฮสต์หลัก ( Listen 81; ตำแหน่ง / ( # fpm ฯลฯ ) )# กำหนดค่าปกติเฉพาะบนพอร์ต 81
คุกกี้และการปรับเปลี่ยนในแบบของคุณไซต์จำนวนมากใช้บล็อกส่วนตัวต่างๆ บนหน้าเว็บ เทคโนโลยี SSI ช่วยให้สามารถแคชขั้นสูงได้ในกรณีที่มีบล็อกส่วนตัวจำนวนมาก ในกรณีง่ายๆ เราสามารถปิดการใช้งานแคชได้หากผู้ใช้ติดตั้งคุกกี้ไว้
เซิร์ฟเวอร์ ( ฟัง 80; ตำแหน่ง / ( if ($http_cookie ~* ".+") ( set $do_not_cache 1; ) proxy_cache_bypass $do_not_cache; proxy_pass http://127.0.0.1:81/; proxy_cache all; proxy_cache_valid ใด ๆ 1h; ) )
ข้อผิดพลาดนอกจากนี้ ยังสมเหตุสมผลที่จะเปิดใช้งานการแคชคำขอที่ล้มเหลวในช่วงเวลาสั้นๆ วิธีนี้จะหลีกเลี่ยงความพยายามซ้ำหลายครั้งในการเข้าถึงส่วนที่เสียหายของไซต์
เซิร์ฟเวอร์ ( ฟัง 80; ตำแหน่ง / ( if ($http_cookie ~* ".+") ( set $do_not_cache 1; ) proxy_cache_bypass $do_not_cache; proxy_pass http://127.0.0.1:81/; proxy_cache ทั้งหมด; proxy_cache_valid 404 502 503 1m ; proxy_cache_valid ใด ๆ 1h;
การแคช fastcgiNginx ช่วยให้คุณแคชการตอบสนองจาก fastcgi หากต้องการเปิดใช้งานแคชนี้ คุณต้องประกาศพารามิเตอร์ด้วย (ในส่วน http ของไฟล์ nginx.conf):
Fastcgi_cache_path /var/cache/fpm ระดับ=1:2keys_zone=fcgi:32m max_size=1g; fastcgi_cache_key "$scheme$request_method$host$request_uri";
# ตั้งค่าขนาดแคชสูงสุดเป็น 1G
อย่าลืมสร้างโฟลเดอร์ mkdir /var/cache/fpm
ในการกำหนดค่าโฮสต์หลัก ให้เพิ่มกฎการแคช:
เซิร์ฟเวอร์ ( ฟัง 80; ตำแหน่ง ~ \.php$ ( fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; รวม fastcgi_params; fastcgi_cache fcgi; fastcgi_cache_valid 200 60m; ) )
# ในกรณีนี้ เราจะแคชคำตอบด้วยรหัส 200 เป็นเวลา 60 นาที
ที่สำคัญที่สุดใช้ประโยชน์จากแคช ติดตั้งง่าย แต่สามารถเพิ่มความเร็วไซต์ของคุณได้เป็นสิบเท่าและประหยัดทรัพยากร
เราทุกคนรู้ดีว่าประสิทธิภาพของแอปพลิเคชันและเว็บไซต์เป็นปัจจัยสำคัญต่อความสำเร็จ อย่างไรก็ตาม กระบวนการทำให้แอปพลิเคชันหรือเว็บไซต์ของคุณทำงานได้ดีขึ้นนั้นไม่ได้ชัดเจนเสมอไป แน่นอนว่าคุณภาพของโค้ดและโครงสร้างพื้นฐานเป็นสิ่งสำคัญ แต่ในหลายกรณี คุณสามารถปรับปรุงประสบการณ์ผู้ใช้แอปพลิเคชันของคุณได้อย่างมาก โดยมุ่งเน้นไปที่เทคนิคการส่งมอบแอปพลิเคชันพื้นฐานบางอย่าง ตัวอย่างหนึ่งคือการใช้และเพิ่มประสิทธิภาพแคชในสแต็กแอปพลิเคชันของคุณ โพสต์ในบล็อกนี้ครอบคลุมถึงเทคนิคที่สามารถช่วยให้ผู้ใช้มือใหม่และผู้ใช้ขั้นสูงเห็นประสิทธิภาพที่ดีขึ้นจากการใช้สิ่งที่รวมอยู่ใน NGINX และ NGINX Plus
ภาพรวมแคชเนื้อหาอยู่ระหว่างไคลเอนต์และ “เซิร์ฟเวอร์ต้นทาง” และบันทึกสำเนาของเนื้อหาทั้งหมดที่เห็น หากไคลเอนต์ร้องขอเนื้อหาที่แคชเก็บไว้ แคชจะส่งคืนเนื้อหาโดยตรงโดยไม่ต้องติดต่อกับเซิร์ฟเวอร์ต้นทาง สิ่งนี้ช่วยปรับปรุงประสิทธิภาพเนื่องจากแคชเนื้อหาอยู่ใกล้กับไคลเอนต์มากขึ้น และใช้เซิร์ฟเวอร์แอปพลิเคชันได้อย่างมีประสิทธิภาพมากขึ้น เนื่องจากไม่จำเป็นต้องสร้างเพจตั้งแต่เริ่มต้นในแต่ละครั้ง
อาจมีแคชหลายรายการระหว่างเว็บเบราว์เซอร์และแอปพลิเคชันเซิร์ฟเวอร์: แคชของเบราว์เซอร์ไคลเอ็นต์ แคชตัวกลาง เครือข่ายการจัดส่งเนื้อหา (CDN) และโหลดบาลานเซอร์หรือพร็อกซีย้อนกลับที่อยู่ด้านหน้าเซิร์ฟเวอร์แอปพลิเคชัน การแคช แม้ในระดับพร็อกซีย้อนกลับ/โหลดบาลานเซอร์ ก็สามารถปรับปรุงประสิทธิภาพได้อย่างมาก
ตัวอย่างเช่น ปีที่แล้วฉันรับหน้าที่ปรับแต่งประสิทธิภาพของเว็บไซต์ที่โหลดช้า สิ่งแรกๆ ที่ฉันสังเกตเห็นคือใช้เวลามากกว่า 1 วินาทีในการสร้างหน้าแรกหลัก หลังจากการดีบัก ฉันค้นพบว่าเนื่องจากเพจถูกทำเครื่องหมายว่าไม่สามารถแคชได้ จึงถูกสร้างขึ้นแบบไดนามิกเพื่อตอบสนองต่อคำขอแต่ละรายการ ตัวเพจไม่ได้เปลี่ยนแปลงบ่อยนักและไม่ได้ปรับให้เป็นแบบส่วนตัว ดังนั้นจึงไม่จำเป็น จากการทดลอง ฉันทำเครื่องหมายให้หน้าแรกถูกแคชไว้เป็นเวลา 5 วินาทีโดยตัวจัดสรรภาระงาน และการทำเช่นนั้นส่งผลให้มีการปรับปรุงที่เห็นได้ชัดเจน เวลาในการไบต์แรกลดลงเหลือสองสามมิลลิวินาทีและหน้าเว็บโหลดเร็วขึ้นอย่างเห็นได้ชัด
โดยทั่วไปแล้ว NGINX จะถูกใช้งานเป็นพร็อกซีย้อนกลับหรือโหลดบาลานเซอร์ในสแต็กแอปพลิเคชัน และมีคุณสมบัติการแคชครบชุด ส่วนถัดไปจะอธิบายวิธีกำหนดค่าแคชพื้นฐานด้วย NGINX
วิธีการตั้งค่าและกำหนดค่าการแคชพื้นฐานจำเป็นต้องใช้เพียงสองคำสั่งเท่านั้นในการเปิดใช้งานการแคชพื้นฐาน: proxy_cache_path และ proxy_cache คำสั่ง proxy_cache_path กำหนดเส้นทางและการกำหนดค่าของแคช และคำสั่ง proxy_cache จะเปิดใช้งาน
proxy_cache_path /path/to/cache ระดับ = 1:2keys_zone=my_cache:10m max_size=10g ไม่ใช้งาน=60m use_temp_path=off; เซิร์ฟเวอร์ ( # ... ตำแหน่ง / ( proxy_cache my_cache; proxy_pass http://my_upstream; ) )พารามิเตอร์ของคำสั่ง proxy_cache_path กำหนดการตั้งค่าต่อไปนี้:
และสุดท้าย คำสั่ง proxy_cache จะเปิดใช้งานการแคชเนื้อหาทั้งหมดที่ตรงกับ URL ของบล็อกตำแหน่งหลัก (ในตัวอย่าง / ) คุณยังสามารถรวมคำสั่ง proxy_cache ในบล็อกเซิร์ฟเวอร์ได้ ใช้กับบล็อกตำแหน่งทั้งหมดสำหรับเซิร์ฟเวอร์ที่ไม่มีคำสั่ง proxy_cache ของตัวเอง
การส่งเนื้อหาแคชเมื่อแหล่งกำเนิดสินค้าหยุดทำงาน / ( # ... proxy_cache_use_stale ข้อผิดพลาดหมดเวลา http_500 http_502 http_503 http_504; )ด้วยการกำหนดค่าตัวอย่างนี้ หาก NGINX ได้รับข้อผิดพลาด หมดเวลา หรือข้อผิดพลาด 5xx ที่ระบุจากเซิร์ฟเวอร์ต้นทาง และมีไฟล์ที่ร้องขอในเวอร์ชันเก่าในแคช จะส่งไฟล์เก่าแทนการถ่ายทอดข้อผิดพลาดไปยัง ลูกค้า.
การปรับแต่งแคชอย่างละเอียดและปรับปรุงประสิทธิภาพNGINX มีการตั้งค่าเสริมมากมายสำหรับปรับแต่งประสิทธิภาพของแคชอย่างละเอียด นี่คือตัวอย่างที่เปิดใช้งานบางส่วน:
Proxy_cache_path /path/to/cache ระดับ=1:2keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; เซิร์ฟเวอร์ ( # ... ตำแหน่ง / ( proxy_cache my_cache; proxy_cache_revalidate บน; proxy_cache_min_uses 3; proxy_cache_use_stale ข้อผิดพลาดหมดเวลาอัปเดต http_500 http_502 http_503 http_504; proxy_cache_พื้นหลัง_update บน; proxy_cache_lock เปิด; proxy_pass http://my_upstream; ) )
คำสั่งเหล่านี้กำหนดค่าลักษณะการทำงานต่อไปนี้:
หากคุณมีฮาร์ดไดรฟ์หลายตัว คุณสามารถใช้ NGINX เพื่อแยกแคชออกไปได้ นี่คือตัวอย่างที่แบ่งไคลเอ็นต์เท่าๆ กันระหว่างฮาร์ดไดรฟ์สองตัวโดยอิงตาม URI คำขอ:
Proxy_cache_path /path/to/hdd1 ระดับ=1:2keys_zone=my_cache_hdd1:10m max_size=10g ไม่ใช้งาน=60m use_temp_path=off; proxy_cache_path /path/to/hdd2 ระดับ = 1:2keys_zone=my_cache_hdd2:10m max_size=10g ไม่ใช้งาน=60m use_temp_path=off; split_clients $request_uri $my_cache ( 50% “my_cache_hdd1”; 50% “my_cache_hdd2”; ) เซิร์ฟเวอร์ ( # ... ตำแหน่ง / ( proxy_cache $my_cache; proxy_pass http://my_upstream; ) )
คำสั่ง proxy_cache_path สองคำสั่งกำหนดแคชสองตัว (my_cache_hdd1 และ my_cache_hdd2) บนฮาร์ดไดรฟ์สองตัวที่แตกต่างกัน บล็อกการกำหนดค่า split_clients ระบุว่าผลลัพธ์จากคำขอครึ่งหนึ่ง (50%) ถูกแคชไว้ใน my_cache_hdd1 และอีกครึ่งหนึ่งใน my_cache_hdd2 แฮชที่อิงตามตัวแปร $request_uri (URI คำขอ) จะกำหนดว่าแคชใดที่จะใช้สำหรับแต่ละคำขอ ผลลัพธ์ก็คือคำขอสำหรับ URI ที่กำหนดจะถูกแคชไว้ในแคชเดียวกันเสมอ
โปรดทราบว่าวิธีนี้ใช้แทนการตั้งค่าฮาร์ดไดรฟ์ RAID ไม่ได้ หากมีความล้มเหลวของฮาร์ดไดรฟ์ อาจนำไปสู่พฤติกรรมที่คาดเดาไม่ได้ในระบบ รวมถึงผู้ใช้ที่เห็นรหัสตอบกลับ 500 รายการสำหรับคำขอที่ส่งไปยังฮาร์ดไดรฟ์ที่ล้มเหลว การตั้งค่าฮาร์ดไดรฟ์ RAID ที่เหมาะสมสามารถรับมือกับความล้มเหลวของฮาร์ดไดรฟ์ได้
คำถามที่พบบ่อย (FAQ)ส่วนนี้จะตอบคำถามที่พบบ่อยเกี่ยวกับการแคชเนื้อหา NGINX
แคช NGINX สามารถติดตั้งได้หรือไม่? add_header X-Cache-สถานะ $upstream_cache_status;ตัวอย่างนี้เพิ่มส่วนหัว HTTP X-Cache-Status ในการตอบสนองต่อไคลเอ็นต์ ต่อไปนี้เป็นค่าที่เป็นไปได้สำหรับ $upstream_cache_status :
NGINX กำหนดได้อย่างไรว่าจะแคชบางอย่างหรือไม่?ตามค่าเริ่มต้น NGINX เคารพส่วนหัว Cache-Control จากเซิร์ฟเวอร์ต้นทาง จะไม่แคชการตอบสนองโดยตั้งค่า Cache-Control เป็น Private , No-Cache หรือ No-Store หรือด้วย Set-Cookie ในส่วนหัวการตอบกลับ NGINX แคชเฉพาะคำขอไคลเอ็นต์ GET และ HEAD คุณสามารถแทนที่ค่าเริ่มต้นเหล่านี้ได้ตามที่อธิบายไว้ในคำตอบด้านล่าง
proxy_cache_methods รับ HEAD POST;ตัวอย่างนี้เปิดใช้งานการแคชคำขอ POST
NGINX สามารถแคชเนื้อหาไดนามิกได้หรือไม่ใช่ โดยมีเงื่อนไขว่าส่วนหัว Cache-Control อนุญาต การแคชเนื้อหาไดนามิกแม้ในช่วงเวลาสั้นๆ สามารถลดภาระบนเซิร์ฟเวอร์ต้นทางและฐานข้อมูล ซึ่งปรับปรุงเวลาเป็นไบต์แรก เนื่องจากไม่จำเป็นต้องสร้างเพจใหม่สำหรับแต่ละคำขอ
ฉันสามารถเจาะรูผ่านแคชของฉันได้หรือไม่? ตำแหน่ง / ( proxy_cache_bypass $cookie_nocache $arg_nocache; # ... )คำสั่งนี้จะกำหนดประเภทคำขอที่ NGINX ร้องขอเนื้อหาจากเซิร์ฟเวอร์ต้นทางทันที แทนที่จะพยายามค้นหาในแคชก่อน บางครั้งเรียกว่า "การเจาะรู" ผ่านแคช ในตัวอย่างนี้ NGINX ดำเนินการตามคำขอที่มีคุกกี้หรืออาร์กิวเมนต์ nocache เช่น http://www.example.com/?nocache=true NGINX ยังสามารถแคชการตอบสนองผลลัพธ์สำหรับคำขอในอนาคตที่ไม่ถูกข้าม
NGINX ใช้คีย์แคชอะไรรูปแบบเริ่มต้นของคีย์ที่ NGINX สร้างขึ้นจะคล้ายกับแฮช MD5 ของตัวแปร NGINX ต่อไปนี้ : $scheme$proxy_host$request_uri ; อัลกอริธึมจริงที่ใช้นั้นซับซ้อนกว่าเล็กน้อย
Proxy_cache_path /path/to/cache ระดับ=1:2keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; เซิร์ฟเวอร์ ( # ... ตำแหน่ง / ( proxy_cache my_cache; proxy_pass http://my_upstream; ) )
สำหรับการกำหนดค่าตัวอย่างนี้ คีย์แคชสำหรับ http://www.example.org/my_image.jpg จะถูกคำนวณเป็น md5(“http://my_upstream:80/my_image.jpg”)
หากต้องการเปลี่ยนตัวแปร (หรือคำศัพท์อื่น) ที่ใช้เป็นพื้นฐานสำหรับคีย์ ให้ใช้คำสั่ง proxy_cache_key (ดูคำถามต่อไปนี้ด้วย)
ฉันสามารถใช้คุกกี้เป็นส่วนหนึ่งของคีย์แคชของฉันได้หรือไม่ใช่ คุณสามารถกำหนดค่าคีย์แคชให้เป็นค่าใดๆ ก็ได้ เช่น:
proxy_cache_key $proxy_host$request_uri$cookie_jessionid;ตัวอย่างนี้รวมค่าของคุกกี้ JSESSIONID ไว้ในคีย์แคช รายการที่มี URI เดียวกันแต่ค่า JSESSIONID ต่างกันจะถูกแคชแยกกันเป็นรายการที่ไม่ซ้ำ
NGINX ใช้ส่วนหัว ETag หรือไม่ NGINX จัดการกับ Pragma Header อย่างไรไคลเอ็นต์เพิ่มส่วนหัว Pragma:no-cache เพื่อข้ามแคชตัวกลางทั้งหมดและตรงไปยังเซิร์ฟเวอร์ต้นทางเพื่อดูเนื้อหาที่ร้องขอ NGINX ไม่ให้เกียรติส่วนหัวของ Pragma ตามค่าเริ่มต้น แต่คุณสามารถกำหนดค่าคุณสมบัติด้วยคำสั่ง proxy_cache_bypass ต่อไปนี้:
ตำแหน่ง /images/ ( proxy_cache my_cache; proxy_cache_bypass $http_pragma; # ... )
NGINX รองรับส่วนขยายเก่าขณะตรวจสอบใหม่และเก่าหากเกิดข้อผิดพลาดในส่วนหัว Cache-Control หรือไม่ NGINX รองรับ Vary Header หรือไม่ อ่านเพิ่มเติมมีหลายวิธีที่คุณสามารถปรับแต่งและปรับแต่งแคช NGINX ได้ หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการแคชด้วย NGINX โปรดดูแหล่งข้อมูลต่อไปนี้:
การแคชข้อมูลฝั่งไคลเอ็นต์คือความสามารถในการกำหนดค่าการดาวน์โหลดข้อมูลบางประเภทเพียงครั้งเดียว จากนั้นจึงบันทึกลงในหน่วยความจำของไคลเอ็นต์ การแคชเบราว์เซอร์ nginx หรือใช้เซิร์ฟเวอร์อื่นช่วยให้คุณสามารถลดจำนวนคำขอจากเครื่องไคลเอนต์และส่งผลให้โหลดและเพิ่มความเร็วในการโหลดของไซต์ด้วย
เหล่านั้น. ลูกค้าเข้าถึงหน้าไซต์ - เซิร์ฟเวอร์ประมวลผลคำขอ เพจที่สร้างขึ้นจะถูกส่งไปยังไคลเอนต์พร้อมกับส่วนหัวที่แน่นอน เบราว์เซอร์จัดเก็บข้อมูลไว้ในเครื่องและส่งคืนเมื่อมีการร้องขออีกครั้ง
รูปภาพสไตล์ CSS และ Javascript ถูกแคชไว้ การแคชเบราว์เซอร์ Nginx ถูกนำมาใช้โดยการเพิ่มส่วนหัวการควบคุมแคช
ในส่วนหัว ข้อมูลบริการจะถูกส่งจากเซิร์ฟเวอร์ไปยังเบราว์เซอร์ไคลเอ็นต์ ซึ่งเบราว์เซอร์จะเรียนรู้เมื่อจำเป็นต้องบันทึกข้อมูลบางประเภท และระยะเวลาที่จะเก็บไว้ในหน่วยความจำ
การแคชเบราว์เซอร์ Nginxในไฟล์การกำหนดค่า Nginx การแคช JS/CSS ถูกเปิดใช้งานดังนี้ (มีการเพิ่มส่วนขยายอื่น ๆ แล้ว - ในทางปฏิบัติ ควรแคชทั้งหมดไว้จะดีกว่า):
เซิร์ฟเวอร์ (
…
ตำแหน่ง ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ (
หมดอายุสูงสุด;
รูต /home/เว็บไซต์/example.com/;
}
…
}
หมดอายุสูงสุดหมายความว่า TTL ถูกตั้งค่าเป็นอนันต์ และหากไฟล์บนเซิร์ฟเวอร์มีการเปลี่ยนแปลง ไคลเอนต์จะไม่มีทางรู้เรื่องนี้เลย เนื่องจากจะไม่มีการส่งคำขอซ้ำ
หมดอายุ (ส่วนหัวนี้จะกล่าวถึงด้านล่าง) กำหนดว่าเบราว์เซอร์จะอัปเดตแคชเมื่อใด ค่าจะถูกตั้งเป็นวินาที
โดยปกติแล้ว ค่าสูงสุดที่หมดอายุจะถูกตั้งค่าในการกำหนดค่าเซิร์ฟเวอร์ จากนั้นในแอปพลิเคชัน เมื่อเชื่อมต่อไฟล์ css และ js เวอร์ชันจะถูกกำหนด ซึ่งควรเปลี่ยนทุกครั้งที่อัปเดตเนื้อหา
การระบุส่วนหัวแคชระดับแอปพลิเคชัน
เซิร์ฟเวอร์ในกรณีนี้จะรับรู้แต่ละเวอร์ชันใหม่เป็นไฟล์ใหม่ที่เพิ่มเข้ามา และจะแคชไฟล์นั้น
นอกเหนือจาก Cache-Control แล้ว ส่วนหัว Expires มักถูกระบุ - บังคับวันที่และเวลาที่เบราว์เซอร์จะรีเซ็ตแคชที่มีอยู่ ครั้งถัดไปที่ผู้ใช้ติดต่อ ข้อมูลที่อัปเดตจะถูกโหลดลงในแคชอีกครั้ง
ส่วนหัว HTTP Expires เพิ่มเติมระบุวันที่และเวลาที่เบราว์เซอร์ควรอัปเดตแคช (ส่วนหัวสามารถใช้ร่วมกันได้ Expires มีค่าน้อยกว่าเมื่อใช้ทั้งสองส่วนหัว):
ส่วนหัวทั้งสองสามารถตั้งค่าได้ในโค้ดระดับแอปพลิเคชัน
เปิดใช้งานการแคชใน PHPโครงการเว็บส่วนใหญ่เขียนด้วยภาษา PHP ใน PHP ส่วนหัว Cache-control และ Expires HTTP ได้รับการตั้งค่าดังนี้: