Nginx में map डायरेक्टिव का उपयोग करके कैश जनरेशन पर पुनर्विचार

8 min

language: ja bn en es hi pt ru zh-cn zh-tw

नमस्ते, मैं अक्षम हूँ।
जब मैं अक्सर ब्लॉग पोस्ट अपडेट करता हूँ, तो मैं नहीं चाहता कि पिछले कैश को लेख अपडेट के साथ लोड किया जाए।
हालांकि, मैं इसे यथासंभव कैश से वितरित करना चाहता हूँ, इसलिए मैं इस पर विचार करूँगा।

if के साथ कैश निर्धारण बंद करें

ऐसा लगता है कि $do_not_cache जैसे फ़्लैग सेट करके और फिर if स्टेटमेंट के साथ कैश की जाने वाली सामग्री को बदलने का तरीका, जैसा कि इस लेख में प्रस्तुत किया गया है, अब अप्रचलित हो गया है।
एक आर्किटेक्चर का परिचय जो Nginx प्रॉक्सी कैश को रिडंडेंट होने पर भी WordPress को सुपर-फास्ट बनाने के लिए साझा रूप से उपयोग करने की अनुमति देता है (OpenResty+Redis)

लेकिन फिर, कैश का निर्धारण कहाँ किया जाए?

map डायरेक्टिव Nginx वेरिएबल की सामग्री का मूल्यांकन करता है और परिणाम को एक मान के रूप में दूसरे वेरिएबल को असाइन करता है।

2022-03-01 Nginx लॉग को फ़िल्टर करने का प्रयास

और जब मैं शोध कर रहा था, तो मुझे एक बहुत ही सरल सिंटैक्स पोस्ट किया हुआ मिला।
Adding location-block to cache files makes those files return 404

map $uri $expire {
    ~\.(?:j|cs)s$                      180d;
    ~\.(?:jpe?g|png|webp|woff2?|ttf)$  365d;
    default                            off;
}
map $uri $cache_control {
    ~\.(?:js|css|jpe?g|png|webp|woff2?|ttf)$  public;
}
server {
    ...
    expires $expire;
    add_header Pragma $cache_control;
    add_header Cache-Control $cache_control;
    ...
}

मुझे समझ आया, यह स्पष्ट है।

वांछित कैश

मूल रूप से, html फ़ाइलों को छोड़कर, मैं एक लंबा कैश रखना चाहता हूँ, और html फ़ाइलों के लिए, थोड़ा कैश पर्याप्त है।
ऐसा इसलिए है क्योंकि यदि DOS या फ्लड अटैक होता है, तो मैं चाहता हूँ कि Nginx सर्वर यथासंभव प्रतिक्रिया दे।
फिलहाल, मैं इसे इस तरह सेट करने की कोशिश करूँगा।

map $uri $expire {
    ~\.(jpg|jpeg|png|webp|gif|mp4|css|js|ico|woff2)(\?.*)?$ 365d;
    ~\.html$ 5m;
}

map $uri $cache_control {
    ~\.(jpg|jpeg|png|webp|gif|mp4|css|js|ico|woff2)(\?.*)?$ public;
    ~\.html$ public;
}

अब, मैं nginx -t, service nginx restart करूँगा और curl के साथ इसका परीक्षण करूँगा।

यदि अनुरोध URI में html मौजूद नहीं है, तो यह कैश नहीं करेगा...

ऐसा लगता है कि यह डोमेन-वार कैश करने की कोशिश नहीं करेगा क्योंकि यह html फ़ाइल को कुंजी के रूप में उपयोग करके कैश करता है।

alleycat:[haturatu]:~/git$ curl -I https://soulminingrig.com
HTTP/2 200 
server: nginx/1.27.0
date: Sat, 23 Nov 2024 12:20:55 GMT
content-type: text/html
content-length: 15699
vary: Accept-Encoding
last-modified: Sat, 23 Nov 2024 12:08:31 GMT
etag: "3d53-627935ba8f789"
accept-ranges: bytes
vary: Accept-Encoding
content-security-policy: upgrade-insecure-requests
alt-svc: h3=":443"; ma=86400
x-content-type-options: nosniff

alleycat:[haturatu]:~/git$ curl -I https://soulminingrig.com/index.html
HTTP/2 200 
server: nginx/1.27.0
date: Sat, 23 Nov 2024 12:21:00 GMT
content-type: text/html
content-length: 15699
vary: Accept-Encoding
last-modified: Sat, 23 Nov 2024 12:08:31 GMT
etag: "3d53-627935ba8f789"
accept-ranges: bytes
vary: Accept-Encoding
expires: Sat, 23 Nov 2024 12:26:00 GMT
cache-control: max-age=300
content-security-policy: upgrade-insecure-requests
alt-svc: h3=":443"; ma=86400
x-content-type-options: nosniff
pragma: public
cache-control: public

जब मैंने curl -I https://soulminingrig.com किया, तो cache-control जानकारी का गायब होना यह दर्शाता है कि इसे कैश निर्धारण में शामिल नहीं किया गया है।
वास्तव में, यह index.html प्रदर्शित कर रहा है, लेकिन Nginx इसे एक निर्धारण के रूप में नहीं समझ रहा है, इसलिए मैं अब इसे इस तरह से आज़माऊँगा।

map $uri $expire {
    ~\.(jpg|jpeg|png|webp|gif|mp4|css|js|ico|woff2)(\?.*)?$ 365d;
    ~\.html$ 5m;
    ~\.*$ 5m;
}

map $uri $cache_control {
    ~\.(jpg|jpeg|png|webp|gif|mp4|css|js|ico|woff2)(\?.*)?$ public;
    ~\.html$ public;
    ~\.*$ public;
}

इस तरह, यह बिना किसी सवाल के रेगुलर एक्सप्रेशन के साथ किसी भी चीज़ को 5 मिनट के लिए कैश कर देगा।
आइए फिर से curl -I करें।

alleycat:[haturatu]:~/git$ curl -I https://soulminingrig.com
HTTP/2 200 
server: nginx/1.27.0
date: Sat, 23 Nov 2024 12:44:43 GMT
content-type: text/html
content-length: 15699
vary: Accept-Encoding
last-modified: Sat, 23 Nov 2024 12:08:31 GMT
etag: "3d53-627935ba8f789"
accept-ranges: bytes
vary: Accept-Encoding
expires: Sat, 23 Nov 2024 12:49:43 GMT
cache-control: max-age=300
content-security-policy: upgrade-insecure-requests
alt-svc: h3=":443"; ma=86400
x-content-type-options: nosniff
pragma: public
cache-control: public

alleycat:[haturatu]:~/git$ curl -I https://soulminingrig.com/top.png
HTTP/2 200 
server: nginx/1.27.0
date: Sat, 23 Nov 2024 12:44:47 GMT
content-type: image/png
content-length: 46584
vary: Accept-Encoding
last-modified: Sat, 23 Nov 2024 12:08:31 GMT
etag: "b5f8-627935ba12787"
accept-ranges: bytes
expires: Sun, 23 Nov 2025 12:44:47 GMT
cache-control: max-age=31536000
content-security-policy: upgrade-insecure-requests
alt-svc: h3=":443"; ma=86400
x-content-type-options: nosniff
pragma: public
cache-control: public

alleycat:[haturatu]:~/git$ curl -I https://soulminingrig.com/index.html
HTTP/2 200 
server: nginx/1.27.0
date: Sat, 23 Nov 2024 12:44:51 GMT
content-type: text/html
content-length: 15699
vary: Accept-Encoding
last-modified: Sat, 23 Nov 2024 12:08:31 GMT
etag: "3d53-627935ba8f789"
accept-ranges: bytes
vary: Accept-Encoding
expires: Sat, 23 Nov 2024 12:49:51 GMT
cache-control: max-age=300
content-security-policy: upgrade-insecure-requests
alt-svc: h3=":443"; ma=86400
x-content-type-options: nosniff
pragma: public
cache-control: public

अब सब कुछ सफलतापूर्वक कैश हो रहा है।

इस कैशिंग के साथ, कॉन्फ़िगरेशन फ़ाइल का सिंटैक्स काफी छोटा हो गया है, और जब मैं कैश सेटिंग्स को बदलना चाहता हूँ, तो मुझे केवल map डायरेक्टिव को संशोधित करना होगा, जिससे यह अधिक सुविधाजनक हो गया है।
तो, फिर मिलते हैं।

Related Posts