Запуск скрипта при обращении к определённому URL в NGINX не может быть выполнен напрямую, так как NGINX является HTTP-сервером, а не middleware, который мог бы выполнять произвольные скрипты. Тем не менее, вы можете использовать несколько подходов для реализации вашей задачи. Вот несколько способов:
### 1. Использование CGI (Common Gateway Interface)
Вы можете настроить CGI в NGINX, чтобы обрабатывать запросы и запускать скрипты. Для этого выполните следующие шаги:
1. Установите пакет `fcgiwrap`, который позволяет использовать CGI с NGINX:
```bash
sudo apt-get install fcgiwrap
```
2. Настройте NGINX для обработки запросов к вашему скрипту. Добавьте следующее в конфигурацию вашего сайта (обычно в `/etc/nginx/sites-available/default`):
```nginx
server {
listen 80;
server_name your_domain.com;
location /your_script {
gzip off;
rewrite ^/your_script/?(.*)$ /your_script.sh last;
include fastcgi_params;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
```
3. Убедитесь, что скрипт находится в нужной директории и имеет разрешение на выполнение:
```bash
chmod +x /path/to/your_script.sh
```
4. Перезапустите NGINX:
```bash
sudo systemctl restart nginx
```
### 2. Использование reverse proxy на Python/Node.js или другом сервере
Если CGI вам не подходит или вы хотите более гибкое решение, можно использовать другой сервер, который будет обрабатывать запросы и запускать ваш скрипт. Например, напишите простое приложение на Python или Node.js:
**Пример на Python с использованием Flask:**
1. Установите Flask:
```bash
pip install Flask
```
2. Создайте файл `app.py`:
```python
from flask import Flask
import subprocess
app = Flask(__name__)
@app.route('/your_script', methods=['POST'])
def run_script():
subprocess.Popen(['/path/to/your_script.sh'])
return 'Script executed!', 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
```
3. Запустите ваше приложение:
```bash
python app.py &
```
4. Настройте NGINX для проксирования запросов:
```nginx
server {
listen 80;
server_name your_domain.com;
location /your_script {
proxy_pass http://127.0.0.1:5000/your_script;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
5. Перезапустите NGINX.
### 3. Использование cron или другого планировщика задач
Вместо запуска скрипта непосредственно по URL, вы также можете настроить cron, который будет проверять определённый флаг или состояние и запускать ваш скрипт, когда это необходимо. Это более сложный способ, но он может быть полезен в зависимости от вашей ситуации.
### Заключение
Выберите подходящий метод в зависимости от ваших требований и сложности задачи. Первый подход может быть проще в реализации, но второй даст вам больше контроля и возможностей.