nginx - 如何在每个请求上运行shell脚本?

Sas*_*dhi 53 shell nginx

我希望每次我的nginx服务器收到任何HTTP请求时都运行一个shell脚本.有什么简单的方法吗?

Chi*_*g64 58

您可以通过Luanginx.conf文件中的代码执行shell脚本来实现此目的.你需要让HttpLuaModule能够做到这一点.

这是一个这样做的例子.

location /my-website {
  content_by_lua_block {
    os.execute("/bin/myShellScript.sh")
  } 
}
Run Code Online (Sandbox Code Playgroud)

  • 这似乎会产生 nginx 错误...`[alert] 6807#0: waitpid() failed (10: No child process)` - 请参阅http://serverfault.com/q/432609/86531 (2认同)
  • 看来来自 os.execute() 的标准错误会进入 nginx 错误日志,并且任何标准输出都会被丢弃。`os.execute()` 函数返回子进程退出代码,因此此示例将输出一个整数。基于“io.popen()”的东西可能更适合传递子进程的标准输出。 (2认同)
  • 您能否从请求中获取 POST 或 GET 参数以传递脚本? (2认同)

Don*_*all 41

我在这里找到了以下信息:https://www.ruby-forum.com/topic/2960191

这确实期望您在机器上安装了fcgiwrap.它真的很简单:

sudo apt-get install fcgiwrap
Run Code Online (Sandbox Code Playgroud)

示例脚本(必须是可执行的)

#!/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>"
Run Code Online (Sandbox Code Playgroud)

也使用它作为包含文件,不仅限于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;
}
Run Code Online (Sandbox Code Playgroud)

我发现它对我正在进行的工作非常有帮助,我希望它可以帮助你完成RaspberryPI项目.