এনগিনেক্স থেকে পিএইচপিতে কাস্টম প্যারামিটারগুলি কীভাবে পাস করবেন?


10

আমি একটি পাসের সাথে Nginx 1.2.4সংমিশ্রণে ব্যবহার করছি এবং এতে কাস্টম প্যারামিটারগুলি পাস করার চেষ্টা করছি । আমি এখন পর্যন্ত যে বিকল্পগুলি পেয়েছি তা এখানে:PHP-FPM 5.4.8fastcgiPHP

  • envপরিবেশের পরিবর্তনশীল সেট করতে nginxএবং এর সাথে getenv()বা $_ENVএনে আনতে নির্দেশকে ব্যবহার করে PHP। সমস্যাটি envকেবলমাত্র mainপ্রসঙ্গে পরিচালিত হয় যেখানে আমার serverপ্রসঙ্গে পরামিতি সেট করা দরকার ।

  • fastcgi_paramনির্দেশটি যেমন এটির জন্য ডিজাইন করা হয়েছে তেমন ব্যবহার করে ।

আমি কিছু পরামিতি ব্যবহার করে মান ব্যবহার করে চেষ্টা করেছি fastcgi_paramতবে ব্যর্থ হয়েছিল:

nginx:

fastcgi_param PATH_INFO "/var/tmp";

পিএইচপি:

আমি যে পূর্বনির্ধারিত অ্যারেগুলি পেতে পারি তা যাচাই করেছিলাম:

echo '<pre>';
echo "\n".'$GLOBALS'."\n"; var_dump($GLOBALS);
echo "\n".'$_SERVER'."\n"; var_dump($_SERVER);
echo "\n".'$_GET'."\n"; var_dump($_GET);
echo "\n".'$_POST'."\n"; var_dump($_POST);
echo "\n".'$_FILES'."\n"; var_dump($_FILES);
echo "\n".'$_REQUEST'."\n"; var_dump($_REQUEST);
echo "\n".'$_SESSION'."\n"; var_dump($_SESSION);
echo "\n".'$_ENV'."\n"; var_dump($_ENV);
echo "\n".'$_COOKIE'."\n"; var_dump($_COOKIE);
echo "\n".'$php_errormsg'."\n"; var_dump($php_errormsg);
echo "\n".'$HTTP_RAW_POST_DATA'."\n"; var_dump($HTTP_RAW_POST_DATA);
echo "\n".'$http_response_header'."\n"; var_dump($http_response_header);
echo "\n".'$argc'."\n"; var_dump($argc);
echo "\n".'$argv'."\n"; var_dump($argv);
echo '</pre>';

শুধুমাত্র শো এক PATH_INFOছিল $_SERVER:

var_dump($_SERVER); // ["PATH_INFO"]=> string(0) ""

তবে আমি যে মানটি সেট করেছিলাম তা আমলে nginxনেওয়া হয় নি।

প্রশ্ন 1: নির্দেশটি কার্যকর করার nginx/phpজন্য আমার কি স্তরের কোনও কিছু কনফিগার fastcgi_paramকরতে হবে?

প্রশ্ন 2: fastcgi_paramনির্দেশটি কি প্যারামিটারগুলির পূর্বনির্ধারিত তালিকার মধ্যে সীমাবদ্ধ (যেমন আমি সেট করতে পারি PATH_INFOতবে আমার নিজস্ব কাস্টম ভেরিয়েবলগুলি নয় FOO)?

Q3: যদি হ্যাঁ Q2: Nginx থেকে পিএইচপি থেকে কাস্টম প্যারামিটারগুলি পাশ করার কোনও উপায় আছে?

উত্তর:


14

আপনি fastcgi_param নির্দেশিকা মাধ্যমে অতিরিক্ত পরামিতি পাস করতে পারেন। আমি নিশ্চিত কারণ আমি এই চমকপ্রদ ব্যবহার করেছি।

আমার অনুকরণীয় nginx কনফিগারেশন

server {
    server_name localhost;
    include     conf/defaults.conf;
    root        /var/www;

    location    ~* "\.php$" {
        fastcgi_param CRS "crs";
        include conf/fastcgi-php.conf;
    }                                           
}

এবং phpinfo () আউটপুট অংশ:

...
_SERVER["USER"] fcgi
_SERVER["HOME"] /dev/null
_SERVER["FCGI_ROLE"]    RESPONDER
_SERVER["REMOTE_USER"]  no value
_SERVER["CRS"]  crs
_SERVER["QUERY_STRING"] no value

আমি fastcgi.confএবং fastcgi_paramsকিন্তু fastcgi-php.conf: যেখানে আপনি এটি থেকে পেতে পারি? পেস্টবিনের মাধ্যমে ভাগ করে নিতে কি আপত্তি আছে?
সর্বোচ্চ

এটি আমার নির্দিষ্ট কনফিগারেশন তবে কোনও জাদু নেই: fastcgi_pass 127.0.0.1:1028; fastcgi_index index.php; include conf/fastcgi.conf; এবং কনফারেন্স / ফাস্টসিগি কনফনেফস্টিগির প্রয়োজনীয় প্যারাম এবং সেটিংসের বাকি অংশ রয়েছে
Krzysztof Księżyk

আমি কেবল ভাবতে পারি যে কম্পাইল করার সময় আমি কনফের মধ্যে কিছু অন্তর্ভুক্ত করতে ভুলে গিয়েছিলাম nginx। অন্যদিকে, আমি nginxঅতীতে সংকলন করার সময় জিনিসগুলি অন্তর্ভুক্ত করতে ভুলে গিয়েছিলাম , তবে nginxএটি বলতে শুরু করতে অস্বীকার করব যে আমি যে কয়েকটি নির্দেশনা ব্যবহার করছিলাম সে সম্পর্কে এটি জানেন না: এখানে কিছুই নেই, কোনও অভিযোগ নেই, তবে এখনও এটি fastcgi_paramকাজ করছে না: (আমি আসল চেষ্টা করে দেখব ubuntu nginxপ্যাকেজ এবং কিভাবে এটা দেখতে যায়।
ম্যাক্স

হ্যাঁ, এটি ডিফল্ট ubuntu nginxপ্যাকেজটির সাথে কাজ করছে ...
সর্বোচ্চ

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

0

আপনি অনুরোধ শিরোনামে আপনার কাস্টম ভেরিয়েবলগুলি পাস করে অনুরোধটি সংশোধন করতে পারেন, উদাহরণস্বরূপ:

proxy_set_header Variable-name-here Value-here;

এবং তারপরে আপনি আপনার পিএইচপি স্ক্রিপ্টে অনুরোধ শিরোনাম থেকে এই মানগুলি পড়তে পারেন।

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