nginx-как запустить сценарий оболочки по каждому запросу?
Я хочу запускать сценарий оболочки каждый раз, когда мой сервер nginx получает любой HTTP-запрос. Есть простые способы сделать это?
3 ответов
Вы можете выполнить скрипт через Lua
код в nginx.conf, чтобы добиться этого. Вам нужно иметь HttpLuaModule чтобы быть в состоянии сделать это.
вот пример, чтобы сделать это.
location /my-website {
content_by_lua_block {
os.execute("/bin/myShellScript.sh")
}
}
Я нашел следующую информацию в интернете по этому адресу: https://www.ruby-forum.com/topic/2960191
это ожидает, что у вас есть fcgiwrap, установленный на машине. Это действительно так:
sudo apt-get install fcgiwrap
пример скрипта (должен быть исполняемым)
#!/bin/sh
# -*- coding: utf-8 -*-
NAME=`"cpuinfo"`
echo "Content-type:text/html\r\n"
echo "<html><head>"
echo "<title>$NAME</title>"
echo '<meta name="description" content="'$NAME'">'
echo '<meta name="keywords" content="'$NAME'">'
echo '<meta http-equiv="Content-type"
content="text/html;charset=UTF-8">'
echo '<meta name="ROBOTS" content="noindex">'
echo "</head><body><pre>"
date
echo "\nuname -a"
uname -a
echo "\ncpuinfo"
cat /proc/cpuinfo
echo "</pre></body></html>"
также используя это как файл включения, не ограниченный только оболочкой файлы сценариев.
location ~ (\.cgi|\.py|\.sh|\.pl|\.lua)$ {
gzip off;
root /var/www/$server_name;
autoindex on;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params;
fastcgi_param DOCUMENT_ROOT /var/www/$server_name;
fastcgi_param SCRIPT_FILENAME /var/www/$server_name$fastcgi_script_name;
}
Я нашел его чрезвычайно полезным для того, над чем я работаю, надеюсь, это поможет вы с вашим проектом RaspberryPI.
- Install OpenResty (OpenResty - это просто расширенная версия Nginx с помощью аддонных модулей) см.https://openresty.org/en/getting-started.html для этого
- настройка aws cli на экземпляре
- напишите сценарий оболочки, который загружает файл из указанного S3 bucket
- выполните необходимые изменения в nginx.файл conf
- перезапустите сервер nginx
я протестировал http-запрос с помощью curl и файл загружается в /tmp
каталог соответствующего экземпляра:
curl -I http://localhost:8080/
выход:
curl -I http://localhost:8080/
HTTP/1.1 200 OK
Server: openresty/1.13.6.2
Date: Tue, 14 Aug 2018 07:34:49 GMT
Content-Type: text/plain
Connection: keep-alive
содержание nginx.файл conf:
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
server {
listen 8080;
location / {
default_type text/html;
content_by_lua '
ngx.say("<p>hello, world</p>")
';
}
location / {
content_by_lua_block{
os.execute("sh /tmp/s3.sh")
}
}
}
}