অ্যাপাচি এবং এনজিনেক্স দ্বারা পরিবেশন করা সমস্ত 404 পৃষ্ঠায় আমি কীভাবে নো-ক্যাশে শিরোনাম যুক্ত করব?


9

ক্লাউডফ্লেয়ারে স্যুইচ করার পরে আমি সম্প্রতি একটি সমস্যার সমাধান করেছি এবং সমাধানটি হ'ল ক্লাউডফ্লেয়ারকে 404 টি প্রতিক্রিয়া ক্যাচ করা থেকে থামানো।

আমাদের লোড-ভারসাম্যযুক্ত বহু-সার্ভার সেটআপে, মাঝে মধ্যে 404s ঘটে তবে সেগুলি দ্রুত আরএসইএনসি দ্বারা স্থির করা হয়েছে (lsyncd এর মাধ্যমে)। ক্লাউডফ্লেয়ারের আগে, আরএসসিএন-র কাজটি করার সাথে সাথে 404 বি ফাইলের পুনরায় অনুরোধ 200 হয়ে যাবে।

তবে, যেহেতু ক্লাউডফ্লেয়ার ক্যাশিং শিরোনামের উপর ভিত্তি করে সমস্ত ডেটা ক্যাশে করে এবং অ্যাপাচি বা এনগিনেক্স কোনওটিই 404s এর জন্য নো-ক্যাশে শিরোনাম প্রেরণ করে না, ক্লাউডফ্লেয়ার 404 প্রতিক্রিয়াটি কিছু সময়ের জন্য ক্যাশে শেষ করে।

আমি বিশ্বব্যাপী অ্যাপাচি এবং এনজিঙ্কস উভয়ই (বিশ্বব্যাপী, সমস্ত হোস্ট করা ডোমেনের জন্য) 404s এর জন্য এই জাতীয় শিরোনাম যুক্ত করার সমাধান অনুসন্ধান করেছি, তবে এখনও অবধি ফাঁকা উঠে এসেছে।

কেউ সাহায্য করতে পারেন?

ধন্যবাদ.


অনুরূপ প্রশ্ন, যদিও শুধুমাত্র অ্যাপাচি (এখনও খুব উত্তর না দেওয়া): সার্ভারফল্ট.কোয়েশনস / 331544/…
আর্টেম রাশাকোভস্কিই

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

উত্তর:


6

আপনি একটি ত্রুটি_পৃষ্ঠা নির্দেশিকা ব্যবহার করে পেতে পারেন না, এবং তারপরে যুক্ত শিরোনামের সাথে পৃথকভাবে অবস্থানটি পরিচালনা করতে পারেন?

যেমন এনগিনেক্সে:

    server {
      ...
      error_page 404 /404.html;
      location = /404.html {
        root   /usr/share/nginx/html;
        add_header Cache-Control "no-cache" always;
      }
    }

1
এখানে দুটি ইস্যু রয়েছে তবে আমি সেই দিক দিয়ে চলেছি। 1. আমি ডিফল্ট 404 পৃষ্ঠা ওভাররাইড করতে ও যে নিয়ম তৈরি করতে চায়নি listenযেহেতু locationভিতরে সমর্থিত নয় httpসরাসরি। ২. আরও গুরুত্বপূর্ণ, আপনার স্নিপেটটি আসলে কাজ করে না কারণ অ্যাড_হেডারটি কেবলমাত্র 20X এবং 30X ( nginx.org/en/docs/http/ngx_http_headers_module.html ) এ প্রযোজ্য । তবে, আমরা ভাগ্যে আছি, যেহেতু সম্প্রতি প্রকাশিত 1.7.5 হিসাবে, আপনি এখন একটি alwaysমোডেফার যুক্ত করতে পারেন যা এটি সমস্ত প্রতিক্রিয়া কোডগুলিতে প্রয়োগ করবে। আমাকে এনগিনেক্স আপগ্রেড করতে হয়েছিল তবে এটি বাটটিতে খুব ভাল ছিল। এটা কাজ করে।
আর্টেম রাশাকোভস্কিই

2
আমি আমার উত্তর আপডেট করেছি, আপনি সম্ভবত একটি উত্তর যুক্ত করবেন যা এই প্রশ্নটি সমাধান করার জন্য আপনি কী করেছিলেন?
জিম্মিউ

দেখে মনে হচ্ছে বাদ দেওয়া rootকাজও করে। যদি এটি সরিয়ে ফেলা হয় তবে এনজিএনএক্সের জন্য আমি যা করতে পেরেছিলাম তা অনেকটাই।
আর্টেম রাশাকোভস্কিই

অ্যাপাচের জন্য, আমি স্থির করেছিলাম যে আমি আসলে একটি কাস্টম পৃষ্ঠা ব্যবহার করতে চাই, তাই আমি এটি করেছি: ত্রুটিপত্রক 404 /path/to/my/404.php। এবং তারপরে 404.php এর অভ্যন্তরে আমি <? Php // 404 শিরোনামকে ক্যাশে করব না ("ক্যাশে-নিয়ন্ত্রণ: নন-ক্যাশে, অবশ্যই পুনঃনির্মাণ"); // এইচটিটিপি / 1.1 শিরোনাম ("মেয়াদ শেষ: শনি, 26 জুলাই 1997 05:00:00 জিএমটি"); // অতীতের তারিখ?>
আর্টেম রাশাকোভস্কিই

আমি আপনার উত্তরটি স্বীকৃত হিসাবে চিহ্নিত করছি। যদি কেউ পরে আরও জেনেরিক অ্যাপাচি উত্তর সরবরাহ করতে চায় বা কোনও এনজিনেক্স উত্তর প্রদানের পরিবর্তে বিশ্বব্যাপী কাজ করে তবে serverতারা উজ্জীবিত হতে পারে।
আর্টেম রাশাকোভস্কিই

5

আপনি এটি এভাবেও করতে পারেন:

map $status $cache_header {
    default <for_other_codes>;
    404     "no-cache";
}


server {

    [ ... ]

    add_header "Cache-Control" $cache_header always;

}

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

এর পরে একটি সেমিকোলন অনুপস্থিত রয়েছে 404 "no-cache"তবে স্ট্যাকেক্সচেঞ্জের বোকা ন্যূনতম -6-অক্ষর-সম্পাদনা সীমাবদ্ধতা আমাকে এটি ঠিক করতে বাধা দেয়। কোডিং এবং
কনফিগারেশন সম্পর্কিত

3

অ্যাপাচি ২.৪-তে, আপনি এরকম কিছু চেষ্টা করতে পারেন:

FileETag None
<IfModule mod_headers.c>
    Header always unset ETag "expr=%{REQUEST_STATUS} == 404"
    Header always set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" "expr=%{REQUEST_STATUS} == 404"
    Header always set Pragma "no-cache" "expr=%{REQUEST_STATUS} == 404"
    Header always set Expires "Wed, 11 Jan 1984 05:00:00 GMT" "expr=%{REQUEST_STATUS} == 404"
</IfModule>

alwaysগুরুত্বপূর্ণ কারণ এই একটি হল:

আপনি স্থানীয়ভাবে উত্পাদিত অ-সাফল্য (নন-টুএক্সএক্স) প্রতিক্রিয়ায় একটি শিরোনাম যুক্ত করছেন, যেমন একটি পুনর্নির্দেশ, যে ক্ষেত্রে কেবল সর্বদা সম্পর্কিত টেবিল চূড়ান্ত প্রতিক্রিয়াতে ব্যবহৃত হয়।

আপনি সমস্ত 404s বলেছেন, তবে অবশ্যই পুরো রেফারেন্সের জন্য এটি একটিতে আবৃত করা <FilesMatch>বা <LocationMatch>সুযোগ সীমাবদ্ধ করার জন্য বোধগম্য হতে পারে ।

আমি বিশ্বাস করি এটি অ্যাপাচি ২.৪ এ একটি নতুন ক্ষমতা, কারণ exprশর্তসাপেক্ষে ব্যবহার করা মোড_হেডার ডকুমেন্টেশনের ২.২ সংস্করণে নয়।

curl -I [foo] এই কনফিগারেশন ছাড়া পরীক্ষা:

HTTP/1.1 404 Not Found
Date: Thu, 24 May 2018 17:44:29 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Type: text/html; charset=iso-8859-1

curl -I [foo] এই কনফিগারেশন দিয়ে পরীক্ষা করুন:

HTTP/1.1 404 Not Found
Date: Thu, 24 May 2018 17:44:42 GMT
Server: Apache/2.4.18 (Ubuntu)
Cache-Control: max-age=0, no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Content-Type: text/html; charset=iso-8859-1

সূত্র:

http://httpd.apache.org/docs/current/mod/mod_headers.html


0

ইস্যুতে আমার পাঁচ সেন্ট -

আমাদের পিএইচপি প্রকল্পে আমাদের কয়েকটি 404 পৃষ্ঠা রয়েছে, তাই আমি পিএইচপি স্তরের () ফাংশনগুলি ব্যবহার করে পিএইচপি স্তরে এটি করার সিদ্ধান্ত নিই

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.