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.


  1. Install OpenResty (OpenResty - это просто расширенная версия Nginx с помощью аддонных модулей) см.https://openresty.org/en/getting-started.html для этого
  2. настройка aws cli на экземпляре
  3. напишите сценарий оболочки, который загружает файл из указанного S3 bucket
  4. выполните необходимые изменения в nginx.файл conf
  5. перезапустите сервер 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")
            }
        }

    }
}