Nginx में Sendfile चालू / बंद का उपयोग कब या नहीं करना है?


12

हमारे यहां यह सेटिंग nginx.confकाफी समय से है।

sendfile on;

जब हमने किसी फ़ाइल को अपडेट किया है /js/main.jsऔर ब्राउज़र https://test.com/js/main.js?newrandomtimestamp से एक्सेस किया है , तो यह तब भी पुराने संस्करण को लोड करेगा जब तक हम अपने ब्राउज़र से पूर्ण ताज़ा (स्पष्ट कैश) नहीं करते।

लेकिन जब हम सेंडफाइल से सेटिंग बदलते हैं; बंद करने के लिए; ब्राउज़र अपडेट की गई फ़ाइल के सही संस्करण को लोड करेगा।

हमारे उत्पादन वेब सर्वर के लिए, क्या हमें सेंडफाइल का उपयोग करना चाहिए; या भेजना बंद? अगर पर भेजने वाला; आवश्यक है (बेहतर कैशिंग के कारण हो सकता है? तेजी से प्रदर्शन?) तो ऊपर बताई गई समस्या को कैसे हल किया जाए?

नीचे nginx.confहमारे उत्पादन सर्वर में है, और हम संस्करण 1.7.5 का उपयोग कर रहे हैं:

user  nginx;
worker_processes  2;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
worker_rlimit_nofile 51200;

events {
    use epoll;
    worker_connections  51200;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    client_max_body_size 8m;
    sendfile        on;
    keepalive_timeout  65;

    real_ip_header X-Forwarded-For;
    set_real_ip_from 0.0.0.0/0;
    large_client_header_buffers 4 32k;

    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript application/javascript text/css application/xml application/json;
    gzip_vary on;


    include /etc/nginx/conf.d/*.conf;
}

चीजों को आसान बनाने के लिए, क्या हमें हर बार अपने उत्पादन सर्वर में नई फ़ाइलों को तैनात करने से पहले nginx को फिर से शुरू करना चाहिए? अगर हम nginx को पुनरारंभ नहीं करना चाहते हैं, तो हम nginx कैश को और कैसे साफ़ कर सकते हैं? (यह मानते हुए कि अगर सेंडफाइल ऑन है; कैश से संबंधित है)
वनक्लबाउन

क्या आपका नगीन कुछ प्रकार के आभासी वातावरण (जैसे वर्चुअलबॉक्स) में है?
एलेक्सी टेन

हमारा उत्पादन सर्वर अमेज़न ईसी 2 पर है
वनक्लब

sendfileVirtualBox ड्राइव (जैसे virtualbox.org/ticket/819 ) के बारे में कई बग रिपोर्ट हैं । हो सकता है कि अमेज़न के साथ भी ऐसी ही समस्या हो।
एलेक्सी टेन

जैसे ही आप इस आंतरिक कैश को यहां मार रहे हैं, open_file_cache की कॉन्फ़िगरेशन सेटिंग्स देखें। आप इसे पूरी तरह से अक्षम कर सकते हैं या TTL (open_file_cache_valid) को कम कर सकते हैं। आपको यहां अधिक विवरण मिलेगा: nginx.org/en/docs/http/… वर्चुअलबॉक्स से जुड़े उल्लेख विशिष्ट फ़ाइल सिस्टम VBOXSF के कारण हैं, लेकिन यहां ऐसा नहीं होना चाहिए। अन्य ज्ञात मुद्दे एनएफएस फाइलसिस्टम से जुड़े हुए हैं जो यहां भी नहीं है।
जेन्स ब्रैडलर

जवाबों:


1

एप्लिकेशन स्तर पर आपकी फ़ाइल कैशिंग समस्या का समाधान हो सकता है। यह जावास्क्रिप्ट विकास की दुनिया में एक प्रसिद्ध समस्या है। समाधान को आमतौर पर "आउटपुट हैशिंग" जैसा कुछ कहा जाता है।

मूल विचार फ़ाइल सामग्री का हैश को फ़ाइल नाम में जोड़ना है ताकि फ़ाइल को "नया" माना जाए और कैश में न मिले।

कोणीय का निर्माण समय पर होता है (देखें:) --outputHashing


1

... जब तक हम अपने ब्राउज़र से पूर्ण ताज़ा (स्पष्ट कैश) नहीं करते हैं।

यह अपने आप में, एक स्पष्ट अभिव्यक्ति है कि "समस्या" क्लाइंट-साइड पर है।

sendfile कैशिंग से कोई लेना-देना नहीं है, केवल कैसे NGINX बफ़र्स / फ़ाइल को पढ़ता है (सामग्री को सीधे "स्लॉट" में सामान करने की कोशिश करता है, या पहले इसकी सामग्री को बफर करता है)।

केवल उचित व्याख्या यह है कि अपने विशिष्ट ब्राउज़र छोड देता है ?newrandomtimestampमूल्य के बिना एक पैरामीटर के रूप, तो यह या तो के लिए एक ही कैश्ड संसाधन को लोड कर रहा है example.com?blahऔर example.com?boo

यदि आप इसे आजमाते हैं, तो https://example.com/js/main.js?v=newrandomtimestampयोजना, हर बार नई सामग्री देनी चाहिए


0

आप सीएसएन भी इस फ़ाइल को कैशिंग से एक बाहर का उपयोग करें जैसा कि मैं करता हूं

 location updater/serversettings.xml {
        expires -1;
        add_header 'Cache-Control' 'no-store, no-cache, 
 must-revalidate, proxy-revalidate, max-age=0';
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.