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 相关文章推荐
NOD32 v2.70.32 简体中文封装版 提供下载了
Feb 27 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
Sep 05 PHP
解析CI的AJAX分页 另类实现方法
Jun 27 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
Jun 12 PHP
PHP实现动态柱状图改进版
Mar 30 PHP
PHP实现微信网页授权开发教程
Jan 19 PHP
PHP快速排序quicksort实例详解
Sep 28 PHP
浅析php-fpm静态和动态执行方式的比较
Nov 09 PHP
Fleaphp常见函数功能与用法示例
Nov 15 PHP
购物车实现的几种方式优缺点对比
May 02 PHP
Laravel框架模板继承操作示例
Jun 11 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
Jun 03 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的输入输出流
2007/02/14 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
php抓取并保存网站图片的实现代码
2015/10/28 PHP
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
解析javascript 数组以及json元素的添加删除
2013/06/26 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
Jquery中&quot;$(document).ready(function(){ })&quot;函数的使用详解
2013/12/30 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
jQuery DateTimePicker 日期和时间插件示例
2017/01/22 Javascript
jQuery插件实现弹性运动完整示例
2018/07/07 jQuery
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
12个提高JavaScript技能的概念(小结)
2019/05/09 Javascript
详解vue父子组件状态同步的最佳方式
2020/09/10 Javascript
[02:15]2014DOTA2国际邀请赛 赛后退役选手回顾
2014/08/01 DOTA
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
[01:09:23]KG vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
详解python3中tkinter知识点
2018/06/21 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
Python判断对象是否为文件对象(file object)的三种方法示例
2019/04/26 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
python selenium登录豆瓣网过程解析
2019/08/10 Python
python实现两个文件夹的同步
2019/08/29 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
python实现五子棋程序
2020/04/24 Python
python中怎么表示空值
2020/06/19 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
工作检讨书怎么写
2015/01/23 职场文书
转让协议书
2015/01/27 职场文书
教师教育心得体会
2016/01/19 职场文书
Java详细解析==和equals的区别
2022/04/07 Java/Android