ubuntu安装apache2 mysql5 php5

1、安装apache2

  1. apt-get install -y apache2

2、安装mysql5

  1. apt-get install -y mysql-server

3、安装php5

  1. apt-get install -y php5 libapache2-mod-php5 php5-mysql

4、安装更多php5模块

  1. apt-cache search ^php5

得到以下列表模块:

[……]
php5-mcrypt – MCrypt module for php5
php5-cli – command-line interpreter for the php5 scripting language
php5-common – Common files for packages built from the php5 source
php5-curl – CURL module for php5
php5-gd – GD module for php5
[……]

执行安装命令:

  1. apt-get install -y php5-mcrypt php5-cli php5-common php5-curl php5-gd

5、管理命令

apache2:/etc/init.d/apache2 start(stop|restart|reload)
mysql: /etc/init.d/mysql start(stop|restart|reload)

6、配置文件

apache2:/etc/apache2
php5:/etc/php5/apache2
mysql5:/etc/mysql/

Apt和dpkg快速参考

apt-cache search # ——(package 搜索包)
apt-cache show #——(package 获取包的相关信息,如说明、大小、版本等)
sudo apt-get install # ——(package 安装包)
sudo apt-get install # —–(package – – reinstall 重新安装包)
sudo apt-get -f install # —–(强制安装?#”-f = –fix-missing”当是修复安装吧…)
sudo apt-get remove #—–(package 删除包)
sudo apt-get remove – – purge # ——(package 删除包,包括删除配置文件等)
sudo apt-get autoremove –purge # —-(package 删除包及其依赖的软件包+配置文件等(只对6.10有效,强烈推荐))
sudo apt-get update #——更新源
sudo apt-get upgrade #——更新已安装的包
sudo apt-get dist-upgrade # ———升级系统
sudo apt-get dselect-upgrade #——使用 dselect 升级
apt-cache depends #——-(package 了解使用依赖)
apt-cache rdepends # ——(package 了解某个具体的依赖?#当是查看该包被哪些包依赖吧…)
sudo apt-get build-dep # ——(package 安装相关的编译环境)
apt-get source #——(package 下载该包的源代码)
sudo apt-get clean && sudo apt-get autoclean # ——–清理下载文件的存档 && 只清理过时的包
sudo apt-get check #——-检查是否有损坏的依赖

apt-get install
下载 以及所有倚赖的包裹,同时进行包裹的安装或升级。如果某个包裹被设置了 hold (停止标志,就会被搁在一边(即不会被升级)。更多 hold 细节请看下面。

apt-get remove [–purge]
移除 以及任何倚赖这个包裹的其它包裹。
–purge 指明这个包裹应该被完全清除 (purged) ,更多信息请看 dpkg -P。

apt-get update
升级来自 Debian 镜像的包裹列表,如果你想安装当天的任何软件,至少每天运行一次,而且每次修改了
/etc/apt/sources.list 后,必须执行。

apt-get upgrade [-u]
升级所以已经安装的包裹为最新可用版本。不会安装新的或移除老的包裹。如果一个包改变了倚赖关系而需要安装一个新的包裹,那么它将不会被升级,而是标志为 hold。apt-get update 不会升级被标志为 hold 的包裹 (这个也就是 hold 的意思)。请看下文如何手动设置包裹为 hold。我建议同时使用 ‘-u’ 选项,因为这样你就能看到哪些包裹将会被升级。

apt-get dist-upgrade [-u]
和 apt-get upgrade 类似,除了 dist-upgrade 会安装和移除包裹来满足倚赖关系。因此具有一定的危险性。

apt-cache search
搜索满足 的包裹和描述。

apt-cache show
显示 的完整的描述。

apt-cache showpkg
显示 许多细节,以及和其它包裹的关系。

dselect
console-apt
aptitude
gnome-apt
APT 的几个图形前端(其中一些在使用前得先安装)。这里 dselect 无疑是最强大的,也是最古老,最难驾驭。

普通 Dpkg 用法
dpkg -i
安装一个 Debian 包裹文件,如你手动下载的文件。

dpkg -c
列出 的内容。

dpkg -I
从 中提取包裹信息。

dpkg -r
移除一个已安装的包裹。

dpkg -P
完全清除一个已安装的包裹。和 remove 不同的是,remove 只是删掉数据和可执行文件,purge 另外还删除所有的配制文件。

dpkg -L
列出 安装的所有文件清单。同时请看 dpkg -c 来检查一个 .deb 文件的内容。

dpkg -s
显示已安装包裹的信息。同时请看 apt-cache 显示 Debian 存档中的包裹信息,以及 dpkg -I 来显示从一个 .deb 文件中提取的包裹信息。

dpkg-reconfigure
重新配制一个已经安装的包裹,如果它使用的是 debconf (debconf 为包裹安装提供了一个统一的配制界面)。你能够重新配制 debconf 它本身,如你想改变它的前端或提问的优先权。例如,重新配制 debconf,使用一个 dialog 前端,简单运行:

dpkg-reconfigure –frontend=dialog debconf (如果你安装时选错了,这里可以改回来哟:)

echo ” hold” | dpkg –set-selections
设置 的状态为 hlod (命令行方式)

dpkg –get-selections “”
取的 的当前状态 (命令行方式)

支持通配符,如:
Debian:~# dpkg –get-selections *wine*
libwine hold
libwine-alsa hold
libwine-arts hold
libwine-dev hold
libwine-nas hold
libwine-print hold
libwine-twain hold
wine hold
wine+ hold
wine-doc hold
wine-utils hold

例如:
大家现在用的都是 gaim-0.58 + QQ-plugin,为了防止 gaim 被升级,我们可以采用如下方法:

方法一:
Debian:~# echo “gaim hold” | dpkg –set-selections
然后用下面命令检查一下:
Debian:~# dpkg –get-selections “gaim”
gaim hold
现在的状态标志是 hold,就不能被升级了。

如果想恢复怎么办呢?
Debian:~# echo “gaim install” | dpkg –set-selections
Debian:~# dpkg –get-selections “gaim”
gaim install
这时状态标志又被重置为 install,可以继续升级了。

同志们会问,哪个这些状态标志都写在哪个文件中呢?
在 /var/lib/dpkg/status 里,你也可以通过修改这个文件实现 hold。

有时你会发现有的软件状态标志是 purge,不要奇怪。
如:事先已经安装了 amsn,然后把它卸了。
apt-get remove –purge amsn
那么状态标志就从 install 变成 purge。

方法二:
在/etc/apt 下手动建一个 preferences 文件
内容:
Package: gaim
Pin: version 0.58*
保存

dpkg -S
在包裹数据库中查找 ,并告诉你哪个包裹包含了这个文件。(注:查找的是事先已经安装的包裹)
转自:http://wiki.ubuntu.org.cn/Apt%E5%92%8Cdpkg%E5%BF%AB%E9%80%9F%E5%8F%82%E8%80%83

mysql增量备份

小量的数据库我们可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,我们就不太可能每天进行一次完整备份了,而且改成每周一次完整备份,每天一次增量备份类似这样的备份策略。增量备份的原理就是使用了mysql的二进制日志,所以我们必须启用二进制日志功能。

一、增量备份

1、比如我们在星期天下午11点做一次完整备份:

  1. mysqldump –single-transaction –flush-logs –master-data=2 –all-databases > fullbackup_sunday_11_PM.sql

在sql文件中我们会看到两行:
— Position to start replication or point-in-time recovery from
— CHANGE MASTER TO MASTER_LOG_FILE=’bin-log.000002′, MASTER_LOG_POS=107;
第二行包含了我们需要的信息,是指备份后所有的更改将会保存到bin-log.000002二进制文件中。
2、然后在星期一下午11点我们来做一次增量备份:

  1. mysqladmin flush-logs

这时将会产生一个新的二进制日志文件bin-log.000003,bin-log.000002则保存了自星期天下午11点到现在的所有更改,我们只需要把这个文件备份到安全的地方就行了。然后星期二我们又做增量备份,还是执行同样的命令,这时我们保存bin-log.000003文件。

二、恢复备份

比如星期三中午12点出现了故障,这时需要恢复,我们首先导入星期天的完整备份:

  1. mysql < fullbackup_sunday_3_AM.sql

接着我们导入星期一和星期二的增量备份:

  1. mysqlbinlog bin-log.000002 bin-log.000003 | mysql

这时我们已经恢复了所有备份数据,我们还可以找到bin-log.000004,进一步恢复最新的数据。

Windows 2008配置IIS PHP MySQL

一、下载软件
1、php-5.3.18-Win32-VC9-x86.msi
下载地址:http://windows.php.net/downloads/releases/php-5.3.18-Win32-VC9-x86.msi
2、mysql-5.5.28-win32.msi
下载地址:http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.28-win32.msi
二、IIS安装
1、打开开始-管理工具-服务器管理
2、单击“角色”,在右边点击“添加角色”
3、勾选“Web 服务器(IIS)”
Windows
4、角色服务勾选”CGI”
Windows
5、在浏览器中输入http://localhost/,如果出现如下页面,则表示iis正常。
Windows
二、MySQL安装
1、运行mysql-5.5.28-win32.msi程序。
2、在Choose Setup Type选择Typical。
Windows
3、这里选择”standard configuration”
Windows
4、勾选“Include Bin Directory in Windows PATH”
Windows
5、输入mysql root用户密码。
Windows
6、点击Execute开始配置。
三、测试MySQL
1、在cmd里输入mysql -uroot -p,输入密码能登录的就表示正常。
2、启动和停止MySQL的命令是:net start mysql和net stop mysql
四、安装PHP服务
1、运行php-5.3.18-Win32-VC9-x86.msi程序。
2、定义安装的目录。
Windows
3、勾选”IIS FastCGI”
Windows
4、选择需要安装的模块,一般默认就行。
Windows
5、在网站目录新建index.php,内容为:

用浏览器打开如出现如下界面,则正常。
Windows

利用nginx concat模块合并js css

如果你网站有很多css和js文件,如果把它们分别合并到一个文件,可以大大减小http请求数,加快网站访问速度。nginx-http-concat模块是由淘宝网开发的,现在淘宝网合并js和css正是用这个模块,如链接http://a.tbcdn.cn/??s/kissy/1.2.0/kissy-min.js,p/global/1.0/global-min.js,p/fp/2012/core.js,p/fp/2012/fp/module.js,p/fp/2012/fp/util.js,p/fp/2012/fp/directpromo.js?t=2012080620120924.js就是合并了kissy-min.js、global-min.js、core.js、module.js、util.js,directpromo.js等js文件。要使用这个模块,第一步当然是安装此模块并配置nginx,第二步是修改网站源码中引用js文件的代码,如本站合并js前的代码为:

  1. <script type="text/javascript" src="http://devops.webres.wang/wp-content/themes/HotNewspro/comments-ajax.js"></script>
  2. <script type="text/javascript" src="http://devops.webres.wang/wp-content/themes/HotNewspro/js/reply.js"></script>
  3. <script type="text/javascript" src="http://devops.webres.wang/wp-content/themes/HotNewspro/js/jquery.min.js" ></script>
  4. <script type="text/javascript" src="http://devops.webres.wang/wp-content/themes/HotNewspro/js/custom.js"></script>
  5. <script type="text/javascript" src="http://devops.webres.wang/wp-content/themes/HotNewspro/js/superfish.js"></script>
  6. <script type="text/javascript" src="http://devops.webres.wang/wp-content/themes/HotNewspro/js/muscript.js"></script>

合并后js代码为:

  1. <script type="text/javascript" src="http://devops.webres.wang/wp-content/themes/HotNewspro/??comments-ajax.js,js/reply.js,js/jquery.min.js,js/custom.js,js/superfish.js,js/muscript.js"></script>

下面以本博客为例讲解如何使用此模块。

安装concat模块

下载concat模块:

  1. git clone git://github.com/taobao/nginx-http-concat.git

使用–add-module添加模块:

  1. –add-module=/path/to/nginx-http-concat

配置nginx

在nginx.conf加入:

  1. location /wp-content/themes/HotNewspro {
  2. concat on;
  3. }

这段代码表示在目录/wp-content/themes/HotNewspro启用concat模块,这样在这目录的css或js才能合并。
更详细的nginx concat模块解释请移至:https://github.com/taobao/nginx-http-concat

nginx_lua模块基于mysql数据库动态修改网页内容

最近要实现一个需求,根据查询mysql数据库返回的内容,插入到网页底部。目前前端是用varnish作的缓存,刚开始想从varnish下手,但官方varnish不支持修改网页内容,要支持的话还需要自己修改源码实现,这个有点难度放弃了,于是想在varnish的后端架设一台nginx的反向代理服务器获取网页内容,然后通过nginx_lua模块实现查询mysql数据库动态修改网页的功能。下面是使用nginx_lua模块的方法,记录一下方便下次查询。

安装luajit2.0

git的安装可以参考:http://devops.webres.wang/2012/09/centos-install-git/

  1. cd /tmp/
  2. git clone http://luajit.org/git/luajit-2.0.git
  3. cd luajit-2.0/
  4. make && make install
  5. ln -sf luajit-2.0.0-beta10 /usr/local/bin/luajit
  6. ln -sf /usr/local/lib/libluajit-5.1.so.2 /usr/lib/

下载ngx_devel_kit、lua-nginx-module和nginx

  1. cd /tmp
  2. git clone http://github.com/simpl/ngx_devel_kit.git
  3. git clone http://github.com/chaoslawful/lua-nginx-module.git
  4. wget http://nginx.org/download/nginx-1.2.3.tar.gz

安装nginx

  1. tar xzf nginx-1.2.3.tar.gz
  2. cd nginx-1.2.3
  3. export LUAJIT_LIB=/usr/local/lib
  4. export LUAJIT_INC=/usr/local/include/luajit-2.0
  5. ./configure –prefix=/usr/local/nginx –add-module=/tmp/ngx_devel_kit –add-module=/tmp/lua-nginx-module
  6. make && make install

安装lua-resty-mysql

  1. cd /tmp
  2. git clone http://github.com/agentzh/lua-resty-mysql.git
  3. cd lua-resty-mysql/
  4. make install

nginx配置文件

  1. server {
  2.         ……
  3.         ……
  4.                resolver 8.8.8.8;
  5.     location / {
  6.         default_type  text/html;
  7.         content_by_lua_file "/usr/local/nginx/conf/lua";
  8. }
  9.     location /proxy {
  10.                 internal;
  11.                 proxy_pass $scheme://$http_host$request_uri;
  12.                 proxy_set_header Accept-Encoding ”;
  13.                  proxy_redirect          off;
  14.     }
  15.        ……
  16.        ……
  17.          }

lua内容

  1. if (ngx.req.get_method()=="GET") then
  2.         data=ngx.location.capture("/proxy")
  3.         if data.status == 200 then
  4.                 if data.header["Content-Type"] and string.find(data.header["Content-Type"],"html") then
  5.  
  6.                         –mysql connect begin
  7.                         local mysql = require "resty.mysql"
  8.                         local db, err = mysql:new()
  9.                         if not db then
  10.                                 ngx.say("failed to instantiate mysql: ", err)
  11.                                 return
  12.                         end
  13.                         db:set_timeout(1000) — 1 sec
  14.                         ok, err, errno, sqlstate = db:connect{
  15.                                 host = "127.0.0.1",
  16.                                 port = 3306,
  17.                                 database = "proxy",
  18.                                 user = "root",
  19.                                 password = "537817",
  20.                                 compact_arrays=true,
  21.                                 max_packet_size = 1024 * 1024 }
  22.                         if not ok then
  23.                                 ngx.say("failed to connect: ", err, ": ", errno, " ", sqlstate)
  24.                                 return
  25.                         end
  26.                         host=ngx.req.get_headers()["Host"]
  27.                         sql="select content from cache_modify where domain=’"..host.."’"
  28.                         res, err, errno, sqlstate = db:query(sql)
  29.                         if not res then
  30.                                 ngx.say("bad result: ", err, ": ", errno, ": ", sqlstate, ".")
  31.                                 return
  32.                         end
  33.                         –mysql connect end
  34.  
  35.                         if table.getn(res)==0 then
  36.                                 for k,v in pairs(data.header) do
  37.                                 ngx.header[k]=v
  38.                                 end
  39.                                 ngx.say(data.body)
  40.                         else
  41.                                 for k,v in pairs(data.header) do
  42.                                         if (k=="Content-Length") then
  43.                                                 ngx.header["Content-Length"]=""
  44.                                         else
  45.                                                 ngx.header[k]=v
  46.                                         end
  47.                                 end
  48.                                 body,_=string.gsub(data.body,"</body>",res[1][1].."</body>")
  49.                                 ngx.say(body)
  50.                         end
  51.                 else
  52.                         for k,v in pairs(data.header) do
  53.                                 ngx.header[k]=v
  54.                         end
  55.                         ngx.say(data.body)
  56.                 end;
  57.         else
  58.                 ngx.exec("/proxy")
  59.         end;
  60. else
  61.                 ngx.exec("/proxy");
  62. end;

模块地址:http://wiki.nginx.org/HttpLuaModule

bind-dlz结合mysql实现智能DNS

下面介绍bind结合mysql实现智能dns,以centos-6 32为例安装

安装mysql

  1. yum install gcc gcc-c++ openssl-devel wget ncurses-devel make
  2. groupadd mysql
  3. useradd -g mysql mysql -s /sbin/nologin
  4. cd /tmp
  5. wget http://cdn.mysql.com/Downloads/MySQL-5.1/mysql-5.1.65.tar.gz
  6. tar xzf mysql-5.1.65.tar.gz
  7. cd mysql-5.1.65
  8. ./configure –prefix=/usr/local/mysql/ –without-pthread –with-unix-socket-path=/tmp/mysql.sock –with-extra-charsets=gbk,gb2312,utf8
  9. make
  10. make install
  11. cp support-files/my-medium.cnf /etc/my.cnf
  12. /usr/local/mysql/bin/mysql_install_db –user=mysql
  13. chown -R root.mysql /usr/local/mysql
  14. chown -R mysql /usr/local/mysql/var
  15. cp support-files/mysql.server /etc/init.d/mysqld
  16. chown root.root /etc/rc.d/init.d/mysqld
  17. chmod 755 /etc/rc.d/init.d/mysqld
  18. chkconfig –add mysqld
  19. chkconfig  mysqld on
  20. ln -s /usr/local/mysql/bin/mysql /usr/bin
  21. ln -s /usr/local/mysql/bin/mysqladmin /usr/bin
  22. service mysqld start
  23. mysqladmin -u root password root

安装bind

  1. cd /tmp
  2. wget http://ftp.isc.org/isc/bind9/cur/9.9/bind-9.9.1-P2.tar.gz
  3. tar xzf bind-9.9.1-P2.tar.gz
  4. cd bind-9.9.1-P2
  5. ./configure –prefix=/usr/local/bind/ –disable-openssl-version-check –with-dlz-mysql=/usr/local/mysql
  6. make
  7. make install

配置bind

  1. cd /usr/local/bind/etc
  2. ../sbin/rndc-confgen -r /dev/urandom >rndc.conf
  3. tail -n10 rndc.conf | head -n9 | sed -e s/#//g>named.conf
  4.  
  5. vi named.conf
  6. 在后面增加:
  7. include "/usr/local/bind/etc/CHINANET.acl"; //联通ACL
  8. include "/usr/local/bind/etc/CNC.acl"; //电信ACL
  9. include "/usr/local/bind/etc/view.conf"; //DLZ相关的配置

下载acl文件:

  1. wget http://devops.webres.wang/wp-content/uploads/2012/02/CHINANET.acl
  2. wget http://devops.webres.wang/wp-content/uploads/2012/02/CNC.acl

view.conf内容:
其中需要修改的字段为user=root pass=root,即此处mysql用户为root,密码为root。

  1. view "CHINANET_view" {
  2.   match-clients  { CHINANET; };
  3.   allow-query-cache { none; };
  4.   allow-recursion { none; };
  5.   allow-transfer { none; };
  6.   recursion no;
  7.  
  8.     dlz "Mysql zone" {
  9.     database "mysql
  10.     {host=127.0.0.1 dbname=dns_data ssl=false port=3306 user=root pass=root}
  11.     {select zone from dns_records where zone = ‘$zone$’ and  view = ‘any’ limit 1}
  12.     {select ttl,type,mx_priority,case when lower(type)=’txt’ then concat(‘"’,data,’"’) when lower(type)    =  ‘soa’  then   concat_ws(‘ ‘,  data,  resp_person,  serial,  refresh,  retry,  expire,  minimum)   else   data   end   as   mydata   from   dns_records where zone = ‘$zone$’   and host = ‘$record$’ and view=(select view from dns_records where zone = ‘$zone$’ and host = ‘$record$’ and (view=’CHINANET’ or view=’any’) order by priority asc limit 1)}";
  13. };
  14. };
  15. view "CNC_view" {
  16.   match-clients  { CNC; };
  17.   allow-query-cache { none; };
  18.   allow-recursion { none; };
  19.   allow-transfer { none; };
  20.   recursion no;
  21.  
  22.     dlz "Mysql zone" {
  23.     database "mysql
  24.     {host=127.0.0.1 dbname=dns_data ssl=false port=3306 user=root pass=root}
  25.     {select zone from dns_records where zone = ‘$zone$’ and  view = ‘any’ limit 1}
  26.     {select ttl,type,mx_priority,case when lower(type)=’txt’ then concat(‘"’,data,’"’) when lower(type)    =  ‘soa’  then   concat_ws(‘ ‘,  data,  resp_person,  serial,  refresh,  retry,  expire,  minimum)   else   data   end   as   mydata   from   dns_records where zone = ‘$zone$’   and host = ‘$record$’ and view=(select view from dns_records where zone = ‘$zone$’ and host = ‘$record$’ and (view=’CNC’ or view=’any’) order by priority asc limit 1)}";
  27. };
  28. };
  29. view "any_view" {
  30.   match-clients  { any; };
  31.   allow-query-cache { none; };
  32.   allow-recursion { none; };
  33.   allow-transfer { none; };
  34.   recursion no;
  35.  
  36.     dlz "Mysql zone" {
  37.     database "mysql
  38.     {host=127.0.0.1 dbname=dns_data ssl=false port=3306 user=root pass=root}
  39.     {select zone from dns_records where zone = ‘$zone$’ and  view = ‘any’ limit 1}
  40.     {select ttl,type,mx_priority,case when lower(type)=’txt’ then concat(‘"’,data,’"’) when lower(type)    =  ‘soa’  then   concat_ws(‘ ‘,  data,  resp_person,  serial,  refresh,  retry,  expire,  minimum)   else   data   end   as   mydata   from   dns_records where zone = ‘$zone$’   and host = ‘$record$’ and view = ‘any’}";
  41. };
  42. };

数据库配置

  1. mysql>create database dns_data;        //创建数据库名为 dns_data
  2.    mysql>use dns_data;
  3.    DROP TABLE IF EXISTS `dns_records`;
  4. CREATE TABLE `dns_records` (
  5.    `id` int(10) unsigned NOT NULL auto_increment,
  6.    `zone` varchar(255) NOT NULL,
  7.    `host` varchar(255) NOT NULL default ‘@’,
  8.    `type` enum(‘MX’,’CNAME’,’NS’,’SOA’,’A’,’PTR’) NOT NULL,
  9.    `data` varchar(255) default NULL,
  10.    `ttl` int(11) NOT NULL default ‘800’,
  11.    `view` char(20) default ‘any’,     //any 代表默认,SOA 查询需,其它可以分,CNC……
  12.    `mx_priority` int(11) default NULL,
  13.    `priority` int(3) default 255,  //any为255,其它如CNC,CHINANET等线路为200
  14.    `refresh` int(11) NOT NULL default ‘3600’,
  15.    `retry` int(11) NOT NULL default ‘3600’,
  16.    `expire` int(11) NOT NULL default ‘86400’,
  17.    `minimum` int(11) NOT NULL default ‘3600’,
  18.    `serial` bigint(20) NOT NULL default ‘2008082700’,
  19.    `resp_person` varchar(64) NOT NULL default ‘root.domain.com.’,
  20.    `primary_ns` varchar(64) NOT NULL default ‘ns1.domain.com.’,
  21.    `data_count` int(11) NOT NULL default ‘0’,
  22.    PRIMARY KEY          (`id`),
  23.    KEY `type` (`type`),
  24.    KEY `host` (`host`),
  25.    KEY `zone` (`zone`)
  26. ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=gbk;

启动bind服务

# /usr/local/bind/sbin/named -uroot -g -d 9 //调试状态,如果没有报错说明环境配置正确。
做成启动服务. Debug 的时候多用此模式启动bind.
# /usr/local/bind/sbin/rndc reload 重载 named.conf 相关配置文件.
# /usr/local/bind/sbin/named -uroot -c /usr/local/bind/etc/named.conf 启动 bind 服务.

#插入记录的sql实例

  1. –SOA
  2.  
  3.      INSERT   INTO   `dns_records`   (`zone`,   `host`,   `type`,   `data`,   `ttl`,`mx_priority`,   `refresh`,   `retry`,   `expire`,      `minimum`, `serial`, `resp_person`, `primary_ns`, `data_count`) VALUES    (‘webres.wang’,     ‘@’,   ‘SOA’,   ‘ns1.webres.wang.’,    10,   NULL,     3600,    3600,   86400,    10,   2008082700, ‘root.webres.wang.’, ‘ns1.webres.wang.’, 0);
  4.  
  5.      –@ NS
  6.  
  7.      INSERT INTO `dns_records` (`zone`, `host`, `type`, `data`) VALUES      (‘webres.wang’, ‘@’, ‘NS’, ‘ns1.webres.wang.’),      (‘webres.wang’, ‘@’, ‘NS’, ‘ns2.webres.wang.’);
  8.  
  9.      –NS A
  10.      INSERT INTO `dns_records` (`zone`, `host`, `type`, `data`) VALUES      (‘webres.wang’, ‘ns1’, ‘A’, ‘211.100.72.137’),   (‘webres.wang’, ‘ns2’, ‘A’, ‘219.232.244.11’);
  11.  
  12.      –A
  13.  
  14.      INSERT INTO `dns_records` (`zone`, `host`, `type`, `data`, `ttl`, `view`,`priority`) VALUES   (‘webres.wang’, ‘www’, ‘A’, ‘210.51.36.116’, 3600, ‘CNC’,200),      (‘webres.wang’, ‘www’, ‘A’, ‘221.238.249.178’, 3600, ‘CHINANET’,200),      (‘webres.wang’, ‘www’, ‘A’, ‘211.103.156.230’, 3600, ‘any’,255);
  15.  
  16.      –CNAME
  17.  
  18.      INSERT INTO dns_records (zone,host,type,DATA,view,,priority)      VALUES (‘webres.wang’, ‘man’, ‘CNAME’, ‘www’,’CNC’,200),      (‘webres.wang’, ‘man’, ‘CNAME’, ‘www’,’CHINANET’,200),  (‘webres.wang’, ‘man’, ‘CNAME’, ‘www’,’any’,255);

联通acl:http://devops.webres.wang/wp-content/uploads/2012/02/CNC.acl
电信acl:http://devops.webres.wang/wp-content/uploads/2012/02/CHINANET.acl

使用mod_fcgid执行php脚本

安装依赖

  1. yum -y install gcc  gcc-c++ libtool-libs autoconf freetype-devel gd libjpeg-devel  libpng-devel libxml2-devel ncurses-devel zlib-devel curl-devel cmake patch  automake make  readline-devel openssl-devel  glibc-devel  glib2-devel bzip2-devel  libcap-devel   pcre-devel libmcrypt-devel

安装apache 2.2

  1. cd /tmp
  2. wget http://www.fayea.com/apache-mirror//httpd/httpd-2.2.22.tar.gz
  3. tar xzf httpd-2.2.22.tar.gz
  4. cd httpd-2.2.22
  5. ./configure –prefix=/usr/local/apache –with-included-apr –enable-so –enable-deflate=shared –enable-expires=shared  –enable-ssl=shared –enable-headers=shared –enable-rewrite=shared –enable-static-support
  6. make
  7. make install

安装mod_fcgid

  1. cd /tmp
  2. wget http://www.fayea.com/apache-mirror//httpd/mod_fcgid/mod_fcgid-2.3.7.tar.gz
  3. tar xzf mod_fcgid-2.3.7.tar.gz
  4. cd mod_fcgid-2.3.7
  5. APXS=/usr/local/apache/bin/apxs ./configure.apxs
  6. make && make install

安装mysql

  1. yum -y install mysql mysql-server mysql-devel

安装php

  1. #安装libmcrypt(只在centos 6进行)
  2. rpm -i http://centos.googlecode.com/files/libmcrypt-2.5.8-9.el6.i686.rpm
  3. rpm -i http://centos.googlecode.com/files/libmcrypt-devel-2.5.8-9.el6.i686.rpm
  4. cd /tmp
  5. wget http://cn.php.net/distributions/php-5.2.17.tar.gz
  6. tar xzf php-5.2.17.tar.gz
  7. cd php-5.2.17
  8. ./configure –prefix=/usr/local/php  –enable-fastcgi –enable-force-cgi-redirect –enable-discard-path –with-config-file-path=/etc –with-config-file-scan-dir=/etc/php.d –with-openssl –with-zlib  –with-curl –enable-ftp  –with-gd –with-jpeg-dir –with-png-dir –with-freetype-dir –enable-gd-native-ttf  –enable-mbstring –with-mcrypt –enable-zip  –with-mysql –without-pear
  9. make && make install
  10. cp php.ini-recommended /etc/php.ini

配置apache

1、在/usr/local/apache/conf/httpd.conf增加如下内容:

  1. NameVirtualHost *:80
  2. <VirtualHost *:80>
  3.   ServerName devops.webres.wang
  4.   ServerAlias devops.webres.wang webres.wang
  5.   DocumentRoot /var/www/html/
  6.   <IfModule mod_fcgid.c>
  7.     <Directory /var/www/html/>
  8.       Options +ExecCGI
  9.       AllowOverride All
  10.       AddHandler fcgid-script .php
  11.       FCGIWrapper /usr/local/php/bin/php-wrapper .php
  12.       Order allow,deny
  13.       Allow from all
  14.     </Directory>
  15.   </IfModule>
  16.   ServerSignature Off
  17. </VirtualHost>

2、/usr/local/php/bin/php-wrapper内容如下:

  1. #!/bin/sh
  2. # Set desired PHP_FCGI_* environment variables.
  3. # Example:
  4. # PHP FastCGI processes exit after 500 requests by default.
  5. PHP_FCGI_MAX_REQUESTS=10000
  6. export PHP_FCGI_MAX_REQUESTS
  7.  
  8. # Replace with the path to your FastCGI-enabled PHP executable
  9. exec /usr/local/php/bin/php-cgi

启动服务

#启动mysql

  1. service mysqld start
  2. mysqladmin -uroot password root
  3.  
  4. #启动apache
  5. /usr/local/apache/bin/apachectl -k start

使用bind-mysql模块增加对mysql数据库的支持

对于bind,如果想修改或增加dns记录,是直接修改文本的,这样的话一方面不方面管理,另一方面容易出错,如果我们增加对mysql数据库的支持,再配合php或perl,python等程序直接操作mysql,这对于dns的管理将会非常的方面和不易出错。现在介绍使用mysql bind驱动模块实现这一功能。

一、安装mysql

安装mysql服务器可以使用yum或源码编译安装,我们这里使用yum安装。

  1. yum -y install mysql mysql-server mysql-devel

二、安装bind和mysql-bind

1、分别下载bind和mysql-bind

  1. cd /tmp
  2. wget http://nchc.dl.sourceforge.net/project/mysql-bind/mysql-bind/mysql-bind-0.2%20src/mysql-bind.tar.gz
  3. wget http://ftp.isc.org/isc/bind9/cur/9.9/bind-9.9.1-P2.tar.gz
  4. tar xzf bind-9.9.1-P2.tar.gz
  5. tar xzf mysql-bind.tar.gz

2、分别复制mysql-bind的mysqldb.c和mysqldb.h到bind-9.9.1-P2/bin/named和bind-9.9.1-P2/bin/named/include

  1. cd /tmp/mysql-bind
  2. cp mysqldb.c mysqldb.h /tmp/bind-9.9.1-P2/bin/named
  3. cp mysqldb.c mysqldb.h /tmp/bind-9.9.1-P2/bin/named/include

3、修改bind源码中的bin/named/Makefile.in文件:

  1. DBDRIVER_OBJS = mysqldb.@O@
  2. DBDRIVER_SRCS = mysqldb.c
  3. DBDRIVER_INCLUDES = -I/usr/include/mysql  -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m32 -fasynchronous-unwind-tables -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fwrapv
  4. DBDRIVER_LIBS = -rdynamic -L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib -lssl -lcrypto

注:
DBDRIVER_INCLUDES的值由命令/usr/bin/mysql_config –cflags获得。
DBDRIVER_LIBS的值由命令/usr/bin/mysql_config –libs获得。
4、编辑bind源文件bin/named/main.c
4.1、包含mysqldb.h
在#include 后面增加#include
4.2、在函数setup(void)里面ns_server_create()的前面添加mysqldb_init(),如

  1. /*
  2.          * Add calls to register sdb drivers here.
  3.          */
  4.         /* xxdb_init(); */
  5.         mysqldb_init();
  6.         ns_server_create(ns_g_mctx, &ns_g_server);

4.3、在函数cleanup(void)里面ns_server_destroy()的后面添加mysqldb_clear(),如

  1. ns_server_destroy(&ns_g_server);
  2.         mysqldb_clear();
  3.         /*
  4.          * Add calls to unregister sdb drivers here.
  5.          */
  6.         /* xxdb_clear(); */

4.4、编辑bind源文件中的bin/named/mysqldb.c文件:

  1. 更改#include <named/mysqldb.h>为#include "include/mysqldb.h"

4.5 安装bind

  1. yum -y install gcc openssl-devel
  2. cd /tmp/bind-9.9.1-P2
  3. ./configure –prefix=/usr/local/bind  –disable-openssl-version-check
  4. make && make install

三、mysql配置

  1. 启动:service mysqld start
  2. 设置root密码:mysqladmin -uroot password root
  3. 创建数据库:mysql> create database dns;
  4. 创建表:   mysql> CREATE TABLE mydomain (
  5. name varchar(255) default NULL,
  6. ttl int(11) default NULL,
  7. rdtype varchar(255) default NULL,
  8. rdata varchar(255) default NULL
  9. ) TYPE=MyISAM;

插入数据示例:

  1. INSERT INTO mydomain VALUES (‘mydomain.com’, 259200, ‘SOA’, ‘mydomain.com. www.mydomain.com. 200309181 28800 7200 86400 28800’);
  2. INSERT INTO mydomain VALUES (‘mydomain.com’, 259200, ‘NS’, ‘ns0.mydomain.com.’);
  3. INSERT INTO mydomain VALUES (‘mydomain.com’, 259200, ‘NS’, ‘ns1.mydomain.com.’);
  4. INSERT INTO mydomain VALUES (‘mydomain.com’, 259200, ‘MX’, ’10 mail.mydomain.com.’);
  5. INSERT INTO mydomain VALUES (‘w0.mydomain.com’, 259200, ‘A’, ‘192.168.1.1’);
  6. INSERT INTO mydomain VALUES (‘w1.mydomain.com’, 259200, ‘A’, ‘192.168.1.2’);
  7. INSERT INTO mydomain VALUES (‘mydomain.com’, 259200, ‘Cname’, ‘w0.mydomain.com.’);
  8. INSERT INTO mydomain VALUES (‘mail.mydomain.com’, 259200, ‘Cname’, ‘w0.mydomain.com.’);
  9. INSERT INTO mydomain VALUES (‘ns0.mydomain.com’, 259200, ‘Cname’, ‘w0.mydomain.com.’);
  10. INSERT INTO mydomain VALUES (‘ns1.mydomain.com’, 259200, ‘Cname’, ‘w1.mydomain.com.’);
  11. INSERT INTO mydomain VALUES (‘www.mydomain.com’, 259200, ‘Cname’, ‘w0.mydomain.com.’);
  12. INSERT INTO mydomain VALUES (‘ftp.mydomain.com’, 259200, ‘Cname’, ‘w0.mydomain.com.’);

四、bind配置

  1. zone "mydomain.com" {
  2.   type master;
  3.   notify no;
  4.   database "mysqldb dbname tablename hostname user password";
  5. };

其中dbname是数据库名,tablename是表名,hostname是mysql主机,然后就是用户名和密码
启动bind:

  1. /usr/local/bind/sbin/named

使用nginx Limit Requests模块限制单个IP请求速率

此模块可以限制单个客户端发送请求的速率。
示例配置:

  1. http {
  2.     limit_req_zone  $binary_remote_addr  zone=one:10m   rate=1r/s;
  3.  
  4.     …
  5.  
  6.     server {
  7.  
  8.         …
  9.  
  10. location ~ .*.(php|php5)?$
  11.     {
  12.        limit_req   zone=one  burst=5 nodelay;
  13.         fastcgi_pass unix:/tmp/php-cgi-devops.webres.wang.sock;
  14.         fastcgi_index index.php;
  15.         include fcgi.conf;
  16.     }
  17.     }

此示例配置是指限制单个客户端请求php动态文件的速率是每秒一个请求,峰值是5个请求。