এনগিনেক্স রেজেেক্স ভোস্ট প্যাটার্ন পিএইচপি সার্ভারের নাম হিসাবে শেষ হয়


12

আমি একটি রেগেক্স ম্যাচ সঙ্গে একটি nginx সার্ভার সংজ্ঞা আছে, এই মত:

server_name ~^(?<vhost>[a-z0-9-]+)\.example\.com$;
root /var/www/example/$vhost;
access_log /var/log/nginx/$vhost.example-access.log;

এটি সমস্ত সুন্দরভাবে কাজ করে তবে, এই ডোমেনটি ফাস্টসিজি এবং পিএইচপি-এফপিএম ব্যবহার করে বিভিন্ন পিএইচপি প্রকল্পের হোস্ট করে, যা এগুলির মতো মান অর্জন করে $_SERVER:

SERVER_NAME => "~^(?<vhost>[a-z0-9-]+)\.example\.com$"
HTTP_HOST   => "myhost.example.com"

আপনি দেখতে পাচ্ছেন, রেজেক্স প্যাটার্নটি তার SERVER_NAMEসাথে মিলে যাওয়া স্ট্রিংয়ের পরিবর্তে intoোকানো হয়েছে । এটি আমার কাছে কিছুটা কৃপণ বলে মনে হচ্ছে এবং এটি সুরক্ষা ঝুঁকিরও প্রতিনিধিত্ব করে যে এটি অপ্রয়োজনীয় বিশদ প্রকাশ করছে (অন্যান্য কনফিগারেশনে আমি ওয়াইল্ডকার্ডের পরিবর্তে নামগুলির একটি নির্দিষ্ট সংখ্যার সাথে মিল করছি)।

আপনি "SERVER_NAME এর পরিবর্তে HTTP_HOST ব্যবহার করুন" বলতে পারেন - কেবল যদি এটি সরল ছিল - এমন লাইব্রেরি রয়েছে যা SERVER_NAME (সার্ভারের নাম) রাখার প্রত্যাশা করে। আমি এই আচরণের জন্য সত্যিই ভাল ব্যবহারের কেস দেখতে পাচ্ছি না।

উত্তর:


14

এই প্রশ্নটি লেখার রাবার-হাঁসের প্রভাবের জন্য ধন্যবাদ, আমি একটি সমাধান পেয়েছি।

এনগিনেক্সের স্টক fastcgi_paramsফাইলটিতে লাইনটি রয়েছে:

fastcgi_param  SERVER_NAME        $server_name;

যা এই মানটি $_SERVER['SERVER_NAME']পিএইচপি পরিবেশে প্রদর্শিত হতে পারে ।

আমি $ হোস্ট ভেরিয়েবলটি ব্যবহার করতে এটি পরিবর্তন করেছি :

fastcgi_param  SERVER_NAME        $host;

এবং আমার সমস্যাটি চলে গেল। আমি এই পদ্ধতির কোনও ডাউনসাইড আছে কিনা তা জানতে আগ্রহী হব।


এই পদ্ধতির একমাত্র নেতিবাচকতা হ'ল $ হোস্ট ভেরিয়েবলের উপর নির্ভরশীল, যার অর্থ তিনি HTTP_HOST শিরোনাম প্রেরণ করলে এটি ব্যবহারকারীর দ্বারা ওভাররাইট করা যেতে পারে। আপনি curl --header "HOST: google.com" http://yourdomain/yourpage.phpকার্লটি ব্যবহার করে এটি পরীক্ষা করতে পারেন: এবং আপনার পৃষ্ঠায় ডাব্লু পিপি তে: <?php echo $_SERVER['SERVER_NAME']; ?>আপনি google.com দেখতে পাবেন
গোলাম আলি

2
server_name  ~^(?<subdomain>.+)\.example\.com$;
set $server_name_full $subdomain.example.com;


location ~ \.php$ {
    ...
    include fastcgi_params;
    fastcgi_param SERVER_NAME $server_name_full;
    ...
}

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