Tôi có một định nghĩa máy chủ nginx với một trận đấu regex, như thế này:
server_name ~^(?<vhost>[a-z0-9-]+)\.example\.com$;
root /var/www/example/$vhost;
access_log /var/log/nginx/$vhost.example-access.log;
Tuy nhiên, tất cả đều hoạt động tốt, tuy nhiên, miền này lưu trữ các dự án PHP khác nhau bằng cách sử dụng fastcgi và PHP-FPM, nhận các giá trị như thế này trong $_SERVER
:
SERVER_NAME => "~^(?<vhost>[a-z0-9-]+)\.example\.com$"
HTTP_HOST => "myhost.example.com"
Như bạn có thể thấy, mẫu regex được đưa vào SERVER_NAME
chứ không phải là chuỗi mà nó khớp. Điều đó có vẻ hơi lỗi đối với tôi và cũng thể hiện rủi ro bảo mật ở chỗ nó tiết lộ các chi tiết không cần thiết (trong các cấu hình khác tôi khớp với một bộ tên cụ thể hơn là ký tự đại diện).
Bạn có thể nói "sử dụng HTTP_HOST thay vì SERVER_NAME" - nếu chỉ đơn giản như vậy - có những thư viện mong đợi SERVER_NAME (không có gì bất ngờ) chứa tên của máy chủ. Tôi thực sự không thể thấy một trường hợp sử dụng tốt cho hành vi này.
curl --header "HOST: google.com" http://yourdomain/yourpage.php
và trong yourpage.php đặt:<?php echo $_SERVER['SERVER_NAME']; ?>
Bạn sẽ thấy google.com