Чтобы настроить выполнение PHP только в определенной папке и ограничить выполнение в подкаталогах для сервера nginx, вам нужно будет использовать конфигурационный файл nginx, в котором задаётся поведение для различных расположений (location).
Вот пример конфигурации сервера, который выполняет PHP только в папке `/www`, позволяет доступ к `/image`, но ограничивает доступ к `/pdf` только для локального использования скриптами:
```nginx
server {
server_name example.com;
root /path/to/root;
# Обрабатывает PHP файлы только в папке /www.
location ~ ^/www(/?.+\.php)$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php/php-version-fpm.sock; # Или IP и порт, например 127.0.0.1:9000
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$1;
}
# Запрет выполнения PHP в подпапках /www
location ~ ^/www/.+/.*\.php$ {
deny all;
}
# Разрешить доступ к статическим файлам в /www
location /www {
try_files $uri $uri/ =404;
}
# Доступ к папке /image для всех
location /image {
autoindex on; # Если хотите включить листинг файлов
try_files $uri $uri/ =404;
}
# Доступ к папке /pdf только для локальных скриптов (запретить доступ извне)
location /pdf {
internal;
}
# Обрабатывает статические файлы, если не попали в предыдущие location
location / {
try_files $uri $uri/ =404;
}
}
```
В этом примере:
- PHP скрипты выполняются, только если они находятся непосредственно в папке `/www`.
- Подкаталоги внутри `/www` имеют запрет на обработку PHP скриптов.
- `/image` доступна для всех пользователей, и файлы в этой папке могут быть просмотрены напрямую.
- `/pdf` настроена как внутренняя (internal), что значит, что доступ к этой папке возможен только через внутренние перенаправления nginx (например, через `X-Accel-Redirect` в PHP скриптах).
Не забудьте адаптировать конфигурацию под вашу конкретную среду и версию PHP-FPM.
После того как вы внесли изменения в конфигурацию nginx, проверьте конфигурацию на правильность командой:
```bash
sudo nginx -t
```
Если проверка конфигурации прошла успешно, перезагрузите nginx:
```bash
sudo systemctl reload nginx
```
После этого ваши настройки будут применены.