এনগিনেক্স $ ডকুমেন্ট_রোট $ ফাস্টসিগি_স্ক্রিপ্ট_নাম বনাম $ অনুরোধ_ফিলনাম


16

আমার কনফিগার ফাইলে সেট করা থাকলে আমি কোনও পার্থক্য লক্ষ্য করতে পারি না

 fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

বা:

 fastcgi_param  SCRIPT_FILENAME    $request_filename;

তারা যথাক্রমে কী করবেন? দুজনের একজন কি অপরের চেয়ে ভাল?

আগাম ধন্যবাদ.

উত্তর:


24

এখানে ডকুমেন্টেশন কী বলে:

$ request_filename

এই ভেরিয়েবলটি বর্তমান অনুরোধের জন্য ফাইলটির পাথের সমান, নির্দেশিকাটি মূল বা উরফ এবং ইউআরআই অনুরোধ থেকে গঠিত;

$ document_root

এই পরিবর্তনশীল বর্তমান অনুরোধের জন্য নির্দেশিক মূলের মান সমান;

$ fastcgi_script_name

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

এখানে যেমন লেখা আছে, ফাস্টসিগি ইন্ডেক্স বা ফাস্টসিজি_স্প্লিট_পাথ_ইনফো ব্যবহার করার সময় কমপক্ষে একটি পার্থক্য রয়েছে । হয়তো আরও আছে ... আমি এখনই এটি জানি

উদাহরণ

আপনি অনুরোধটি পান /info/এবং নিম্নলিখিত কনফিগারেশনটি পান:

fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;

SCRIPT_FILENAMEসমান হবে /home/www/scripts/php/info/index.php, তবে $request_filenameএটি ব্যবহার করা ঠিক হবে /home/www/scripts/php/info/

এর কনফিগারেশনটিও fastcgi_split_path_infoগুরুত্বপূর্ণ। আরও সহায়তার জন্য এখানে দেখুন: http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_split_path_info


এটি সত্য বলে মনে হচ্ছে না (অন্তত আর নয়)। স্টিলি উইংয়ের উত্তরটি দেখুন।
রিমাস কুডেলিস

@ রিমাসকুডেলিস আমি এটি বেশ কিছুদিনের জন্য ব্যবহার করি নি, তবে ডকুমেন্টেশনের কোনও পরিবর্তন হয়নি, তাই আমি আশা করি এটি এখনও কাজ করবে - সম্ভবত আপনার fastcgi_split_path_infoএকটি টুইটের প্রয়োজন। স্টিলি উইংয়ের উত্তরটি ডকুমেন্টেশনের ভিত্তিতে নয়, অভিজ্ঞতার উপর ভিত্তি করে মনে হচ্ছে।
সাইমনসিমিটি

হ্যাঁ, এবং আমার মন্তব্যও অভিজ্ঞতার ভিত্তিতে। আমি fastcgi_split_path_infoআমার ক্যান্সার উপসর্গটি দুটি ক্যাপচারের বাইরে রেখে সামঞ্জস্য করার চেষ্টা করেছি , তবে এর কোনও ফল হয়েছে বলে মনে হয় না। যদিও কোনও উলামের জড়িত কিনা তা নির্বিশেষে মনোহর $request_filenameহিসাবে SCRIPT_FILENAMEকাজ করে।
রিমাস কুডেলিস

আসলে, আমি বুঝতে পারি না কেন এনজিএনএক্স ডকুমেন্টেশন এমনকি SCRIPT_FILENAMEপ্রথম স্থানে দুটি স্ট্রিং তৈরি করার পরামর্শ দেয় , যখন $request_filenameআসল ফাইলের নামটি সমাধান করা হয়, কোনও অতিরিক্ত যুক্ত না করে। উপরের উদাহরণটি আসলে ভুল, যেহেতু $request_filenameপ্রকৃতপক্ষে কোনও ফাইলের নাম কেবল একটি রাস্তার বিপরীতে থাকে, এমনকি যখন সেই ফাইলটি স্পষ্টভাবে অনুরোধ করা হয়নি। অন্তত গতকাল হিসাবে আমার সিদ্ধান্ত।
রিমাস কুডেলিস

7

TLDR

আমি ব্যবহারের সুপারিশ করা $request_filenameজন্য SCRIPT_FILENAME


আপনি যদি rootনির্দেশনা ব্যবহার করেন

$document_root$fastcgi_script_nameসমান $request_filename

আপনি যদি aliasনির্দেশনা ব্যবহার করেন

$document_root$fastcgi_script_nameভুল পথটি ফিরিয়ে দেবে, কারণ $fastcgi_script_nameএটি URL এর পথ, পাথের সাথে সম্পর্কিত নয় $document_root

উদাহরণ

আপনার যদি কনফিগার থাকে

location /api/ {
    index  index.php index.html index.htm;
    alias /app/www/;
    location ~* "\.php$" {
        try_files      $uri =404;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        # fastcgi_param  SCRIPT_FILENAME  $request_filename;
    }
}

অনুরোধ /api/testing.php:

  • $document_root$fastcgi_script_name == /app/www//api/testing.php
  • $request_filename == /app/www/testing.php

অনুরোধ /api/:

  • $document_root$fastcgi_script_name == /app/www//api/index.php
  • $request_filename == /app/www/index.php

এবং আপনি যদি ব্যবহার করেন তবে আপনার নির্দেশিকা $request_filenameব্যবহার করে সূচি নির্ধারণ করা উচিত index, fastcgi_indexকাজ করবে না।


2

আমার ধারণা, সেই রেখাগুলি 'ফাস্টসিজি_প্রেমস' ফাইল থেকে নেওয়া হয়েছিল ..

মূলত আপনি কোনও ত্রুটি পাচ্ছেন না SCRIPT_FILENAMEকারণ এটি আপনি ইতিমধ্যে সংজ্ঞায়িত যখন আপনার vhost ফাইলে আপনার মূল নির্দেশকে সংজ্ঞায়িত করেছেন। সুতরাং আপনি যদি আপনার ভোস্ট ফাইলে এটির fastcgi_paramমান ব্যবহার করে স্পষ্টভাবে সংজ্ঞায়িত না করেন তবে SCRIPT_FILENAMEমূল নির্দেশিকা থেকে নেওয়া হবে .. তবে এখানে একটি গুরুত্বপূর্ণ পয়েন্ট এখানে। পিএনএফ সার্ভারে অনুরোধগুলি প্রেরণের জন্য এনজিনেক্সের আরও একটি পরিবর্তনশীল রয়েছে যা বারবারের $fastcgi_script_nameইউআরএলগুলি এবং স্ল্যাশের সাথে শেষ হওয়া ইউরির সাথে ত্রুটিগুলি এড়াতে আপনাকে এটিকে ভালভাবে সংজ্ঞা দিতে হবে।

উপসংহার :

প্রতিটি জিনিসকে দুর্দান্ত সুন্দর করে তোলার জন্য, প্রত্যেককে SCRIPT_FILENAME/ etc / nginx ফোল্ডারে অবস্থিত 'ফাস্টসিগি_প্রেমস' ফাইলটিতে বা পিএইচপি লোকেশন ব্লকের নীচের লাইনটি অন্তর্ভুক্ত করে সাইট-উপলভ্য ফোল্ডারে থাকা আপনার সাইটের ভোস্টে সহজেই সংজ্ঞায়িত করা উচিত :

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

বা উপরে যেমন লিখেছেন তেমন 'ফাস্টসিজি_প্রেমস' ফাইলটিতে অন্তর্ভুক্ত রয়েছে, যেভাবেই এটি একই রকম .. পিএইচপি-এফপিএম-এ এনজিনিক্স সংযোগের জন্য আরও তথ্যের জন্য এখানে যান:

https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/

আমি আশা করি এটি ভবিষ্যতে যে কাউকে সহায়তা করবে এটি নির্ণয় করতে আমাকে অনেক সময় নিয়েছে ..

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