সেটটি nginx থেকে পরিবেষ্টিত স্থির সামগ্রীর জন্য শিরোনামের মেয়াদ শেষ করে


96

আমি আমার স্থিতিশীল বিষয়বস্তুটি সার্ভারে এনগিনেক্স ব্যবহার করছি, এমন কোনও উপায় আছে যে কোনও নির্দিষ্ট নিয়মের সাথে মিলিত প্রতিটি ফাইলের জন্য আমি মেয়াদোত্তীর্ণ শিরোনাম সেট করতে পারি? উদাহরণস্বরূপ, আমি সমস্ত ফাইলের জন্য '.css' এর এক্সটেনশানটির মেয়াদোত্তীর্ণ শিরোনাম সেট করতে পারি?

উত্তর:


126

আমি আরও কিছু ফাইল এক্সটেনশনের পাশাপাশি আরও একটি সম্পূর্ণ ক্যাশে শিরোনাম করতে পছন্দ করি। দ্য '?' উপসর্গ একটি 'ক্যাপচারিং' চিহ্ন নয়, এনজিনেক্স একটি $ 1 তৈরি করবে না। এটি অপ্রয়োজনীয় বোঝা হ্রাস করতে সহায়তা করে।

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public";
}

7
আমার সমস্ত স্ট্যাটিক ফাইল যোগ করার পরে পাওয়া যায় নি।
জর্জেন পল

@ জ্যাকস্পায়ারো: কেন তা ঘটেছিল তা আমি সত্যিই ব্যাখ্যা করতে পারি না, কারণ এটি সর্বদা আমার পক্ষে কাজ করেছে। আপনি কি Nginx চালাচ্ছেন অ্যাড_হেডার সরবরাহকারী মডিউলটি অনুপস্থিত? এই ধরণের জিনিসটি সত্যই সুযোগের মধ্যে সীমাবদ্ধ, আপনি কি নিশ্চিত যে অন্য হ্রাস কোনও সংমিশ্রণে সমস্যা নয়?
জেএম বেকার

24
সম্ভবত অন্য একটি ব্লকের একটি rootসেট সহ স্থির ফাইলগুলির সংজ্ঞা ছিল , সেক্ষেত্রে আপনার সেই ব্লকের দিকনির্দেশনা যুক্ত করা উচিত। (আমি জানি এটি 2 বছর দেরী, তবে ভবিষ্যতের নাগরিকদের জন্য)
23

1
আমি ব্যক্তিগতভাবে স্পষ্টকরণের প্রশংসা করি, বিশেষত ভবিষ্যতের সন্ধানকারীদের জন্য কারণ তারা প্রায়শই মূল পোস্টের পরে অনেক পরে প্রদর্শিত হয়। +1: পি
জেএম বেকার

এটি সম্পূর্ণরূপে আমার ওয়ার্ডপ্রেস ওয়েবসাইটকে বিভ্রান্ত করে using সিএসএস এবং চিত্র প্রদর্শন করা হয় না। কোথাও অন্য কোন বিরোধ আছে?
ব্যবহারকারী1641443


17

আমার গ্রহণযোগ্য উত্তরগুলির ফলে ফাইলগুলি আর প্রদর্শিত হবে না সে সম্পর্কে মন্তব্য করার মতো যথেষ্ট খ্যাতি আমার নেই, তবে আমি এটি খুঁজে পেয়েছি এবং সহায়তা করতে চাই!

সংক্ষিপ্ত সংস্করণ:

আপনার যদি কোনও বিশ্বব্যাপী সেট না থাকে তবে নিশ্চিত করুন যে চিত্রগুলিতে আপনার অবস্থান ব্লক করার জন্য আপনার কাছে একটি রুট ডিরেক্টরি নির্দিষ্ট রয়েছে!

দীর্ঘ সংস্করণ নীচে:


প্রথমত, আমার এই সমাধানটি কার্যকর করার পদ্ধতিটি এই উত্তরটির সাথে সত্যই মিল ছিল , যেখানে আপনি বিধিটি লেখেন (স্বীকৃত উত্তরের মতো):

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public";
}

img-cache.conf একটি ফাইলের মধ্যে

এবং তারপরে আপনার server {...}নির্দেশিকায় সেই ফাইলটি অন্তর্ভুক্ত করুন ।

আমার সাইটগুলি উপলভ্য ফোল্ডারে সামসাইট.কমের আমার উদাহরণ:

 #Image Caching
 include /etc/nginx/conf/img-cache.conf;

এইভাবে আপনি চলমান একাধিক সাইটে চিত্রের ক্যাচিং অবস্থান ব্লক যুক্ত করতে পারেন।


সর্বোপরি, আমার একটি পরিস্থিতি রয়েছে যেখানে আমার / var / www / এ দুটি ফোল্ডার রয়েছে যা আমি পাবলিক_এইচটিএমএল - সুরক্ষিত এবং প্রশিক্ষণ হিসাবে অনুমতি দিই, তাই আমাকে এই সাইটের ফোল্ডারগুলি একাকী করে আমার সাইটের সার্ভারের নির্দেশিকায় নির্দিষ্ট অবস্থানের ব্লক তৈরি করতে হবে।

এর মতো, আমার কাছে গ্লোবাল রুট ডিরেক্টরি সেট নেই

সুতরাং আপনি যখন আপনার চিত্রের অবস্থানটি ব্লক করেন, তখন আপনি তাদের কোনও মূল ডিরেক্টরি সরবরাহ করতে পারেন না যা থেকে চিত্রগুলি সন্ধান করতে হয়!

আমার সমাধানটি তখন ছিল:

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;
}

1
এটি পুনরায় ব্যবহারযোগ্য হিসাবে তৈরি করার জন্য +1 .conf। উপযুক্ত ফোল্ডারটি nginx/1.14.0 (Ubuntu)মনে হচ্ছে /etc/nginx/snippets/
জানু ওয়ারখোভেন

9

আপনি মেয়াদও সর্বাধিক নির্ধারণ করতে পারেন। আমি সিএসএস এবং জেএস এর জন্য যে নির্দেশনাটি ব্যবহার করি তা এখানে।

# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
    access_log off;
    expires max;
}

1
আমি কেবল সার্ভার in} ব্লকটিতে মূল নির্দেশিকাটি ব্যবহার করব, যখন এটি সাব-লোকেশনগুলিতে ব্যবহার করা হয় তখন এটি অপ্রত্যাশিত পরিণতি বাড়ে। আপনার বিরতির দরকার নেই; হয়, যেমন আপনি যদি কোনও if} ব্লকে না থাকেন
ডেভ চেনি

তুমি ঠিক. এটি পরিষ্কার করতে ভুলে গেছি। এটি প্রতিফলিত করার জন্য সম্পাদিত।
জাউদার হো

4

সমস্ত উল্লিখিত সমাধানগুলি বিভিন্ন পাথের জন্য পৃথক উপকরণ থাকার সম্ভাবনাটিকে অস্বীকার করবে have এছাড়াও আপনার সমস্ত ক্যাশে মেয়াদ শেষ হয়ে যাওয়ার জন্য এক জায়গায় আপনার নীচের উপায়ে এনজিনেক্স ম্যাপ ব্যবহার করা উচিত।

...

# 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ব্রাউজারের সর্বোচ্চ মানটিতে তারিখ সেট করে।

~ চিত্র / যেকোন চিত্রের সাথে মেলে।

Http://nginx.org/en/docs/http/ngx_http_map_module.html এ nginx মানচিত্র সম্পর্কে আরও ।


মনে রাখবেন যদি $sent_http_content_typeহয় "text/css;charset=UTF-8"উপরে অভিব্যক্তি ব্যর্থ হবে।
পাচঙ্কা

2

আপনার সমস্ত স্থিতিশীল ফাইলের যদি আপনার কাছে এমন এক জায়গা থাকে তবে এর মতো কিছু করবে ...

 location /static {
            your/location/to/static/files/static;
            expires 30d;
            add_header Cache-Control "public";
    }

গৃহীত উত্তরের কারণে nginx আমার কোনও স্থিতিশীল ফাইল খুঁজে পায় না। সত্যিই নিশ্চিত নয় কেন, তবে এটি একটি সহজ বিকল্প।


আমি এটির জন্য ভোট দিয়েছি তবে নিশ্চিত হয়ে নিন /staticযে আপনি উপনামের শেষে ( .../filesউদাহরণের ঠিক পরে) ফোল্ডারটি (আপনি যা স্থানে সেট করেছেন) যুক্ত করেছেন।
মিরো জে

-1

যেহেতু এটি অনেক পুরানো থ্রেড, এবং আমি একটি আপ টু ডেট আশ্চর্যজনক টিউটোরিয়াল পেয়েছি।

সম্ভবত আপনি এটি পরীক্ষা করে দেখতে চান

উবুন্টু 16.04-এ Nginx এর শিরোনাম মডিউল সহ ব্রাউজার ক্যাচিং কীভাবে প্রয়োগ করা যায়


1
লিঙ্কগুলির পরিবর্তন বা মেয়াদ শেষ হওয়ার প্রবণতা থাকায় সাধারণত আমরা নিবন্ধগুলির সাথে লিঙ্ক করার বিষয়ে এবং এখানে লিখিত সামগ্রীগুলি অন্তর্ভুক্ত না করেই ভ্রান্ত হয়েছি।
Unkwntech
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.