ฉันมีคำจำกัดความเซิร์ฟเวอร์ nginx กับการจับคู่ regex เช่นนี้
server_name ~^(?<vhost>[a-z0-9-]+)\.example\.com$;
root /var/www/example/$vhost;
access_log /var/log/nginx/$vhost.example-access.log;
ทั้งหมดนี้ทำงานได้ดี แต่โดเมนนี้โฮสต์โครงการ PHP ต่างๆโดยใช้ fastcgi และ PHP-FPM ซึ่งได้รับค่าเช่นนี้ใน$_SERVER:
SERVER_NAME => "~^(?<vhost>[a-z0-9-]+)\.example\.com$"
HTTP_HOST   => "myhost.example.com"
อย่างที่คุณเห็นรูปแบบ regex นั้นถูกใส่เข้าไปSERVER_NAMEแทนที่สตริงที่ตรงกับมัน ดูเหมือนว่าจะเป็นรถของฉันและยังแสดงถึงความเสี่ยงด้านความปลอดภัยซึ่งมันเป็นการเปิดเผยรายละเอียดที่ไม่จำเป็น (ในการกำหนดค่าอื่น ๆ ฉันกำลังจับคู่ชุดชื่อที่เจาะจงมากกว่าสัญลักษณ์ตัวแทน)
คุณอาจพูดว่า "ใช้ HTTP_HOST แทน SERVER_NAME" - ถ้าเป็นแบบง่ายๆ - มีห้องสมุดที่คาดว่า SERVER_NAME จะมีชื่อของเซิร์ฟเวอร์ (ไม่แปลกใจ) ฉันไม่เห็นกรณีการใช้งานที่ดีสำหรับพฤติกรรมนี้
curl --header "HOST: google.com" http://yourdomain/yourpage.phpและใน yourpage.php ใส่:<?php echo $_SERVER['SERVER_NAME']; ?>คุณจะเห็น google.com