שאלה הגדרת פג תוקף כותרות לתוכן סטטי שמוגשת מ- nginx


אני משתמש nginx לשרת התוכן הסטטי שלי, האם יש דרך שאני יכול להגדיר את הכותרות יפוג עבור כל קובץ שעונה על כלל מסוים? לדוגמה, אני יכול להגדיר את כותרת expires עבור כל הקבצים שיש להם סיומת של '.css'?


85
2018-06-10 07:19






תשובות:


אני מעדיף לעשות כותרת מטמון מלאה יותר, בנוסף למספר סיומות קבצים נוספות. ה '?' הקידומת היא סימן 'שאינו לוכד', nginx לא תיצור $ 1. זה עוזר להפחית עומס מיותר.

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public";
}

112
2017-11-25 21:07



כל הקבצים הסטטיים שלי לא נמצאו לאחר הוספת זה. - Jürgen Paul
@JackSpairow: אני באמת לא יכול להסביר למה זה קרה, כמו תמיד עבד בשבילי. האם אתה מפעיל את Nginx חסר את מודול מתן add_header? זה סוג של דבר באמת מוגבל היקף, אתה בטוח עוד האטה היא לא בעיה בשילוב? - J. M. Becker
כנראה בלוק אחר היה הגדרה עבור קבצים סטטיים עם root בחר, במקרה זה יש להוסיף את ההוראות לאותו גוש. (אני יודע שזה 2 מאוחר, אבל עבור האזרחים העתידיים) - aularon
אני אישית מעריך הבהרות, במיוחד עבור המחפשים בעתיד כי הם מופיעים לעתים קרובות הרבה אחרי ההודעה המקורית. +1: P - J. M. Becker
באמצעות הבלגן הזה לגמרי האתר שלי wordpress. css ותמונות אינן מוצגות. האם יש סכסוך אחר איפשהו? - user1641443


server {
    ...

    location ~* \.css$ {
       expires 30d;
    }
    ...
}

ה location הוראה

ה expires הוראה


21
2018-06-10 07:23





אין לי מספיק מוניטין כדי להגיב על למה התשובה המקובלת תגרום הקבצים לא להופיע יותר, אבל הבנתי את זה ואת רוצה לעזור!

גרסה קצרה:

ודא שיש לך ספריית שורש שצוין עבור בלוק המיקום שלך על תמונות אם אין לך קבוצה אחת גלובלית!

גרסה ארוכה להלן:


ראשית, השיטה שלי ליישם פתרון זה היה דומה מאוד תשובה זו, שבו אתה כותב את הכלל (כמו התשובה המקובלת):

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;
}

12
2018-01-31 21:43



+1 לצורך הפיכתו לשימוש חוזר .conf. התיקייה המתאימה nginx/1.14.0 (Ubuntu) נראה שיש /etc/nginx/snippets/. - Jan Werkhoven


ניתן גם להגדיר את התוקף יפוג למקסימום. הנה ההוראה אני משתמש עבור css ו js.

# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
    access_log off;
    expires max;
}

9
2018-06-10 08:41



הייתי משתמש בהוראת השורש רק בחסימת השרת {}, כאשר משתמשים בו במיקומי משנה הוא מוביל לתוצאות בלתי צפויות. אתה לא צריך את ההפסקה; או, כיוון שאינך נמצא בבלוק {} - Dave Cheney
אתה צודק. שכחתי לנקות את זה. נערך כדי לשקף את זה. - Jauder Ho


כל הפתרונות הנ"ל יכחישו את האפשרות לקבל כינויים שונים עבור נתיבים שונים. גם לשם כך יש כל expirations המטמון שלך במקום אחד אתה צריך להשתמש במפה 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) תוצאות משאב תמיד להיות refetched, max קובע את התאריך לערך המרבי של הדפדפן.

התמונה ~ / מתאימה לכל סוגי התמונות.

עוד על מפות nginx ב http://nginx.org/en/docs/http/ngx_http_map_module.html.


2
2018-01-04 19:58



שים לב שאם $sent_http_content_type J "text/css;charset=UTF-8" הביטוי הנ"ל ייכשל. - pachanka


אם יש לך מקום אחד כי הוא הביתה את כל הקבצים הסטטיים שלך, משהו כזה יעשה ...

 location /static {
            your/location/to/static/files/static;
            expires 30d;
            add_header Cache-Control "public";
    }

התשובה המקובלת גרמה nginx לא למצוא את כל הקבצים הסטטיים שלי. לא ממש בטוח למה, אבל זה חלופה פשוטה.


0
2018-02-25 03:12





מאז זה חוט ישן מאוד, ומצאתי עד כה הדרכה מדהימה.

אולי אתה רוצה לבדוק את זה

כיצד ליישם במטמון הדפדפן עם מודול כותרת של Nginx על אובונטו 16.04


-1
2018-05-04 04:18



בדרך כלל, אנו מזעיפים את הקישור למאמרים ולא כולל את התוכן כאן גם, כמו קישורים יש נטייה לשנות או לפוג. - Unkwntech