سؤال تنتهي صلاحية الرؤوس للمحتوى الثابت الذي يتم عرضه من nginx


أنا أستخدم nginx لخادم المحتوى الثابت الخاص بي ، هل هناك طريقة يمكنني من خلالها تعيين الرؤى المنتهية الصلاحية لكل ملف يفي بقاعدة معينة؟ على سبيل المثال ، هل يمكنني تعيين عنوان انتهاء الصلاحية لجميع الملفات التي تحتوي على امتداد ".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 في هذه الحالة ، يجب عليك إضافة التوجيهات إلى هذه المجموعة. (أعلم أن هذا هو 2y في وقت متأخر ، ولكن للمواطنين في المستقبل) - aularon
أنا شخصياً أقدر الإيضاحات ، خاصة بالنسبة للباحثين في المستقبل لأنهم غالباً ما يظهرون بعد فترة طويلة من المشاركة الأصلية. +1: P - J. M. Becker
باستخدام هذا الفوضى تماما حتى بلدي وورد الموقع. المغلق والصور لا تظهر. هل هناك أي صراع آخر في مكان ما؟ - 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


جميع الحلول المذكورة أعلاه ستحرم من إمكانية الحصول على أسماء مستعارة مختلفة لمسارات مختلفة. أيضًا من أجل الحصول على جميع تواريخ انتهاء ذاكرة التخزين المؤقت المختلفة في مكان واحد ، يجب عليك استخدام خريطة 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.


2
2018-01-04 19:58



لاحظ أنه إذا $sent_http_content_type هو "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 في الوحدة النمطية على Ubuntu 16.04


-1
2018-05-04 04:18



بشكل عام ، نحن نرفض الربط بالمقالات ولا تشمل المحتوى هنا أيضًا ، لأن الروابط لها ميل للتغيير أو انتهاء صلاحيتها. - Unkwntech