
Tengo alguna aplicación PHP en 1 docroot como se muestra a continuación:
/data/app/
|-- antispam.php
|-- api
| `-- functions.php
|-- images
|-- messaging
|-- parents
| `-- index.php
`-- students
`-- index.php
Quiero crear un vhost desde el directorio anterior de modo que docroot se convierta en:
/data/app/parents : parents.example.com
/data/app/students : students.example.com
esos vhost necesitarán acceso a alguna función compartida desde /data/app (antispam.php, api/functions.php, mensajería/ & imágenes/)
algún fragmento de mi configuración de nginx: padres.ejemplo.com
server {
listen 80;
server_name parents.example.com;
root /data/app/parents;
index index.php ;
access_log /var/log/nginx/example.com.log combined;
location ~ ^/api { root /data/app/; }
location ~ ^/images { root /data/app/; }
location ~ ^/antispam.php { alias /data/app/antispam.php ;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}
La configuración anterior funciona siempre que defina la ubicación y el docroot (/data/app) tenga un directorio válido. El problema es que si tengo 100 directorios (que contienen script PHP) en /data/app que requiere un vhost, ¿debería definir cada uno de ellos en el bloque del servidor Nginx? Me preguntaba que si no hay ninguno definido en el bloque de ubicación, buscará en /data/app/ primero antes de confirmar 404, tal vez algo así como try_files.
Respuesta1
Le sugiero que utilice enlaces simbólicos en el sistema de archivos para que /data/app/parents/antispam.php
sea un enlace simbólico que apunte a ../antispam.php
. Puedes realizar lo mismo con los subdirectorios.
Respuesta2
Puede usar variables en una directiva server_name y luego reutilizarlas en otras directivas, incluida la directiva raíz.
Entonces deberías poder definir infinitos subdominios usando un solo bloque, algo como esto:
server {
listen 80;
server_name ~(?<subdomain>^.*?)\.?example\.com;
root /data/app/$subdomain;
index index.php;
access_log /var/log/nginx/$subdomain.example.com.log combined;
location /api/ {
root /data/app;
}
location /images/ {
root /data/app;
}
location ~ \/antispam.php$ {
alias /data/app/antispam.php ;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}