ฉันมีคำจำกัดความเซิร์ฟเวอร์ 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