Tengo una definición de servidor nginx con una coincidencia de expresiones regulares, como esta:
server_name ~^(?<vhost>[a-z0-9-]+)\.example\.com$;
root /var/www/example/$vhost;
access_log /var/log/nginx/$vhost.example-access.log;
Sin embargo, todo funciona bien, este dominio aloja varios proyectos PHP que usan fastcgi y PHP-FPM, que reciben valores como este en $_SERVER
:
SERVER_NAME => "~^(?<vhost>[a-z0-9-]+)\.example\.com$"
HTTP_HOST => "myhost.example.com"
Como puede ver, el patrón regex se coloca en SERVER_NAME
lugar de la cadena que coincide. Eso me parece un poco defectuoso, y también representa un riesgo de seguridad ya que revela detalles innecesarios (en otras configuraciones, coincido con un conjunto específico de nombres en lugar de un comodín).
Puede decir "use HTTP_HOST en lugar de SERVER_NAME", aunque fuera así de simple, hay bibliotecas que esperan que SERVER_NAME contenga (no es de extrañar) el nombre del servidor. Realmente no puedo ver un buen caso de uso para este comportamiento.
curl --header "HOST: google.com" http://yourdomain/yourpage.php
y en yourpage.php poner:<?php echo $_SERVER['SERVER_NAME']; ?>
Verá google.comfuente