मैं इस तरह से एक रेगेक्स मैच के साथ एक nginx सर्वर परिभाषा है:
server_name ~^(?<vhost>[a-z0-9-]+)\.example\.com$;
root /var/www/example/$vhost;
access_log /var/log/nginx/$vhost.example-access.log;
यह सब अच्छी तरह से काम करता है, हालांकि, यह डोमेन फास्टगि और PHP-FPM का उपयोग करके विभिन्न PHP परियोजनाओं की मेजबानी करता है, जो इस तरह से मान प्राप्त करते हैं $_SERVER
:
SERVER_NAME => "~^(?<vhost>[a-z0-9-]+)\.example\.com$"
HTTP_HOST => "myhost.example.com"
जैसा कि आप देख सकते हैं, रेगेक्स पैटर्न को SERVER_NAME
उस स्ट्रिंग के बजाय रखा गया है जो इसे मेल खाता है। यह मुझे थोड़ा बुरा लग रहा है, और इसमें एक सुरक्षा जोखिम भी है कि यह अनावश्यक विवरणों का खुलासा कर रहा है (अन्य कॉन्फ़िगरेशन में मैं वाइल्डकार्ड के बजाय नामों के एक विशेष सेट का मिलान कर रहा हूं)।
आप कह सकते हैं "SERVER_NAME के बजाय HTTP_HOST का उपयोग करें" - यदि केवल यह इतना सरल था - ऐसी लाइब्रेरी हैं जो SERVER_NAME से उम्मीद करती हैं (कोई आश्चर्य नहीं) में सर्वर का नाम शामिल है। मैं वास्तव में इस व्यवहार के लिए एक अच्छा उपयोग मामला नहीं देख सकता।
curl --header "HOST: google.com" http://yourdomain/yourpage.php
और अपने page.php पुट में:<?php echo $_SERVER['SERVER_NAME']; ?>
आप google.com देखेंगे