কীভাবে চেষ্টা_ফায়াল কাজ করে?


72

আমি nginx ডকুমেন্টেশন তাকান এবং এটি এখনও আমাকে সম্পূর্ণ বিভ্রান্ত করে।

কিভাবে try_filesকাজ করে? এখানে ডকুমেন্টেশন যা বলে:

NginxHttpCoreModule থেকে

try_files

সিনট্যাক্স: ট্রাই_ফায়ার্স প্যাথ 1 [পাথ 2] ইউরি

ডিফল্ট: কিছুই নয়

প্রসঙ্গ: সার্ভার, অবস্থান

প্রাপ্যতা: 0.7.27

যথাযথভাবে ফাইলগুলির অস্তিত্বের জন্য পরীক্ষা করে এবং পাওয়া প্রথম ফাইলটি ফেরত দেয়। একটি পিছনে স্ল্যাশ একটি ডিরেক্টরি নির্দেশ করে - $ uri /। কোনও ফাইল খুঁজে পাওয়া যায় না এমন ইভেন্টে, সর্বশেষ প্যারামিটারে অভ্যন্তরীণ পুনর্নির্দেশ করা হবে। গত প্যারামিটার ফলব্যাক কোনো URI এবং আবশ্যক অস্তিত্ব, বা অন্য একটি অভ্যন্তরীণ ত্রুটি উত্থাপিত করা হবে না। পুনর্লিখনের বিপরীতে, ফলব্যাক যদি কোনও নামযুক্ত স্থান না হয় তবে $ আরোগুলি স্বয়ংক্রিয়ভাবে সংরক্ষণ করা হয় না। আপনার যদি আরোগুলি সংরক্ষণের প্রয়োজন হয় তবে আপনাকে অবশ্যই এটি স্পষ্টভাবে করতে হবে:

আমি বুঝতে পারি না যে এটি কীভাবে পাথগুলি পরীক্ষা করে এবং আমি যদি কোনও অভ্যন্তরীণ ত্রুটি না চাই তবে কী অন্য ফাইলটি আবিষ্কারের প্রয়াসে বাকি পথটি আবার চালু করতে পারে?

যদি আমি একটি ক্যাশেড ফাইলটি চেষ্টা করতে চাই /path/app/cache/url/index.htmlএবং যদি এটি চেষ্টা করতে ব্যর্থ হয় /path/app/index.phpতবে আমি কীভাবে এটি লিখব? আমি যদি লিখেছি:

try_files /path/app/cache/ $uri
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;

আমি index index.php index.html index.htm;। যখন আমি পরিদর্শন /urlname, এটা চেক করার চেষ্টা করবে /path/app/cache/urlname/index.phpতারপর /path/app/cache/urlname/index.html? আমরা যদি পরে সবকিছু উপেক্ষা করি তখন কি ক্যাশে ফোল্ডারটি চেক করা try_filesসম্ভব try_files? আমি চেষ্টা করেছিলাম এবং ব্যর্থ হয়েছি।

উত্তর:


64

ট্রাই_ফায়ালগুলি সংজ্ঞায়িত রুট নির্দেশনার সাথে সম্পর্কিত আপনি যে আক্ষরিক পথটি ব্যবহার করেছেন তা চেষ্টা করে এবং অভ্যন্তরীণ ফাইল পয়েন্টার সেট করে। যদি আপনি উদাহরণস্বরূপ ব্যবহার try_files /app/cache/ $uri @fallback;করেন index index.php index.html;তবে এটি এই ক্রমে পাথগুলি পরীক্ষা করবে:

  1. $document_root/app/cache/index.php
  2. $document_root/app/cache/index.html
  3. $document_root$uri

অবশেষে অভ্যন্তরীণভাবে @ ফ্যালব্যাক নামক স্থানে পুনর্নির্দেশের আগে। আপনি =404আপনার শেষ প্যারামিটার হিসাবে একটি ফাইল বা একটি স্থিতি কোড ( ) ব্যবহার করতে পারেন তবে কোনও ফাইল ব্যবহার করা থাকলে এটি অবশ্যই উপস্থিত থাকতে পারে

আপনার অবশ্যই লক্ষ্য করা উচিত যে চেষ্টা_ফায়ালগুলি নিজেই শেষ প্যারামিটার ব্যতীত কোনও অভ্যন্তরীণ পুনর্নির্দেশ জারি করবে না। যার অর্থ আপনি নিম্নলিখিতটি করতে পারবেন না: এর try_files $uri /cache.php @fallback;ফলে এনজিন্স অভ্যন্তরীণ ফাইল পয়েন্টারটিকে $ ডকুমেন্ট_রোট / ক্যাশে.এফপি স্থাপন করবে এবং এটি পরিবেশন করবে, তবে যেহেতু কোনও অভ্যন্তরীণ পুনর্নির্দেশ ঘটে না সেজন্য স্থানগুলি পুনরায় মূল্যায়ন করা হয় না এবং এটি যেমন হবে সরল পাঠ হিসাবে পরিবেশন করা। (পিএইচপি ফাইলগুলির সাথে সূচকের কাজ করার কারণটি সূচক নির্দেশকটি অভ্যন্তরীণ পুনঃনির্দেশ জারি করবে )


2
এটি আরও স্পষ্ট। ধন্যবাদ। নাম দেওয়া লোকেশন কীভাবে কাজ করে তা সম্পর্কে আমি কিছুটা অনিশ্চিত। @ ফ্যালব্যাকের যদি ফাস্টসিগি পিএইচপি এর জন্য লাইন থাকে তবে এটি পিএইচপি ফাইল হিসাবে পরিবেশন করবে বরং পাঠ্য? সবকিছু ব্যর্থ হওয়ার আগে ফ্যালব্যাক ব্যবহার করা হয়?

2
নামযুক্ত অবস্থানটি কেবলমাত্র ক্রিয়াকলাপ হিসাবে একটি সাধারণ অবস্থানের মতোই কেবল ব্যতীত এটি কেবল ত্রুটি_পৃষ্ঠা এবং ট্রাই_ফায়ালের মতো অভ্যন্তরীণ প্রক্রিয়াগুলির মাধ্যমে অ্যাক্সেস করা যায়। ট্রাই_ফাইলে ফ্যালব্যাক কেবল তখনই ব্যবহৃত হয় যখন নির্দিষ্ট পাথগুলির কোনওটিই একটি বৈধ ফাইলের ফলস্বরূপ না। আপনার এখনও need। Php $ ইউআরআইগুলি ধরার জন্য একটি অবস্থান প্রয়োজন অন্যথায় যদি ফাইলের উপস্থিতি থাকে এবং ফাইলটিকে সরল-পাঠ্য হিসাবে পরিবেশন করা হয় তবে ট্রাই_ফাইলগুলি $ uri তে ট্রিগার করবে।
মার্টিন Fjordvald

এই উত্তরের জন্য আপনাকে ধন্যবাদ .. আমার এখনও এখানে একটি প্রশ্ন আছে: ট্রাই_ফায়ালগুলি এখনই কার্যকর করা হয়েছে বা নেস্টেড লোকেশন এর আগে চেষ্টা করা হবে?
স্টাফেন

@ স্টাফেন আপনি এখানে নোংরা জলে সরে যাচ্ছেন। এনগিনেক্সে উত্তরাধিকার হ'ল জটিল, অগোছালো এবং সম্পূর্ণ অসম্পূর্ণ। আমার পুরানো নোটগুলি কেবল এটির কোনও গ্যারান্টি মনে রাখার জন্য পর্যালোচনা করতে হয়েছিল, তবে মনে হচ্ছে ট্রাই_ফাইলগুলি বিশেষত যখন কেবল নেস্টেড অবস্থানগুলি নিয়ে কাজ করে, অভ্যন্তরীণ অবস্থানের সাথে মেলে তবে কার্যকর করা হবে না। যদিও আমি এটি পরীক্ষা করার পরামর্শ দিই।
মার্টিন Fjordvald

5

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

    location =/wp-login.php { try_files _ @adminlock; }
    location ^~ /wp-admin/  { try_files _ @adminlock; }
    location @adminlock  {
            allow 544.23.310.198;
            deny all;
            try_files _ @backend;
            # wp-admin traffic is tiny so ok to send all reqs to backend 
    }
    location ~ \.php {  try_files _ @backend; }
    location / { try_files $uri $uri/ =403; }
    location @backend {
            fastcgi_pass 127.0.0.1:9000;
            include snippets/fastcgi-php.conf;
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.