Ho una definizione del server nginx con una corrispondenza regex, in questo modo:
server_name ~^(?<vhost>[a-z0-9-]+)\.example\.com$;
root /var/www/example/$vhost;
access_log /var/log/nginx/$vhost.example-access.log;
Che tutto funzioni bene, tuttavia, questo dominio ospita vari progetti PHP usando fastcgi e PHP-FPM, che ricevono valori come questo in $_SERVER
:
SERVER_NAME => "~^(?<vhost>[a-z0-9-]+)\.example\.com$"
HTTP_HOST => "myhost.example.com"
Come puoi vedere, il pattern regex viene inserito SERVER_NAME
piuttosto che nella stringa corrispondente. Mi sembra un po 'difettoso e rappresenta anche un rischio per la sicurezza in quanto sta rivelando dettagli non necessari (in altre configurazioni sto abbinando un insieme specifico di nomi piuttosto che un carattere jolly).
Potresti dire "usa HTTP_HOST invece di SERVER_NAME" - se solo fosse così semplice - ci sono librerie che si aspettano che SERVER_NAME contenga (senza sorpresa) il nome del server. Non riesco davvero a vedere un buon caso d'uso per questo comportamento.
curl --header "HOST: google.com" http://yourdomain/yourpage.php
e nel tuo page.php metti:<?php echo $_SERVER['SERVER_NAME']; ?>
Vedrai google.com