Nginx支持web界面执行bash脚本

一直以来都是在终端执行shell等脚本,那web界面是否也可以这样,当然也是可以的
本文以centos 6为例安装配置

  1. 安装spawn-fcgi
    wget https://github.com/lighttpd/spawn-fcgi/archive/spawn-fcgi-1.6.4.zip
    unzip spawn-fcgi-1.6.4.zip && rm spawn-fcgi-1.6.4.zip 
    mv spawn-fcgi-spawn-fcgi-1.6.4/ spawn-fcgi
    cd spawn-fcgi/
    ./autogen.sh 
    ./configure 
    make && make install
  2. 安装fcgiwrap
    yum -y install fcgi fcgi-devel nginx
    wget https://github.com/gnosek/fcgiwrap/archive/1.1.0.zip
    unzip 1.1.0.zip 
    rm 1.1.0.zip 
    mv fcgiwrap-1.1.0/ fcgiwrap
    cd fcgiwrap/
    autoreconf -i
    ./configure 
    make && make install
  3. 添加fcgiwrap 启动脚本
    脚本启用用户要和你nginx启动用户一致,注意下脚本中路径及启动用户
    vim /etc/init.d/fcgiwrap

    #! /bin/bash
    ### BEGIN INIT INFO
    # Provides:          fcgiwrap
    # Required-Start:    $remote_fs
    # Required-Stop:     $remote_fs
    # Should-Start:
    # Should-Stop:
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: FastCGI wrapper
    # Description:       Simple server for running CGI applications over FastCGI
    ### END INIT INFO
    
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    SPAWN_FCGI="/usr/local/bin/spawn-fcgi"
    DAEMON="/usr/local/sbin/fcgiwrap"
    NAME="fcgiwrap"
    
    PIDFILE="/var/run/$NAME.pid"
    
    FCGI_SOCKET="/tmp/$NAME.socket"
    FCGI_USER="nginx"
    FCGI_GROUP="nginx"
    FORK_NUM=5
    SCRIPTNAME=/etc/init.d/$NAME
    
    case "$1" in
        start)
            echo -n "Starting $NAME... "
    
            PID=`pidof $NAME`
            if [ ! -z "$PID" ]; then
                echo " $NAME already running"
                exit 1
            fi
    
            $SPAWN_FCGI -u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -P $PIDFILE -F $FORK_NUM -f $DAEMON
    
            if [ "$?" != 0 ]; then
                echo " failed"
                exit 1
            else
                echo " done"
            fi
        ;;
    
        stop)
            echo -n "Stoping $NAME... "
    
            PID=`pidof $NAME`
            if [ ! -z "$PID" ]; then
                kill `pidof $NAME`
                if [ "$?" != 0 ]; then
                    echo " failed. re-quit"
                    exit 1
                else
                    rm -f $pid
                    echo " done"
                fi
            else
                echo "$NAME is not running."
                exit 1
            fi
        ;;
    
        status)
            PID=`pidof $NAME`
            if [ ! -z "$PID" ]; then
                echo "$NAME (pid $PID) is running..."
            else
                echo "$NAME is stopped"
                exit 0
            fi
        ;;
    
        restart)
            $SCRIPTNAME stop
            sleep 1
            $SCRIPTNAME start
        ;;
    
        *)
            echo "Usage: $SCRIPTNAME {start|stop|restart|status}"
            exit 1
        ;;
    esac

    fcgiwrap

    chmod +x /etc/init.d/fcgiwrap

  4. 启动
    chkconfig --add fcgiwrap
    chkconfig --level 2345 fcgiwrap on
    ./etc/init.d/fcgiwrap restart
  5. nginx配置
    测试环境编辑/etc/nginx/conf.d/default.conf,添加
        location ~ ^/cgi-bin/cgi/.*\.(cgi|sh) {  #这里的后缀匹配根据需要修改,可以使用统一cgi后缀
            gzip off;
            fastcgi_pass unix:/tmp/fcgiwrap.socket;
            fastcgi_index index.cgi;
            include fastcgi_params;
            fastcgi_param  SCRIPT_NAME $document_root$fastcgi_script_name;
        }

    重启nginx:
    nginx -s reload
    mkdir -p /usr/share/nginx/html/cgi-bin 放置首页html
    mkdir -p /usr/share/nginx/html/cgi-bin/cgi 放置脚本

  6. 脚本测试
    vim  /usr/share/nginx/html/cgi-bin/cgi/disk.cgi

    #!/bin/bash
    echo "Content-Type:text/html;charset=utf-8"
    echo ""
    #前3行必须是这个格式,html代码使用echo,linux命令和脚本语法一样
    
    echo ‘<div style="padding-left:10px;">‘
    echo ‘<h1 style="color:red;border-left:4px solid;padding:4px;">硬盘使用情况</h1>‘
    echo ‘<h5>‘
    dd=`date`
    echo "统计时间: $dd"
    echo ‘</h5>‘
    echo ‘<pre style="border-left: 4px solid rgb(12, 40, 245);padding:5px">‘
    df -hT
    echo ‘</pre>‘

    disk.cgi

    访问:http://your-ip/cgi-bin/cgi/disk.cgi

时间: 2024-10-17 23:01:06

Nginx支持web界面执行bash脚本的相关文章

批量Ping执行Bash脚本

#!/bin/bash # Ping Batch Script # 连接超时时间 TMOUT=3 # 最大线程数 MAX_THREAD=4000 # 保留内存大小 MIN_MEM=400 # 默认ip配置,可通过 -r ip-ip指定,格式: ping_batch.sh -r 192.168.1.1-192.168.2.254 # ip前缀 ip_preffix="192.168" # 16位主机范围 192.168.1-192.168.2 ip_network_range="

nginx服务器是怎么执行php脚本的?

简单的说: fastCGI是nginx和php之间的一个通信接口,该接口实际处理过程通过启动php-fpm进程来解 析php脚本,即php-fpm相 当于一个动态应用服务器,从而实现nginx动态解析php.因此,如果nginx服务器需要支 持php解析,需要在nginx.conf中增加php的配置:将php脚本转发到fastCGI进程监听的IP地址和端口 (php-fpm.conf中指定).同时,php安装的时候,需要开启支持fastCGI选项,并且编译安装php-fpm补丁 /扩展,同时,需

nginx访问web界面验证

为了安全起见,部署的web内容不想让别人看到,或者为了增强安全性. 部署步骤: 首先利用apache的htpasswd功能生成一个用户名和密码: htpasswd -c /usr/local/nginx/conf/test.pass test New password:123456 2.在nginx配置文件location中添加如下两行: location / {             root   /usr/share;             index  index.php index.

玩转Bash脚本:变量基本概念及其初始化

总第2篇 基本概念 命名 注意以下规则: 只能包含字母.数字和下划线,并且不能以数字开头 大小写敏感 不能和系统变量重名 除此以外,如果要导出为全局变量,名称最好要全部大写.这只是一种习惯的约定,并非严格的约束. 类型 几乎所有的编程语言都有变量的概念,Bash当然也不例外.说道变量就少不了说一说类型.但与其他语言不同的是Bash属于无类型语言,如果强要说一种类型,可以认为都是字符串.说到这里,你可能会说,Bash里面也有整数类型吧,好像有整数的运算.但其是通过一些运算符,表达式或者命令将字符串

开发程序实现nginx代理节点状态检查及WEB界面展示

实现功能介绍: 利用shell程序及http服务巧妙的实现监控nginx代理节点状态检查,然后通过web界面实时刷新显示结果,是不是有些吃惊这样高大上的程序?那就赶紧看看吧!to用人单位:此课程可以体现学生shell编程功力,以及对nginx proxy企业实战及驾驭的能力. 不同的同学的三个实现方法分享,各位看官,你们看看哪个同学的更好,请评论. 第一个实现脚本:youjinyi 视频下载看地址:http://down.51cto.com/data/1914201 #!/bin/sh port

zabbix开启web界面中文支持(中文乱码问题)

1.开启web界面中文支持 #vi /var/www/zabbix/include/locales.inc.php 将这一行修改为'zh_CN' => array('name' => _('Chinese(zh_CN)'),        'display' => true) 2.中文字体乱码问题 替换 /var/www/zabbix/fonts/DejaVuSans.ttf即可

JQuery html API支持解析执行Javascript脚本功能实现-代码分析

JQuery html用法(功能类似innerHTML) 开发中需要使用Ajax技术来更新页面局部区域, 使用的方法是ajax获取html代码段(字符串),然后将这个html代码段作为参数,传入目标DOM(JQuery对象)的JQuery html接口,此语句执行后, 会将html代码段解释执行, 显示出html代码段描述的页面控件. 例如: <html> <head> <script type="text/javascript" src="./

bash脚本执行的控制语句

一.bash脚本执行的控制语句: 1.顺序执行:默认,逐条执行各语句. 2.选择执行:分支,条件判断,执行符合条件的分支. if 3.循环执行:将同一段代码反复执行有限次. a.for:实现知道循环次数, for var_name in 列表: do 循环体 done 如循环执行添加三个用户:xiaowang,xiaoli,xiaosun #!/bin/bash for userName in xiaowang xiaoli xiaosun; do useradd $userName done

Linux基础之bash脚本编程进阶篇-选择执行语句(if,case)

bash脚本的书写规范简介 看本文需要了解的脚本撰写习惯:bash 开头顶格写#!紧接着写解释器路径/bin/bash 由于bash属于脚本语言,脚本语言的运行方式 解释运行:源代码 --> 运行时启动解释器,由解释器边解释边运行 Linux中的脚本解释器有:zsh,csh,bash,tsh众多shell,不过bash最常用. 第一行写完之后,就可以直接写代码.不过为了便于他人阅读通常会增加如下行: 第二行:#版本信息 第三行:#作者与联系方式 第四行:#版权宣告方式 第五行:#History