Nginx-এ ক্যাশে জেনারেশন পুনরায় বিবেচনা করা হচ্ছে map ডিরেক্টিভ ব্যবহার করে

8 min

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

হ্যালো, আমি অযোগ্য।
আমি চাই না যে ঘন ঘন ব্লগ পোস্ট আপডেট করার সময় অতীতের ক্যাশে লোড করা হোক।
তবে, আমি যতটা সম্ভব ক্যাশে থেকে বিতরণ করতে চাই, তাই আমি এটি নিয়ে ভাবব।

যদি ক্যাশে নির্ধারণ করা বন্ধ করে

এই ধরনের নিবন্ধে বর্ণিত $do_not_cache এর মতো ফ্ল্যাগ সেট করে এবং তারপর if স্টেটমেন্ট ব্যবহার করে ক্যাশে করা বিষয়বস্তু পরিবর্তন করার পদ্ধতিটি এখন অপ্রচলিত বলে মনে হচ্ছে।
একটি আর্কিটেকচারের পরিচিতি যা Nginx প্রক্সি ক্যাশে রিডানড্যান্ট করে ওয়ার্ডপ্রেসকে দ্রুততর করে তোলে এবং এটিকে সাধারণ ব্যবহারের জন্য উপলব্ধ করে (OpenResty+Redis)

তবে, তাহলে ক্যাশে কোথায় নির্ধারণ করা হবে?

ম্যাপ ডিরেক্টিভ 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