Подтвердить что ты не робот

Nginx - Как запустить оболочку script по каждому запросу?

Я хочу запускать оболочку script каждый раз, когда мой сервер nginx получает HTTP-запрос. Любые простые способы сделать это?

4b9b3361

Ответ 1

Вы можете выполнить оболочку script через Lua код из файла nginx.conf для достижения этой цели. Для этого вам необходимо HttpLuaModule.

Вот пример для этого.

location /my-website {
  content_by_lua_block {
    os.execute("/bin/myShellScript.sh")
  } 
}

Ответ 2

Я нашел следующую информацию в Интернете по этому адресу: https://www.ruby-forum.com/topic/2960191

Это означает, что на компьютере установлена ​​программа fcgiwrap. Это действительно так просто:

sudo apt-get install fcgiwrap

Пример script (должен быть исполняемым)

#!/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>"

Также, используя это как файл include, не ограничиваясь только оболочкой скрипты.

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.

Ответ 3

  1. Установите OpenResty (OpenResty - это просто расширенная версия Nginx с помощью дополнительных модулей). https://openresty.org/en/getting-started.html см.
  2. Настройте aws cli для экземпляра
  3. Напишите сценарий оболочки, который загружает файл из указанного сегмента S3
  4. Сделайте необходимые изменения в файле nginx.conf
  5. Перезапустите сервер nginx

Я проверил http-запрос, используя curl, и файл загружается в каталог /tmp соответствующего экземпляра:

curl -I http://localhost:8080/

OutPut:

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")
            }
        }

    }
}

Ответ 4

Вы также можете использовать зеркальный модуль nginx и передать его в веб-скрипт, который запускает что угодно, в моем случае я просто добавил это в расположение моего основного сайта {...

mirror /mirror;
mirror_request_body off;

а затем новое место под названием mirror, в котором я запустил скрипт php, который выполнял все что угодно...

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;
}

https://nginx.org/en/docs/http/ngx_http_mirror_module.html