nginx 404 খালি ডিরেক্টরি 403 এর পরিবর্তে


3

আমার এনগিনেক্স সার্ভারের জন্য আমার নীচের কনফিগারেশন রয়েছে:

server {
    listen 80 default_server;
    server_name example.com www.example.com;
    root /var/www/example.com/web;

    index index.php index.html;

    location / {
        # try to serve file directly, fallback to rewrite
        try_files $uri $uri/ @rewriteapp;
    }

    location @rewriteapp {
        # rewrite all to index.php
        rewrite ^(.*)$ /index.php last;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
    }
}

এবং নিম্নলিখিত ডিরেক্টরি কাঠামো:

/var/www/example.com/:

  1. /index.php
  2. /dir/index.html
  3. / ফাঁকা /

যখন ক্লায়েন্ট হিট হয়: ' উদাহরণ . com/ dir/ ' তারপরে সূচক html পরিবেশন করা হয়।

যখন ক্লায়েন্টটি কিছু অ-অস্তিত্বের URL টি হিট করে: ' example.com/non-eximar/ ' তারপরে সূচক.টিফপি মূল ডিরেক্টরিতে পরিবেশন করা হয়।

কিন্তু যখন ক্লায়েন্ট হিট: ' উদাহরণ.com / empty/ ' তখন 403 স্থিতি কোড প্রেরণ করা হয়।

  1. 404 অধিক উপযুক্ত কারণ সূচক ফাইলটি কেন এই ডিরেক্টরিতে অনুপস্থিত তখন কেন এটি 403 পাঠানো হচ্ছে?
  2. আমি এই জাতীয় অনুরোধগুলি কীভাবে index.php (@rewriteapp) এ মানচিত্র করব ?

উত্তর:


10
  1. এটি ঘটে কারণ বেশিরভাগ ওয়েব সার্ভারে, ফোল্ডারগুলির জন্য ডিফল্ট ক্রিয়া হ'ল "ডিরেক্টরি তালিকা" যা ডিফল্টরূপে অক্ষম থাকে। সাধারণত আপনি যদি ডিরেক্টরি সূচকে অক্ষম করেন তবে অ্যাপাচি-তেও একই ঘটবে। আপনি এনজিনেক্সে যা করতে পারেন তা হ'ল আপনার চেষ্টা_পদ্ধতি নির্দেশকের শেষে = 404।

  2. আপনি চেষ্টা / ফাইলের নির্দেশের শেষে /index.php রেখে এই কাজটি করতে পারেন। তবে, সুরক্ষার কারণে, এটি সর্বদা সুপারিশযোগ্য নয়।

এছাড়াও, আপনার কনফিগারেশনে এনজিনেক্সের একটি ছোট্ট ভুল বোঝাবুঝি রয়েছে: আপনার $ uri / $ uri / index.php বা $ uri / index.html বা যাই হোক না কেন প্রতিস্থাপন করা উচিত। এটি ট্রাই_ফাইলস s ইউরি / এ থামায় কারণ এটি সেই অবস্থানটি খুঁজে পেয়েছে তবে ব্যবহারকারী এটি অ্যাক্সেস করতে নিষেধ করেছেন।


1
আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ! যাইহোক, @ শ্রুতিপ্প আমার চেষ্টা_ফায়ালের শেষের দিকে , তবে দেখে মনে হচ্ছে এটি এটি পৌঁছেছে না। দেখে মনে হচ্ছে এটি $ uri / এ চেষ্টা করা বন্ধ করে দেয় ।
স্লাভা ফমিন II

1
আহ, আমি এখন এটি দেখতে পাচ্ছি, আপনার $ uri / $ uri / index.php বা $ uri / index.html বা যাই হোক না কেন প্রতিস্থাপন করা উচিত। এটি থামায় কারণ এটি সেই অবস্থানটি খুঁজে পেয়েছে তবে ব্যবহারকারী এটি অ্যাক্সেস করতে নিষেধ করেছেন।
ফ্লোরিন Asăvoaie

ওহ, এটা বোঝা যায়। আপনার উত্তর আপডেট করুন এবং আমি এটি গ্রহণ করে খুশি হবে। ধন্যবাদ!
স্লাভা ফমিন II

যত্নশীল: এটি locationকোনও ব্লকের মধ্যে পরবর্তী কিছু নিয়মকে বাইপাস করতে পারে । আমার একটি নির্দিষ্ট জায়গায় পুনর্নির্দেশ /folder/ছিল যা এর কারণে এড়ানো হয়েছিল। পরিবর্তে, আমি এখন অন্য সমাধানটি ব্যবহার করছি: সার্ভারফ্লট
রুবেন ভার্বোরঘ

3

আপনি যদি এনজিনেক্স 4040 প্রেরণ করতে চান যখনই এটি 403 প্রেরণ করবে, এটি সম্পন্ন হয়েছে error_page:

server {
    root /var/www/example.com/web;
    error_page 404      /s/404.html;
    error_page 403 =404 /s/404.html;
    location /s/404.html { internal; }

    # etc
}

locationলাইন তোলে http://example.com/s/404.htmlপাশাপাশি একটি 404 উত্পাদন।


যেমনটি আপনি বলেছেন, এটি কেবল 403 ত্রুটি পৃষ্ঠাটি 404 এর সাথে প্রতিস্থাপন করছে directory কেবল ডিরেক্টরি সূচক পৃষ্ঠাগুলির ক্ষেত্রেই এটি করা সম্ভব? 403 এর অর্থ "আপনাকে ডিরেক্টরি সূচক দেখার অনুমতি নেই" ব্যতীত অন্য জিনিসগুলিও বোঝাতে পারে।
স্টেইন শ্যাট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.