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 遍历数据表数据并列表横向排列的代码
Sep 05 PHP
PHP 采集程序中常用的函数
Dec 09 PHP
PHP安全配置详细说明
Sep 26 PHP
如何在Ubuntu下启动Apache的Rewrite功能
Jul 05 PHP
ThinkPHP验证码和分页实例教程
Aug 22 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
Oct 30 PHP
浅析php单例模式
Nov 25 PHP
smarty简单入门实例
Nov 28 PHP
php计算两个整数的最大公约数常用算法小结
Mar 05 PHP
php通过文件头判断格式的方法
May 28 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
Apr 17 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注销代码(session注销)
2012/05/31 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
php实现文本数据导入SQL SERVER
2015/05/17 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
JQUERY复选框CHECKBOX全选,取消全选
2008/08/30 Javascript
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
基于jquery的设置页面文本框 只能输入数字的实现代码
2011/04/19 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
实例分析javascript中的call()和apply()方法
2014/11/28 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
js简单判断flash是否加载完成的方法
2016/06/21 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
js实现div色块碰撞
2020/01/16 Javascript
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
python 为什么说eval要慎用
2019/03/26 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
python抓取多种类型的页面方法实例
2019/11/20 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
广州足迹信息技术有限公司Java软件工程师试题
2014/02/15 面试题
晨会主持词
2014/03/17 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
植物生产学专业求职信
2014/08/08 职场文书
全民创业工作总结
2015/08/13 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
pandas中pd.groupby()的用法详解
2022/06/16 Python