
eu tenho algum aplicativo php em 1 docroot como abaixo:
/data/app/
|-- antispam.php
|-- api
| `-- functions.php
|-- images
|-- messaging
|-- parents
| `-- index.php
`-- students
`-- index.php
eu quero criar algum vhost do diretório acima, de modo que o docroot se torne:
/data/app/parents : parents.example.com
/data/app/students : students.example.com
esses vhost precisarão de acesso a alguma função compartilhada de /data/app (antispam.php , api/functions.php, messages/ & images/)
algum trecho da minha configuração do nginx: pais.example.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;
}
}
a configuração acima funciona desde que eu tenha definido o local e o docroot (/data/app) tenha um diretório válido. o problema é que se eu tiver 100 diretórios (contêm script PHP) em/data/app exigidos por um vhost, devo definir cada um deles no bloco do servidor Nginx? Eu me perguntei se nenhum definido no bloco de localização, ele pesquisaria em /data/app/ primeiro antes de confirmar 404, algo como try_files talvez.
Responder1
Eu sugiro que você use links simbólicos no sistema de arquivos para que /data/app/parents/antispam.php
seja um link simbólico apontando para ../antispam.php
. Você pode fazer o mesmo com subdiretórios.
Responder2
Você pode usar variáveis em uma diretiva server_name e reutilizá-las em outras diretivas, incluindo a diretiva root.
Portanto, você poderá definir subdomínios infinitos usando um único bloco, algo assim:
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;
}
}