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

  本文实例讲述了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程序设计有所帮助。