सवाल सेटिंग 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
@ जैकस्पैरो: मैं वास्तव में समझा नहीं सकता कि ऐसा क्यों हुआ, क्योंकि यह हमेशा मेरे लिए काम करता है। क्या आप Nginx को मॉड्यूल प्रदान करने वाले add_header को याद कर रहे हैं? इस तरह की चीज वास्तव में दायरे में सीमित है, आपको यकीन है कि एक और मंदीकरण संयोजन में कोई समस्या नहीं है? - J. M. Becker
शायद एक और ब्लॉक में स्थिर फाइलों के लिए परिभाषा थी root सेट करें, उस स्थिति में आपको उस ब्लॉक में निर्देश जोड़ना चाहिए। (मुझे पता है कि यह 2y देर हो चुकी है, लेकिन भविष्य के नागरिकों के लिए) - aularon
मैं विशेष रूप से भावी खोजकर्ताओं के लिए स्पष्टीकरण की सराहना करता हूं क्योंकि वे अक्सर मूल पोस्ट के बाद लंबे समय तक दिखाई देते हैं। +1: पी - J. M. Becker
इसका उपयोग पूरी तरह से मेरी WordPress वेबसाइट गड़बड़ कर रहा है। सीएसएस और छवियां नहीं दिख रही हैं। क्या कहीं और कोई संघर्ष है? - 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


आप समाप्ति को अधिकतम तक भी सेट कर सकते हैं। सीएसएस और जेएस के लिए मैं निर्देश का उपयोग करता हूं।

# 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 (यूनिक्स युग के लिए) संसाधनों में हमेशा परिणाम रीफ्रेश किया जा रहा है, 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





चूंकि यह एक बहुत पुराना धागा है, और मुझे एक अद्भुत ट्यूटोरियल मिला।

शायद आप इसे देखना चाहते हैं

उबंटू 16.04 पर Nginx के शीर्षलेख मॉड्यूल के साथ ब्राउज़र कैशिंग को कार्यान्वित कैसे करें


-1
2018-05-04 04:18



आम तौर पर, हम लेखों को जोड़ने पर भी फंस जाते हैं और यहां तक ​​कि सामग्री भी शामिल नहीं करते हैं, क्योंकि लिंक में बदलाव या समाप्ति की प्रवृत्ति होती है। - Unkwntech