প্রশ্ন Nginx (ডেভেলপমেন্টের জন্য) সাথে স্ট্যাটিক ফাইলগুলি পরিবেশন করার সময় ক্যাশিং অক্ষম করুন


আমরা একটি উন্নয়ন প্ল্যাটফর্মের স্ট্যাটিক ফাইল পরিবেশন করতে Nginx ব্যবহার করছি। এটি একটি ডেভেলপমেন্ট প্ল্যাটফর্ম হিসাবে, আমরা ক্যাশিং নিষ্ক্রিয় করতে চাই যাতে প্রতিটি পরিবর্তন সার্ভারে প্রচারিত হয়। VHost এর কনফিগারেশন বেশ সহজ:

server {
  server_name  static.server.local;
  root /var/www/static;

  ## Default location
  location / {
    access_log        off;
    expires           0;
    add_header        Cache-Control private;
  } 
}

যখন আমরা একটি এইচটিএমএল ফাইল অ্যাক্সেস (HTTP: //static.server.local/test.html), আমাদের কোন সমস্যা নেই: সার্ভার একটি কোড প্রদান করে 304 সংশোধন করা হয় না যতক্ষণ ফাইল পরিবর্তন হয় না, এবং একটি 200 ঠিক আছে ফাইল পরিবর্তন করা হয় যখন সংশোধিত ফাইল সঙ্গে প্রতিক্রিয়া।
তবে, এটি জাভাস্ক্রিপ্ট বা CSS ফাইলের সাথে আলাদাভাবে আচরণ করে বলে মনে হয়। একবার ফাইল পরিবর্তন হয়, আমরা একটি পেতে 200 ঠিক আছে প্রত্যাশিত হিসাবে প্রতিক্রিয়া, কিন্তু পুরানো টেক্সট সঙ্গে।
Nginx একটি অভ্যন্তরীণ ক্যাশে প্রক্রিয়া আছে যে এই আচরণ ব্যাখ্যা করতে পারে? অথবা কিছু কনফিগারেশন যে আমরা যোগ করা উচিত?

একটি পার্শ্ব নোট হিসাবে, এখানে ফাইলটি সংশোধন করা হয়েছে যখন এটি Nginx দ্বারা ফেরত হেডার (এটি সঠিক মনে হয়):

Accept-Ranges:bytes
Cache-Control:max-age=0
private
Connection:keep-alive
Content-Length:309
Content-Type:text/css
Date:Fri, 13 May 2011 14:13:13 GMT
Expires:Fri, 13 May 2011 14:13:13 GMT
Last-Modified:Fri, 13 May 2011 14:13:05 GMT
Server:nginx/0.8.54

সম্পাদন করা
সঙ্গে বিভিন্ন সেটিংস চেষ্টা করার পরে expires নির্দেশিকা এবং Cache-Controlহেডার, আমি কিছু আরও তদন্ত করা। প্রকৃতপক্ষে, সার্ভারটি একটি ভার্চুয়ালবক্স গেস্ট উবুন্টুতে ইনস্টল করা আছে এবং Mac OSX হোস্টের একটি ভাগ করা ফোল্ডার থেকে ডেটা পড়ানো হয়।
যদি হোস্টে কোনও আইডিই (নেটবিন্স) থেকে ফাইলটি সম্পাদনা করা হয়, তবে মনে হয় যে পরিবর্তনগুলি উপস্থিত হয় না এবং যদি আমি সরাসরি গেস্ট (ভিআইএম ব্যবহার করে) এ এটি সম্পাদনা করি তবে এটি রিফ্রেশ হয়।
অদ্ভুত জিনিস এটি এইচটিএমএল ফাইলের সাথে একই আচরণ করে না।
বেশ বিরক্তিকর।

সম্পাদনা করুন 2 (উত্তর)
প্রকৃতপক্ষে, সমস্যাটির উৎপত্তি ভার্চুয়ালবক্স পার্শ্বে আরও বেশি ছিল। অথবা পরিবর্তে ভার্চুয়ালবক্স এবং সার্ভারের "sendfile" বিকল্পের মধ্যে একটি দ্বন্দ্ব।
এই লিঙ্ক VirtualBox ঘৃণা Sendfile আমাকে সমাধান দিয়েছেন: সুইচ করুন ফাইল পাঠান সার্ভার কনফিগারেশন মধ্যে পতাকা বন্ধ:

sendfile  off;

আশা করি এটি বিকাশের জন্য ভার্চুয়ালবক্স ব্যবহার করে অন্য ব্যক্তিরও সাহায্য করবে। :)
কিছু অতিরিক্ত তথ্য আছে ভার্চুয়ালবক্স ফোরাম


87
2018-05-13 14:18


উত্স


আপনি একটি vagrant ভিএম nginx চলমান এবং ভাগ fs ব্যবহার করছেন? #Nginx এ সংমিশ্রণটি ব্যবহার করে আপনার লক্ষণগুলির বেশ কয়েকটি প্রতিবেদন হয়েছে। - kolbyjack
আমি আক্ষরিক আপনি আলিঙ্গন করতে পারে !! 48 ঘন্টা ধরে অভিশাপ দিয়েছে এবং এই সঠিক ইস্যুটির সাথে সম্পূর্ণ পাগল হয়ে গেছে .., কিছুদিনের জন্য nginx recompiled, মিশ্র দেবতা কিছু ছোট fluffy প্রাণী sacrificed, ক্যাশে নির্দেশাবলী পিছনে পিছনে শিখেছি ... সব খুঁজে বের করার জন্য এটি একটি লাইন অদ্ভুত ভার্চুয়ালবক্স ধন্যবাদ অদ্ভুত হচ্ছে! - James Butler
আপনি উত্তর হিসাবে উত্তরটি পোস্ট করতে এবং এটি স্বীকার করলে এটি আরও বেশি পরিষ্কার হবে যাতে সবাই দেখতে পারে যে এই সমস্যাটি সমাধান হয়েছে। - Zombaya
এটি আমাকে অনেক সাহায্য করেছে। ধন্যবাদ. - Matt M.
আমি এই সকালে এই সকালে আঘাত পেয়েছিলাম। এটা ছাড়া শেয়ার্ড ফোল্ডার নিচে ছিল বুঝতে পারছি না। ধন্যবাদ! - Jaffa The Cake


উত্তর:


যেহেতু উত্তরটি কোথাও লুকানো প্রশ্ন থেকে এসেছে - এখানে একটি ভার্চুয়ালবক্স পরিবেশে nginx এর সমাধানটি স্বতন্ত্র উত্তর হিসাবে।

আপনার nginx কনফিগারেশন (আনুষ্ঠানিকভাবে /etc/nginx/nginx.conf) অথবা vhost কনফিগারেশন ফাইলটি পরিবর্তন করুন sendfile পরামিতি off:

sendfile  off;

যদিও sendfile Nginx এর খ্যাতি (জ্বলন্ত দ্রুত নিম্ন স্তরের স্ট্যাটিক ফাইল পরিবেশন দক্ষতা) হৃদয় হয়, এটি স্থানীয় উন্নয়ন জন্য একটি বেন হতে পারে, যেমন। জাভাস্ক্রিপ্ট যে প্রায়ই পরিবর্তন এবং পুনরায় লোড করা প্রয়োজন। তবুও Nginx sendfile স্মার্ট এবং সম্ভবত অধিকাংশ লোকের সমস্যা নয়; পাশাপাশি আপনার ব্রাউজার এর "নিষ্ক্রিয় ক্যাশে" অপশন চেক করুন!


58
2017-11-19 09:52



+1 যদিও উত্তর ব্যাখ্যা করা উচিত কেন পাঠকদেরকে রেফারেন্সগুলির জন্য অনুসন্ধানের প্রশ্নটিকে পুনরায় খুঁজে / পুনঃ-পড়ার পরিবর্তে কার্যকর করার পরিবর্তে এটি প্রয়োজনীয়। উত্তরটি নিজের উপর তৈরি করুন -> ভাল। - AD7six
এই আমার জন্য উত্তর হতে বলে মনে হচ্ছে। সমস্যাটি Sendfile, VirtualBox এবং একটি OSX হোস্টের নির্দিষ্ট সংমিশ্রণের সাথে ঘটে। abitwiser.wordpress.com/2011/02/24/virtualbox-hates-sendfile  forums.virtualbox.org/viewtopic.php?f=1&t=24905 - Steve Bennett
sendfile এমনকি একটি স্থানীয় উন্নয়ন পরিবেশের জন্য জরিমানা; এটি শুধুমাত্র ভার্চুয়ালবক্স যা এটি ভাঙা হয়। যা এক কারণ (অনেকে) আমি ভার্চুয়ালবক্স এড়ানো সুপারিশ করছি ... - Michael Hampton♦
সংরক্ষণের জন্য ধন্যবাদ, ভ্যাগেন্ট / ভার্চুয়ালবক্স / উবুন্টু / ওয়ার্ডপ্রেস এর সাথে অদ্ভুত সমস্যা, আমি অনুমান করছি আমার PROD পরিবেশটি ডিফল্ট হিসাবে sendfile এ নিরাপদ। - sonjz
Nginx এবং ডকার সঙ্গে আমার সমস্যা সমাধান করে - PascalTurbo


আপনার মেয়াদ শেষ ট্যাগ সেট করুন

expires off;

এবং এটি কোনও মেয়াদ শেষ হওয়া উচিত নয়, এটি আপনার ব্রাউজার ক্যাশিং ফাইলগুলি ভুলভাবেও হতে পারে


15
2018-05-13 14:20



দুর্ভাগ্যবশত, আমি পাশাপাশি এই চেষ্টা করেছেন expires -1 এবং আচরণ এখনও একই। - Olivier Chappe
ব্রাউজার সম্পর্কিত, আমি এই সম্ভাবনার কথা চিন্তা করেছি: আমি প্রথমে Chrome এর সাথে চেষ্টা করছিলাম এবং ফায়ারফক্সে ফাইলটি সংশোধন করার পরে এটি প্রথমবার খোলা হয়েছিল: আমি এখনও ফাইলটির প্রথম সংস্করণ পেয়েছি। - Olivier Chappe
ক্যাশে-কন্ট্রোল হেডারটি সম্ভবত ক্যাচ-কন্ট্রোল হওয়া উচিত: নন-ক্যাচ - anthonysomerset
অথবা ক্যাশে নিয়ন্ত্রণ শিরোনাম সম্পূর্ণরূপে মুছে ফেলুন - দুঃখিত পূর্ববর্তী মন্তব্য সম্পাদনা করতে পারে না - anthonysomerset
উইন্ডোজ, "মেয়াদ শেষ" এখনও এইচটিএমএল ফাইল ক্যাশে নিষ্ক্রিয় করে না। যখন আমি আমার আইডিইতে একটি ফাইল আপডেট করি তখন অত্যন্ত হতাশাজনক, কিন্তু $ #% ing nginx একটি পুরানো সংস্করণে কাজ করে। - Dan Dascalescu


উপরে উল্লিখিত কোনটি যদি সাহায্য করে এবং এখনও Nginx আপনার ফাইলগুলির পুরানো সামগ্রী প্রদান করে তবে এটি সম্পর্কিত সমস্যা হতে পারে open_file_cache

রেফারেন্স হিসাবে দেখুন:


2
2017-10-14 20:38





এটি ভার্চুয়ালবক্সে পুরানো বাগ (দেখুন: # 819, # 9069, # 12597, # 14920) যেখানে vboxvfs সিঙ্ক করা ফাইলগুলিতে mmapped অ্যাক্সেসের সাথে কিছু সমস্যা বলে মনে হয়।

এটি যখন আপনি VM এর বাইরে ফাইল সম্পাদনা করতে পারেন, এবং আপনি VM এর মধ্যে একই পরিবর্তন দেখতে প্রত্যাশা করেন।

এই সমস্যাটি সমাধান করার জন্য, অক্ষম করে ক্লায়েন্টকে ফাইলগুলি সরবরাহ করতে আপনাকে কার্নেল sendfile সমর্থন নিষ্ক্রিয় করতে হবে EnableSendfile পছন্দ। এটি বিশেষ করে NFS বা SMB মাউন্ট করা ফাইলগুলির জন্য সমস্যা।

জন্য Nginx (পরিবর্তন nginx.conf), উদাঃ

sendfile off;

Apache (ইন httpd.conf অথবা vhosts ফাইলে), উদাঃ

<Directory "/path-to-nfs-files">
  EnableSendfile Off
</Directory>

পরিবর্তন পরে Apache পুনরায় লোড।


অন্যান্য সম্ভাব্য সমাধানটি কেবল হোস্টের ফাইলগুলি সম্পাদনা করতে মনে রাখবেন না, বা একই ফাইলটি পুনরায় সম্পাদনা করার চেষ্টা করুন, কিন্তু VM এর মধ্যে।


আরেকটি কাজকর্মের মধ্যে রয়েছে লিনাক্স পেজক্যাচ ড্রপ করা, যেমন।

echo 1 > /proc/sys/vm/drop_caches

অথবা ক্যাশে প্রতি সেকেন্ড সাফ (প্রতি এই পোস্ট), চেষ্টা করুন:

watch -n 1 $(sync; echo 1 > /proc/sys/vm/drop_caches)

দ্রষ্টব্য: নম্বর 1 ফ্রি পেজক্যাশ, ডেন্ট্রি এবং ইনডসের জন্য ২, পৃষ্ঠাক্যাচের জন্য 3, ডেন্ট্রি এবং ইনডসের জন্য দাঁড়িয়েছে।


নিম্নোক্ত সমস্যাটি নিম্নলিখিত এমএমএপি-পরীক্ষার প্রোগ্রাম দ্বারা প্রতিলিপি করা যেতে পারে, দেখুন: mmap-problem.c


2
2017-12-13 14:03





এই দেরী, কিন্তু এখনও অনুপযুক্ত চিহ্নিত করা হয়েছে, তাই আমি একটি stab নিতে হবে। শুধু giggles জন্য, আপনি চেষ্টা করেছেন:

location ~* \.(css|js)$ {
    expires 0;
    break;
}

এটি নিজে চেষ্টা করে নি, কিন্তু যখন আমি সমস্যায় সমস্যায় থাকি তখন সময়ে সময়ে সার্ভার কন্টেইনারে Nginx এর সাথে এই ধরনের জিনিসটি চেষ্টা করতে শিখেছি ...


1
2017-12-28 01:47