প্রশ্ন কিভাবে একটি ক্যাচিং বিপরীত প্রক্সি হিসাবে Nginx সেট আপ?


আমি সম্প্রতি শুনেছি যে Nginx তার বিপরীত প্রক্সি বৈশিষ্ট্য ক্যাশে যোগ করেছে। আমি চারপাশে তাকিয়ে কিন্তু এটি সম্পর্কে অনেক তথ্য খুঁজে পেতে পারে না।

আমি আপিন / জাঞ্জোর সামনে একটি ক্যাচিং বিপরীত প্রক্সি হিসাবে Nginx সেট আপ করতে চাই: অ্যাপাচে কিছু (কিন্তু সব না) গতিশীল পৃষ্ঠাগুলির জন্য Nginx প্রক্সি অনুরোধ করার জন্য, তারপর তৈরি পৃষ্ঠাগুলি ক্যাশে এবং ক্যাশে থেকে পৃষ্ঠাগুলির জন্য পরবর্তী অনুরোধগুলি সরবরাহ করে।

আদর্শভাবে আমি 2 উপায়ে ক্যাশে অকার্যকর করতে চাই:

  1. ক্যাশে আইটেমের মেয়াদ শেষ হওয়ার তারিখ নির্ধারণ করুন
  2. ক্যাশে আইটেমটি স্পষ্টভাবে অকার্যকর করতে। উদাহরণস্বরূপ আমার Django ব্যাকএন্ড নির্দিষ্ট তথ্য আপডেট করা হয়েছে, আমি Nginx প্রভাবিত পৃষ্ঠার ক্যাশে অকার্যকর বলতে চাই

এটা কি Nginx সেট করা সম্ভব? কিভাবে?


139
2018-06-24 01:35


উত্স




উত্তর:


আমি মনে করি ক্যাশে আইটেমগুলিকে স্পষ্টভাবে অকার্যকর করার উপায় নেই, তবে বাকিটি কীভাবে করবেন তা উদাহরণস্বরূপ। হালনাগাদ: পিয়েরার আরেকটি প্রশ্নের জবাবে, একটি আছে ক্যাশে purge মডিউল যে আপনি ব্যবহার করতে পারেন। আপনি nginx এর proxy_cache_bypass ব্যবহার করে একটি ক্যাশে আইটেমের রিফ্রেশ করতে পারেন - দেখুন চেরিয়ান এর উত্তর আরও তথ্যের জন্য.

এই কনফিগারেশনে, ক্যাশে নয় এমন আইটেমগুলি example.net থেকে সংরক্ষিত হবে এবং সংরক্ষণ করা হবে। ক্যাশেড সংস্করণগুলিকে ভবিষ্যতে ক্লায়েন্টদের কাছে সরবরাহ করা হবে যতক্ষণ না তারা আর বৈধ (60 মিনিট) নয়।

আপনার ক্যাশ-কন্ট্রোল এবং মেয়াদ শেষ হয়ে গেলে এইচটিএমএল হেডারদের সম্মানিত করা হবে, তাই আপনি যদি মেয়াদ শেষ হওয়ার তারিখ নির্ধারণ করতে চান তবে আপনি যা করতে যাচ্ছেন তাতে সঠিক শিরোনামগুলি সেট করে আপনি এটি করতে পারেন।

অনেকগুলি প্যারামিটার রয়েছে যা আপনি সুর করতে পারেন - বিভিন্ন সেটিংস / প্যারামিটারের অর্থ সহ এই সমস্ত সম্পর্কে আরও তথ্যের জন্য nginx প্রক্সি মডিউল ডকুমেন্টেশন দেখুন: http://nginx.org/r/proxy_cache_path

http {
  proxy_cache_path  /var/www/cache levels=1:2 keys_zone=my-cache:8m max_size=1000m inactive=600m;
  proxy_temp_path /var/www/cache/tmp; 


  server {
    location / {
      proxy_pass http://example.net;
      proxy_cache my-cache;
      proxy_cache_valid  200 302  60m;
      proxy_cache_valid  404      1m;
    }
  }
}

94
2017-09-23 20:01



নতুন অ্যাপ্লিকেশনের জন্য এটি একটি যুক্তিসঙ্গত প্রথম ধাপ যা ২0k / রিক / সেকেন্ড নেই। - Barry
@ বারি কি দ্বিতীয় স্টিপি হবে? - Jürgen Paul
@ লিজিট - আমি জানি না, কিন্তু ঐতিহ্যগতভাবে শেষ ধাপ হল "লাভ" :-) - Stephen C
দুঃখজনকভাবে, এটি nginx 1.11 দিয়ে কাজ করে না। যেহেতু সর্বশেষ আপডেটটি প্রায় 3 বছর আগে ছিল তাই মনে হচ্ছে এটি আর সমাধান নয়। - izogfif
কি করে: inactive=600m এর অর্থ কি? নন inactive সময় হতে অনুমান করা? ` [inactive=time] - NeverEndingQueue


আপনি বিশেষভাবে করতে পারেন ক্যাশ অবৈধ মাধ্যমে পৃষ্ঠা

proxy_cache_bypass       

আপনি একটি পৃষ্ঠা ক্যাশে করতে চান বলুন, এই ভাবে ক্যাশে সেট

location = /pageid {
  proxy_pass http://localhost:82;
  proxy_set_header   Host             $host;
  proxy_set_header   X-Real-IP        $remote_addr;
  proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  proxy_ignore_headers Set-Cookie; 
  proxy_ignore_headers Cache-Control; 
  proxy_cache_bypass        $http_secret_header;
  add_header X-Cache-Status $upstream_cache_status;
}

এখন, যখন আপনি চান যে পৃষ্ঠা এবং ক্যাশে আবার অকার্যকর 

শিরোনাম সঙ্গে একটি গোপন কার্ল কল করবেন

curl "www.site.com/pageid" -s -I -H "secret_header:true" 

এটি অবৈধ এবং এটি ক্যাশে হবে।

Nginx 0.7 থেকে কাজ করে।

একটি যোগ বোনাস হিসাবে add_header X-Cache-Status পাতা ক্যাশে থেকে বা না কিনা তা পরীক্ষা করতে ব্যবহার করা যেতে পারে।


46
2017-11-26 04:00



নতুন পৃষ্ঠাটি যখন ক্যাশেবল হয় তখন এটি শুধুমাত্র ক্যাশেড পৃষ্ঠাগুলিকে আপডেট করতে পারে। যদি আপনি পৃষ্ঠাটি মুছে ফেলেছেন (404 বা অন্য ত্রুটিগুলি এখন ব্যাকএন্ড দ্বারা সরবরাহ করা হয়), পৃষ্ঠাটি এখন সেট-কুকি বা "সামগ্রী-নিয়ন্ত্রণ: ব্যক্তিগত" শিরোনাম পাঠায়, ক্যাশেড সামগ্রীটি "অবৈধ" হবে না। - rbu


আমি আপনাকে দিতে সুপারিশ বার্নিশ একটি চেষ্টা. বার্নিশ বিশেষভাবে একটি বিপরীত প্রক্সি ক্যাশ হিসাবে ডিজাইন করা হয়। এটি মূল সার্ভার থেকে পাঠানো সমস্ত ক্যাশে কন্ট্রোল হেডারগুলি সম্মত করবে, যা আপনার প্রথম অনুরোধটি সন্তুষ্ট করে।

আপনার দ্বিতীয় অনুরোধ, স্পষ্ট অবৈধতা জন্য। আমার দৃঢ় সুপারিশ হল যে আপনি যে সংস্থানটি অবৈধ করতে চান তার URL টির নাম পরিবর্তন করতে হয়, হয় ফাইলটি পুনঃনামকরণ বা ক্যোয়ারী স্ট্রিং ক্যাশে বুলারের কিছু ফর্ম ব্যবহার করে। বার্নিশ একটি আছে PURGE অপারেশন যা বার্নিশ থেকে ক্যাশে থেকে সরিয়ে দেবে, তবে এটি আপনাকে এবং ব্যবহারকারীর মধ্যে অন্য কোন ক্যাশে নিয়ন্ত্রণ করবে না। যেমন আপনি বলেছেন যে আপনি স্পষ্টভাবে একটি সংস্থান পরিস্কার করতে চান তবে স্ট্যান্ডার্ড http নিয়ন্ত্রণ শিরোনামগুলি আপনাকে সাহায্য করবে না। যে ক্ষেত্রে একটি সম্পদ ক্যাশিং পরাস্ত সবচেয়ে foolproof উপায় এটি পুনঃনামকরণ করা হয়।


36
2018-06-24 02:43



"ফাইলটি পুনঃনামকরণ বা ক্যোয়ারী স্ট্রিং ক্যাশ বুস্টারের কিছু ফর্ম ব্যবহার করে আপনি কী বোঝাতে চেয়েছিলেন?" আমি নিশ্চিত যে আমি বুঝতে পারছি না কেন PURGE এর মতো কোনও অপারেশন ব্যবহার করা ভাল ধারণা নয়। - Continuation
বার্নিশ জন্য +1। কাজের জন্য সঠিক সরঞ্জামগুলি ব্যবহার করা সবসময় ভাল। - Tom O'Connor
@below: পারফরম্যান্স এবং বহুমুখীতা মধ্যে বার্নিশ স্পর্শ প্রায় কোন আশার আছে। এটি একটি ফ্রি ফ্রিবিএসডি কার্নেল ডেভেলপার এবং ইউরোপ ভিত্তিক একটি ডেডিকেটেড দল দ্বারা সমর্থিত। বার্নিশ, হারুকু এবং আরো অনেক কিছুতে বার্নিশ উৎপাদন করছে। - Barry
একটি ক্যাশ-ব্যাস্টারের সর্বাপেক্ষা সহজ উদাহরণ একটি স্ট্যাটিক রিসোর্সে একটি ক্যোয়ারী স্ট্রিংয়ের একটি সংস্করণ যোগ করা, তাই style.css style.css হয়ে যায় 123? যখন আপনি ফাইলের একটি নতুন সংস্করণ ধাক্কা দিতে চান তখন আপনি সংস্থার url style.css এ পরিবর্তন করবেন? 124 এবং এখন ক্যাশগুলি একেবারে নতুন ক্যাশে আলাদাভাবে নতুন সম্পত্তির রূপে এটি বাছাই করবে। Apache ফাইল শৈলী.css পরিবেশন করা হবে কোনও ক্যোয়ারী স্ট্রিং সহ, তাই প্রকৃত ফাইলের কোনও পরিবর্তন প্রয়োজন হয় না। - chmac
যদি সম্ভব হয় তবে ক্যাশে বাস্টারটিকে ফাইলনাম নিজেই নিজের মতো করা উচিত style.v123.css কিছু ক্যাশে একটি ক্যোয়ারী স্ট্রিং আছে যে অনুরোধ ক্যাশে হবে না। - Noah McIlraith


নির্বাচিত পৃষ্ঠাগুলি অকার্যকর করার জন্য আপনি nginx-0.8.x এর জন্য "cache_purge" প্যাচ ব্যবহার করতে পারেন যা আপনি যা চান তা নির্দ্বিধায় করে;)

এটি উপলব্ধ এখানে


7
2017-11-17 07:38





সর্বাধিক ক্যাশিং সরঞ্জাম (সিট্রিক্স) একটি ক্যাশেড পৃষ্ঠা পুনঃপুন করতে একটি বল-রিফ্রেশ (Ctrl + r) করতে দেয়।

এখানে একটি কৌশল আমি Nginx অনুরূপ কিছু খুঁজে পাওয়া যায় নি।

server  {
        # Other settings
        proxy_pass_header       Set-Cookie; # I want to cache logged-in users
        proxy_ignore_headers    X-Accel-Redirect;
        proxy_ignore_headers    X-Accel-Expires Expires Cache-Control;
        if ($http_cache_control ~ "max-age=0") {set $eac 1;}
        proxy_cache_bypass $eac;
}

এটি অনুমান করে যে যখন আপনি আপনার ব্রাউজারে একটি Ctrl + r করবেন, তখন ক্যাশ-কন্ট্রোল হেডারটির অনুরোধে সর্বাধিক বয়স = 0 থাকে। আমি জানি ক্রোম এটা করে, কিন্তু আমি অন্যান্য ব্রাউজারে চেষ্টা করে নি। আরো হেডার ক্ষেত্র যোগ করা সহজ হতে পারে, শুধু বিবৃতি সেট করা হলে আরও যোগ করে $eac পরিবর্তনশীল 1।


6
2018-04-10 23:02





ক্যাশিং nginx মধ্যে চমত্কার নতুন ফাংশন (এবং এখন জন্য এত ভাল নথিভুক্ত করা হয় না), কিন্তু উৎপাদন ব্যবহার করা যথেষ্ট স্থিতিশীল।


4
2018-06-24 02:25





আমি বিশ্বাস করি NginxHttpProxyModule HTTP অনুরোধ cahe সক্ষম হয়। সাথে শুরু নির্দেশাবলী সন্ধান করুন:

proxy_cache

হ্যাঁ, নির্দেশের মাধ্যমে ক্যাশে আচরণ নিয়ন্ত্রণ করা সম্ভব:

proxy_cache_valid

3
2018-06-24 10:12





আপনি এটিতে ডক্স খুঁজে পাচ্ছেন না তার উপর ভিত্তি করে, আমি উত্পাদনতে তার উপর নির্ভর করার বিষয়ে একটু সচেতন হব। তুমি কি ভার্নিশ বলেছ? এটা আমার "nginx বিপরীত proxies", ছোট, লাইটওয়েট, একটি কাজ করছেন এবং এটা ভাল করছেন।


2
2018-06-24 01:38



এখানে ডকুমেন্টেশন আছে: wiki.nginx.org/NginxHttpProxyModule#proxy_cache - rmalayter