php管理nginx虚拟主机shell脚本实例


Posted in PHP onNovember 19, 2014

本文实例讲述了php管理nginx虚拟主机shell脚本,分享给大家供大家参考。具体分析如下:

使用php作为shell脚本是一件很方便的事情。理所当然,我们可以使用php脚本来管理 nginx虚拟主机,下面是笔者的 脚本 文件供各位参考:

#!/usr/bin/php -q

<?php

 

start: fwrite(STDOUT,"===========Vhost Script===========\n");

fwrite(STDOUT,"= Choose an operation \n");

fwrite(STDOUT,"= 1.Create 2.Delete 3.Exit\n");

fwrite(STDOUT,"==================================\n");

$operate = trim(fgets(STDIN));

if ( $operate == 1  ){

fwrite(STDOUT,"Please Enter a  Domain Name:");

$domain = trim(fgets(STDIN));

$path = "/home/sites/{$domain}";

$nginx_conf = "/etc/nginx/sites/{$domain}";

$nginx_template = "/etc/nginx/template/site_conf";

$apache_conf = "/etc/httpd/conf/httpd.conf";

$conf_str = "";

 

//变量初始化

 

if( file_exists($path ) ) exit ("Domain Existed!\n");

else mkdir($path,0700);

if(file_exists($nginx_conf)) exit ("Nginx Config file existed!\n");

else {

    $conf_str = file_get_contents( $nginx_template );

}

 

//目录检测及配置文件拷贝

 

eval ( "\$conf_str = \"$conf_str\";" );

 

$succes = file_put_contents($nginx_conf,$conf_str);

if( !$succes ) exit ("Write Config File Fauile!");

else echo "Create Vhost success!\n";

goto start;

//写入配置文件

}

else if ($operate == 2){

    $confs_dir = dir("/etc/nginx/sites");

    $confs_list = array();

    $count = 0;

    while ( false !== ( $conf_file = $confs_dir->read() ) ){

        if( $conf_file == "." ) continue;

        if( $conf_file == ".." ) continue;

        if ( is_file( $confs_dir->path ."/". $conf_file) ) {

            $confs_list[$count++] =  $conf_file;

        }

    }

    echo "Select a site by number which to delete:\n";

    if( count( $confs_list ) >0 )

        foreach ( $confs_list as $k=>$v ){

            echo "{$k}. $v\n";

        }

    $index = trim(fgets(STDIN));

    if( in_array ( $index,array_keys( $confs_list ) ) ){

        copy(  $confs_dir->path ."/". $confs_list[$index],"/etc/nginx/backup/{$confs_list[$index]}" );

        unlink ( $confs_dir->path ."/". $confs_list[$index] );

        exec("tar -zcf  /home/sites/{$confs_list[$index]}.tar.gz /home/sites/".$confs_list[$index] );

        exec("rm -Rf /home/sites/".$confs_list[$index]);

    }

    //删除指定配置,并保存备份

}

else if( $operate == 3 ) {

    exit;

}

else {

 exit ("No Operation Selected!");

}

?>

下面是nginx的配置模版
server {

listen 80;

server_name {$domain};

access_log /var/log/nginx/{$domain}_access_log;

error_log /var/log/nginx/{$domain}_error_log;

root {$path};

#不记录对站点图标访问

location = /favicon.ico {

log_not_found off;

access_log off;

}

#不记录对robots.txt的访问

location = /robots.txt {

allow all;

log_not_found off;

access_log off;

}

location = / {

try_files @proxy;

}

location / {

index index.htm index.html index.php;

try_files \$uri @proxy;

}

#匹配html

location ~* \.(html|htm)$ {

expires 30s;

gzip off;

add_header Content-Encoding gzip;

try_files \$uri \$uri/ /wp-content/cache/supercache/\$http_host/\$request_uri/index.html.gz @proxy;

}

#匹配图片、脚本文件等

location ~* \.(jpe?g|gif|png|ico|css|js|flv|swf|avi|zip|rar|svg|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mp3)$ {

expires 30d;

}

#传递给apache

location @proxy {

index index.htm index.html index.php;

proxy_pass   http://127.0.0.1:81;

include /etc/nginx/proxy.conf;

}

}

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
在PHP3中实现SESSION的功能(一)
Oct 09 PHP
PHP中的extract的作用分析
Apr 09 PHP
PHP类与对象中的private访问控制的疑问
Nov 01 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
Jun 17 PHP
PHP安全上传图片的方法
Mar 21 PHP
ZF框架实现发送邮件的方法
Dec 03 PHP
php简单实现短网址(短链)还原的方法(测试可用)
May 09 PHP
一段实用的php验证码函数
May 19 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
PHP封装的PDO数据库操作类实例
Jun 21 PHP
php实现微信支付之企业付款
May 30 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
Apr 20 PHP
PHP 读取和编写 XML
Nov 19 #PHP
PHP生成不重复随机数的方法汇总
Nov 19 #PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
Nov 19 #PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
Nov 19 #PHP
PHP中使用数组指针函数操作数组示例
Nov 19 #PHP
PHP循环遍历数组的3种方法list()、each()和while总结
Nov 19 #PHP
PHP分页类集锦
Nov 18 #PHP
You might like
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
JS函数验证总结(方便js客户端输入验证)
2010/10/29 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
2016/12/20 Javascript
vue模板语法-插值详解
2017/03/06 Javascript
利用jQuery解析获取JSON数据
2017/04/08 jQuery
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
基于vue2.x的电商图片放大镜插件的使用
2018/01/22 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
使用Python操作MySQL的一些基本方法
2015/08/16 Python
Python的条件语句与运算符优先级详解
2015/10/13 Python
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
详解python单元测试框架unittest
2018/07/02 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
Python 获取windows桌面路径的5种方法小结
2019/07/15 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
测绘工程专业个人自我评价
2013/12/01 职场文书
初中美术教学反思
2014/01/29 职场文书
行政工作个人的自我评价
2014/02/13 职场文书
法人授权委托书格式
2014/04/08 职场文书
安全保证书怎么写
2015/02/28 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
SQL优化老出错,那是你没弄明白MySQL解释计划用法
2021/11/27 MySQL
Python matplotlib多个子图绘制整合
2022/04/13 Python
golang生成并解析JSON
2022/04/14 Golang