У меня есть какое-то приложение php под 1 docroot, как показано ниже:
/data/app/
|-- antispam.php
|-- api
| `-- functions.php
|-- images
|-- messaging
|-- parents
| `-- index.php
`-- students
`-- index.php
я хочу создать некоторый vhost из вышеуказанного каталога, чтобы docroot стал:
/data/app/parents : parents.example.com
/data/app/students : students.example.com
те vhost потребуется доступ к некоторой общей функции из / data / app (antispam.php, api / functions.php, messaging / & images /)
некоторый фрагмент из моей конфигурации nginx: Родители.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;
}
}
выше конфигурация работает до тех пор, пока я определил местоположение и docroot (/ data / app) имеет действительный каталог. проблема в том, что если у меня есть 100 каталогов (содержащих скрипт PHP) в / data / app, которые требуются vhost, должен ли я определять каждый из них в блоке сервера Nginx? Я подумал, что если ничего не определено в блоке местоположения, он будет сначала искать в / data / app / перед фиксацией ошибки 404, что-то вроде try_files, возможно.
Я предлагаю вам использовать символические ссылки в файловой системе, чтобы /data/app/parents/antispam.php
была символической ссылкой, указывающей на ../ antispam.php
. То же самое можно сделать и с подкаталогами.
Вы можете использовать переменные в директиве server_name, а затем повторно использовать их в других директивах, включая корневую директиву.
Таким образом, вы должны иметь возможность определять бесконечное количество субдоменов, используя один блок, что-то вроде это:
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;
}
}