ฉันใช้ nginx กับเซิร์ฟเวอร์เนื้อหาคงที่ของฉันมีวิธีที่ฉันสามารถตั้งค่าส่วนหัวหมดอายุสำหรับทุกไฟล์ที่ตรงกับกฎเฉพาะหรือไม่ ตัวอย่างเช่นฉันสามารถตั้งค่าส่วนหัวหมดอายุสำหรับไฟล์ทั้งหมดที่มีนามสกุลเป็น '.css' ได้หรือไม่
ฉันใช้ nginx กับเซิร์ฟเวอร์เนื้อหาคงที่ของฉันมีวิธีที่ฉันสามารถตั้งค่าส่วนหัวหมดอายุสำหรับทุกไฟล์ที่ตรงกับกฎเฉพาะหรือไม่ ตัวอย่างเช่นฉันสามารถตั้งค่าส่วนหัวหมดอายุสำหรับไฟล์ทั้งหมดที่มีนามสกุลเป็น '.css' ได้หรือไม่
คำตอบ:
ฉันชอบที่จะทำส่วนหัวแคชที่สมบูรณ์ยิ่งขึ้นนอกเหนือจากนามสกุลไฟล์บางส่วนเพิ่มเติม The '?' คำนำหน้าเป็นเครื่องหมาย 'ที่ไม่ได้ดักจับ' nginx จะไม่สร้าง $ 1 ช่วยลดภาระที่ไม่จำเป็น
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
root
ชุดในกรณีนั้นคุณควรเพิ่มคำสั่งในบล็อกนั้น (ฉันรู้ว่านี่สาย 2y แต่สำหรับพลเมืองในอนาคต)
ฉันไม่มีชื่อเสียงพอที่จะแสดงความคิดเห็นว่าทำไมคำตอบที่ยอมรับจะทำให้ไฟล์ไม่ปรากฏอีกต่อไป แต่ฉันคิดออกแล้วอยากจะช่วย!
เวอร์ชั่นสั้น:
ตรวจสอบให้แน่ใจว่าคุณได้ระบุไดเรกทอรีรูทไว้สำหรับบล็อกตำแหน่งของคุณในรูปภาพหากคุณไม่ได้มีหนึ่งชุดส่วนกลาง!
รุ่นยาวด้านล่าง:
ก่อนอื่นวิธีการของฉันในการใช้โซลูชันนี้คล้ายกับคำตอบนี้จริงๆซึ่งคุณเขียนกฎ (เช่นเดียวกับคำตอบที่ยอมรับ):
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
เป็นไฟล์img-cache.conf
แล้วรวมไฟล์นั้นไว้ในserver {...}
คำสั่งของคุณ
ตัวอย่าง somesite.com ของฉันในโฟลเดอร์ที่มีในเว็บไซต์
#Image Caching
include /etc/nginx/conf/img-cache.conf;
ด้วยวิธีนี้คุณสามารถเพิ่มบล็อกตำแหน่งแคชภาพลงในหลาย ๆ ไซต์ที่คุณอาจใช้งานอยู่
ประการที่สองฉันมีสถานการณ์ที่ / var / www / ของฉันมีสองโฟลเดอร์ที่ฉันอนุญาตให้เป็น public_html - ปลอดภัยและการฝึกอบรมดังนั้นฉันต้องสร้างบล็อกที่ตั้งที่เฉพาะเจาะจงในคำสั่งเซิร์ฟเวอร์ของไซต์ของฉันแยกโฟลเดอร์เหล่านี้ออก
เป็นเช่นนี้ผมไม่ได้มีชุดไดเรกทอรีรากทั่วโลก
ดังนั้นเมื่อคุณสร้างบล็อกตำแหน่งรูปภาพของคุณคุณอาจไม่ได้จัดทำไดเรกทอรีรูทเหล่านั้นเพื่อหารูปภาพใน!
วิธีแก้ปัญหาของฉันคือ:
location ~ ^/training.+\.(?:ico|css|js|gif|jpe?g|png)$ {
root /var/www/;
expires 7d;
add_header Pragma public;
add_header Cache-Control "public";
try_files $uri 404;
}
location ~ ^/.+\.(?:ico|css|js|gif|jpe?g|png)$ {
root /var/www/secure;
expires 7d;
add_header Pragma public;
add_header Cache-Control "public";
try_files $uri 404;
}
.conf
ได้ โฟลเดอร์ที่เหมาะสมน่าจะเป็นnginx/1.14.0 (Ubuntu)
/etc/nginx/snippets/
นอกจากนี้คุณยังสามารถตั้งค่าการหมดอายุสูงสุด นี่คือคำสั่งที่ฉันใช้สำหรับ css และ js
# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
access_log off;
expires max;
}
โซลูชันดังกล่าวทั้งหมดจะปฏิเสธความเป็นไปได้ที่จะมีชื่อแทนที่แตกต่างกันสำหรับเส้นทางที่แตกต่างกัน นอกจากนี้เพื่อให้มีการหมดอายุแคชที่แตกต่างกันทั้งหมดของคุณในที่เดียวคุณควรใช้แผนที่ nginx ในวิธีต่อไปนี้
...
# Expires mappings
map $sent_http_content_type $expires {
default off;
text/html epoch;
text/css max;
application/javascript 7d;
~image/ max;
}
...
server {
listen ...;
expires $expires;
location /assets/ {
# It is now possible to serve some resources from different path
alias /var/www/my_other_path/
}
# and have them all have same expirations
location / {
try_files $uri $uri/ /index.html;
}
...
}
Off
ปิดใช้งานการแคชepoch
(สำหรับ unix epoch) ส่งผลให้ทรัพยากรถูกเรียกคืนเสมอmax
ตั้งค่าวันที่เป็นค่าสูงสุดของเบราว์เซอร์
ภาพ ~ / จับคู่ภาพทุกประเภท
เพิ่มเติมเกี่ยวกับแผนที่ Nginx ที่http://nginx.org/en/docs/http/ngx_http_map_module.html
$sent_http_content_type
เป็น"text/css;charset=UTF-8"
การแสดงออกดังกล่าวข้างต้นจะล้มเหลว
หากคุณมีสถานที่แห่งหนึ่งซึ่งเป็นที่ตั้งของไฟล์สแตติกทั้งหมดสิ่งนี้จะทำ ...
location /static {
your/location/to/static/files/static;
expires 30d;
add_header Cache-Control "public";
}
คำตอบที่ยอมรับทำให้ nginx ไม่พบไฟล์คงที่ของฉัน ไม่แน่ใจจริงๆว่าทำไม แต่นี่เป็นทางเลือกที่ง่าย
/static
โฟลเดอร์ (สิ่งที่คุณตั้งไว้ในสถานที่) ในตอนท้ายของนามแฝง (หลังจาก.../files
ตัวอย่าง)
เนื่องจากนี่เป็นเธรดที่เก่ามากและฉันได้พบกับบทช่วยสอนที่น่าทึ่งล่าสุด
บางทีคุณต้องการตรวจสอบ
วิธีการนำเบราว์เซอร์แคชไปใช้กับโมดูลส่วนหัวของ Nginx บน Ubuntu 16.04