Добрый день!
Ваша проблема заключается в неправильной настройке директивы `location` и, возможно, в том, как вы используете переменные Nginx, такие как `$root_path`.
1. **Шаблон Location**: В первом варианте у вас используется регулярное выражение, но оно не соответствует синтаксису Nginx. Вы можете использовать выражение вида `location ~* ^$root_path/app/\d+/data/`, однако `$root_path` не будет распознано, так как это не является стандартной переменной. Вместо этого нужно использовать относительный путь от корня сервера.
2. **Проблема с регулярными выражениями**: Чтобы сделать поиск по пути корректным, проверьте, что путь после `location` полностью соответствует требованиям вашего сервера.
С учетом этих замечаний, вот наиболее корректный вариант запрета доступа к папке `data`:
```nginx
location ~* ^/app/\d+/data/ {
valid_referers none blocked yourdomain.com;
if ($invalid_referer) {
return 403;
}
}
```
Здесь:
- Замените `yourdomain.com` на ваш реальный домен.
- Регулярное выражение должно начинаться с `^`, чтобы указать, что путь должен соответствовать начинанию строки.
- Переменная `$invalid_referer` будет работать, как вы ожидаете, в контексте блока `location`.
3. **Проверка конфигурации**: Убедитесь, что указанные вами пути действительно соответствуют структуре ваших файлов на сервере. Также после внесения изменений выполните проверку конфигурации:
```bash
nginx -t
```
4. **Перезапуск Nginx**: Не забудьте перезапустить Nginx после изменении конфигурации, чтобы новые настройки вступили в силу:
```bash
systemctl restart nginx
```
Если после указанных изменений проблема остается, проверьте логи Nginx на предмет ошибок, они могут дать подсказку о том, что не так.