
나는 아래와 같이 1개의 docroot 아래에 일부 PHP 응용 프로그램을 가지고 있습니다.
/data/app/
|-- antispam.php
|-- api
| `-- functions.php
|-- images
|-- messaging
|-- parents
| `-- index.php
`-- students
`-- index.php
문서 루트가 다음과 같이 위의 디렉토리에서 일부 가상 호스트를 생성하고 싶습니다.
/data/app/parents : parents.example.com
/data/app/students : students.example.com
해당 가상 호스트는 /data/app(antispam.php, api/functions.php, message/ & Images/)의 일부 공유 기능에 액세스해야 합니다.
내 nginx 구성의 일부 스니펫: parent.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)에 유효한 디렉터리가 있는 한 위 구성이 작동합니다. 문제는 가상 호스트에 필요한 /data/app에 100개의 디렉터리(PHP 스크립트 포함)가 있는 경우 Nginx 서버 블록에서 각 디렉터리를 정의해야 합니까? 위치 블록에 아무것도 정의되지 않은 경우 404를 커밋하기 전에 먼저 /data/app/에서 검색할지 궁금합니다. 아마도 try_files와 같은 것입니다.
답변1
파일 시스템에서 심볼릭 링크를 사용하여 /data/app/parents/antispam.php
를 가리키는 심볼릭 링크가 되도록 제안합니다 ../antispam.php
. 하위 디렉터리에서도 동일한 작업을 수행할 수 있습니다.
답변2
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;
}
}