ডিরেক্টরি এবং সাবদারগুলিতে অ্যাক্সেসকে কীভাবে সীমাবদ্ধ করবেন


42

নির্দেশিকা "টেস্টডির" তে আমার কোনও ফাইল বা সাবডিয়ারগুলিতে অ্যাক্সেস সীমাবদ্ধ করা দরকার। আমার বিশ্বাস:

...
location ~* ^.+\.(jpg|txt)$ {
            root   /var/www/site;
        }
location /testdir {
        deny all;
        return 404;
        }
...

আমার কনফিগারেশনে আমার / টেস্টডির / জেপিজি_অর_টেক্সট-ফাইলগুলির উপর কোনও বিধিনিষেধ নেই। এটা কিভাবে করতে হবে?


দ্রষ্টব্য, আমার অভিজ্ঞতা অনুসারে, লিনাক্সে এনগিনেক্স চলাকালীন লোকেশন ফাংশনটি সঠিকভাবে কাজ করে। উইন্ডোতে চলতে চলতে, আমাদের এটি কাজ না
করায়

উত্তর:


43

এক স্থানের এন্ট্রি করতে এনজিনেক্সে একাধিক ডিরেক্টরিতে অ্যাক্সেস সীমাবদ্ধ করতে

...
location ~ /(dir1|dir2|dir3) {
   deny all;
   return 404;
}
...

7
আপনার 404 না ​​হয়ে 403 ফিরতে হবে
স্টিলিমেটিক 1985

12
এটি প্রশ্নের কোনও উত্তর দেয় না।

1
403 ফেরত ফোল্ডারটি থাকার একটি ইঙ্গিত দেয়, একটি 404 কোনও ফোল্ডারের উপস্থিতির কোনও প্রমাণ দেয় না
ডন উইলসন

23

কারণ "অস্বীকৃতি" নির্দেশনার সাথে মেলে যাওয়ার আগে "রুট" নির্দেশনা মেলে। আপনার নির্দেশাবলীর ক্রমটিকে বিপরীত করুন এবং এটি কাজ করা উচিত:

...
location /testdir {
  deny all;
  return 404;
}
location ~* ^.+\.(jpg|txt)$ {
  root   /var/www/site;
}
...

16

টেস্টডির ম্যাচটি jpg / txt ম্যাচের পরিবর্তে চয়ন করা হয়েছে তা নিশ্চিত করতে নিম্নলিখিত অবস্থানগুলি ব্যবহার করুন:

location ^~ /testdir {
  deny all;
  return 404;
}
location ~* ^.+\.(jpg|txt)$ {
  root   /var/www/site;
}

আপনার উদাহরণে, আপনার কাছে দুটি ধরণের অবস্থান রয়েছে। location /testdirএটি একটি উপসর্গ অবস্থান, কারণ এটির ~মধ্যে locationএবং এর মধ্যে টিলড ( ) নেই /testdir

location ~* ^.+\.(jpg|txt)$একটি রেজেক্স অবস্থান (টিলডের *পরে সরাসরি কারণে কেস-সংবেদনশীল এক )। থেকে nginx ডকুমেন্টেশন :

প্রদত্ত অনুরোধের সাথে মিলে যাওয়া অবস্থানটি সন্ধান করতে, এনজিনেক্স প্রথমে উপসর্গের স্ট্রিংগুলি (উপসর্গের অবস্থানগুলি) ব্যবহার করে সংজ্ঞায়িত অবস্থানগুলি পরীক্ষা করে। তাদের মধ্যে, দীর্ঘতম মিলের উপসর্গের সাথে অবস্থানটি নির্বাচন করা এবং মনে রাখা হয়। তারপরে কনফিগারেশন ফাইলে তাদের উপস্থিতির ক্রম অনুসারে নিয়মিত প্রকাশগুলি পরীক্ষা করা হয়। নিয়মিত এক্সপ্রেশনগুলির অনুসন্ধান প্রথম ম্যাচে শেষ হয় এবং এটির সাথে সম্পর্কিত কনফিগারেশন ব্যবহার করা হয়। যদি নিয়মিত অভিব্যক্তির সাথে কোনও মিল না পাওয়া যায় তবে পূর্বে মনে করা উপসর্গের অবস্থানটি কনফিগারেশন ব্যবহার করা হয়।

এখানে সমস্যাটি হ'ল আপনার টেস্টডিরের অবস্থানটি মনে রাখা হচ্ছে, তবে জেগিজি / টিএসটিএস অবস্থানটি মিলে যাওয়ার সাথে সাথে রেজেজ পর্বের সময় নির্বাচন করা হয়। ডকুমেন্টেশন থেকে নিম্নলিখিত নোটটি হল আমি আমার সমাধানের উপর ভিত্তি করে (উপরে দেওয়া):

দীর্ঘতম মিলে যাওয়া উপসর্গের অবস্থানটিতে যদি "^ ~" সংশোধক থাকে তবে নিয়মিত প্রকাশগুলি পরীক্ষা করা হয় না।


11
location /foo {
    deny all;
    return 404;
}

সবগুলি অস্বীকার করার কারণে এটি আপনাকে একটি 403 দেবে ... আপনি যখন সার্ভারটি একটি 404 দিতে চান তখন কেবল একটি 404 ফেরত দেয় ... যেমন:

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