- A+
所属分类:linux技术
原文:靳闯博客-Nginx支持web界面执行bash.python等脚本
使用说明
1,shell命令 | python命令 | 系统支持的都可以
2,不支持交互式显示 | 不支持动态内容显示
3,傻瓜式操作(页面点击链接一次,执行一次脚本内容)|可以设置页面自动刷新,实现重复执行脚本
使用要求
Linux系统(这里使用centos7演示)
软件安装
安装nginx
#创建nginx用户 useradd -M -s /sbin/nologin nginx #添加epelyum源 wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo #安装依赖包 yum -y install wget unzip bzip2 zlib zlib-devel pcre pcre-devel openssl openssl-devel geoip geoip-devel gd gd-devel gcc gcc-c++ make libtool #创建相关源码包存放目录 mkdir /source && cd /source #下载解压相关依赖源码包 wget https://www.jinchuang.org/novel/lnmp/pcre-8.35.tar.gz wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz wget https://www.jinchuang.org/novel/lnmp/zlib-1.2.8.tar.gz tar xf pcre-8.35.tar.gz tar xf openssl-1.0.2h.tar.gz tar xf zlib-1.2.8.tar.gz #下载nginx配置编译安装 wget http://nginx.org/download/nginx-1.18.0.tar.gz tar xf nginx-1.18.0.tar.gz && cd nginx-1.18.0 ./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/usr/local/nginx/client_temp --http-proxy-temp-path=/usr/local/nginx/proxy_temp --http-fastcgi-temp-path=/usr/local/nginx/fastcgi_temp --http-uwsgi-temp-path=/usr/local/nginx/uwsgi_temp --http-scgi-temp-path=/usr/local/nginx/scgi_temp --user=nginx --group=nginx --with-mail --with-stream --with-threads --with-file-aio --with-poll_module --with-select_module --with-http_v2_module --with-http_flv_module --with-http_mp4_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_ssl_module --with-http_geoip_module --with-http_slice_module --with-http_gunzip_module --with-http_realip_module --with-http_addition_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module --with-mail_ssl_module --with-stream_ssl_module --with-stream_realip_module --with-stream_ssl_preread_module --with-pcre=/source/pcre-8.35 --with-openssl=/source/openssl-1.0.2h --with-zlib=/source/zlib-1.2.8 maek && make install
添加nginx命令到系统环境中
echo 'export PATH=$PATH:/usr/local/nginx/sbin' >>/etc/profile && source /etc/profile
安装spawn-fcgi
yum install dh-autoreconf fcgi fcgi-devel-y cd /source/ wget https://www.jinchuang.org/novel/lnmp/spawn-fcgi.zip unzip spawn-fcgi.zip mv spawn-fcgi-master spawn-fcgi && cd spawn-fcgi ./autogen.sh ./configure make && make install
安装fcgiwrap
cd /source/ wget https://www.jinchuang.org/novel/lnmp/fcgiwrap.zip unzip fcgiwrap.zip mv fcgiwrap-master fcgiwrap && cd fcgiwrap autoreconf -i ./configure make && make install
创建fcgiwrap启动脚本 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
增加执行权限
chmod +x /etc/init.d/fcgiwrap
启动服务
#启动nginx nginx #启动fcgiwrap /etc/init.d/fcgiwrap start
下载html模板
#把下载的html模板放到nginx网站根目录下 cd /usr/local/nginx/html/ wget wget https://ossjc-1252545319.cos.ap-shanghai.myqcloud.com/webfile/zip/linux-shell.zip unzip linux-shell.zip #给脚本增加执行权限 cd linux-shell/page/script/ chmod +x */*
模板目录结构
page/script/ #命令脚本文件目录 page/h5/ #html页面(调用脚本,执行命令) page/content/ #首页默认页面 # 程序html模板使用:(脚本文件要加执行权限,不然会提示403 错误) cd linux-shell/page/script/ chmod +x */*
脚本文件名称说明:
disk #查看硬盘使用情况 info #提示信息内容 mem #内存使用情况 ps #系统进程概览 server #自定义服务进程查看 ssh #ssh连接用户情况 uptime #系统负载cpu和内存使用概览
命令代码脚本示例
#!/bin/bash echo 'Content-Type:text/html;charset=utf-8' echo '' # 自动刷新 #echo '<script>window.setInterval(function(){ # window.location.reload(); #},1000);</script>' #echo '<meta http-equiv="refresh" content="60">' # html页面css样式 echo '<style> body{color:#cecece;} .title{color: #FF9800;border-left: 4px solid;padding: 4px;} pre{font-size:14px;border-left: 4px solid #4CAF50;padding: 5px;} </style>' # 定义变量 ip="192.168.x.x" # 内容代码(命令返回结果放在<pre>标签中) echo '<div style="padding-left:10px;">' echo '<h1 class="title">硬盘使用情况</h1>' echo '<h5 style="color:#848484;">' dd=`date` echo "统计时间: $dd 【当前机器ip: $ip】" echo '</h5>' echo '<pre>' # 查看磁盘使用(本机) df -hT # 查看磁盘使用(远程机器,可以使用ansible|sshpass等远程非界面交互工具) sshpass -p "password" ssh root@$ip -o StrictHostKeyChecking=no 'df -hT' echo '</pre>'
配置nginx转发
修改配置文件
#注意下修改为你的目录路径 #location ~ ^/linux-shell/page/script/.*.(cgi) { #这里的cgi后缀匹配根据需要修改,后缀自定义即可 # linux-shell 为模板程序目录,放在nginx网站根目录下面 location ~ ^/linux-shell/page/script/ { #我这里调用的文件是没有后缀的就用这个配置 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