Je souhaite exécuter un script Shell chaque fois que mon serveur nginx reçoit une requête HTTP. Des moyens simples de faire cela?
Vous pouvez exécuter un script Shell via le code Lua
à partir du fichier nginx.conf. Vous devez avoir le HttpLuaModule pour pouvoir le faire.
Voici un exemple pour faire ceci.
location /my-website {
content_by_lua_block {
os.execute("/bin/myShellScript.sh")
}
}
J'ai trouvé les informations suivantes en ligne à cette adresse: https://www.Ruby-forum.com/topic/2960191
Cela suppose que vous avez installé fcgiwrap sur la machine. C'est vraiment aussi simple que:
Sudo apt-get install fcgiwrap
Exemple de script (doit être exécutable)
#!/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>"
Utilisant également ceci comme fichier d'inclusion, non limité aux seuls scripts Shell.
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;
}
Je l’ai trouvé extrêmement utile pour ce sur quoi je travaille. J'espère que cela vous aidera dans votre projet RaspberryPI.
J'ai testé la requête http en utilisant curl et le fichier est téléchargé dans /tmp
répertoire de l'instance respective:
curl -I http://localhost:8080/
Sortie:
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
Contenu du fichier 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")
}
}
}
}
Vous pouvez également utiliser le module miroir nginx et poxy_pass pour un script Web qui exécute quoi que ce soit. Dans mon cas, je viens d'ajouter ceci à l'emplacement de mon site principal {...
mirror /mirror;
mirror_request_body off;
et puis un nouvel emplacement appelé miroir que j'avais exécuté un script php qui exécutait n'importe quoi ...
location = /mirror {
internal;
proxy_pass http://localhost/run_script.php;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}