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 相关文章推荐
PHP新手用的Insert和Update语句构造类
Mar 31 PHP
基于flush()不能按顺序输出时的解决办法
Jun 29 PHP
php读取本地文件常用函数(fopen与file_get_contents)
Sep 09 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
Apr 08 PHP
基于PHP实现通过照片获取ip地址
Apr 26 PHP
CI框架中数据库操作函数$this-&gt;db-&gt;where()相关用法总结
May 17 PHP
浅谈php中urlencode与rawurlencode的区别
Sep 05 PHP
PHP面向对象之事务脚本模式(详解)
Jun 07 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
Apr 12 PHP
Laravel框架实现的上传图片到七牛功能详解
Sep 06 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
Apr 23 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
mysql 全文搜索 技巧
2007/04/27 PHP
php初学者写及时补给skype用户充话费的小程序
2008/11/02 PHP
php IP及IP段进行访问限制的代码
2008/12/17 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
Java中final关键字详解
2015/08/10 PHP
Javascript代码混淆综合解决方案-Javascript在线混淆器
2006/12/18 Javascript
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
JS+CSS实现一个气泡提示框
2013/08/18 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
React中如何引入Angular组件详解
2018/08/09 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
angular多语言配置详解
2019/05/16 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
Python 正则表达式操作指南
2009/05/04 Python
python列表与元组详解实例
2013/11/01 Python
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
2016/04/12 Python
浅谈Pandas中map, applymap and apply的区别
2018/04/10 Python
python复制文件到指定目录的实例
2018/04/27 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
大学毕业生求职自荐信
2014/02/20 职场文书
公司晚会主持词
2014/03/22 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
证婚人致辞精选
2015/07/28 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android
Python re.sub 反向引用的实现
2021/07/07 Python