<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Security Team Blog &#187; 环境搭建</title>
	<atom:link href="http://www.secblog.cn/category/server/feed" rel="self" type="application/rss+xml" />
	<link>http://www.secblog.cn</link>
	<description>服务器系统架构、优化及网络安全</description>
	<lastBuildDate>Tue, 29 Nov 2011 02:15:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>开启Apache Server Status</title>
		<link>http://www.secblog.cn/server/814.html</link>
		<comments>http://www.secblog.cn/server/814.html#comments</comments>
		<pubDate>Wed, 11 Aug 2010 07:26:45 +0000</pubDate>
		<dc:creator>豬頭濱</dc:creator>
				<category><![CDATA[环境搭建]]></category>

		<guid isPermaLink="false">http://www.secblog.cn/?p=814</guid>
		<description><![CDATA[Apache的日志又多又杂，如果靠分析日志或者查看服务器进程来监视Apache运行状态的话，比较繁冗。其实在Apache 1.3.2及以后的版本中就自带一个查看Apache状态的功能模块server-status 打开Apache Server Status 如果你的Apache配置文件httpd.conf或者extra/httpd-info.conf中有LoadModule status_module modules/mod_status.so话，说明你的Apache已经加载了此模块；或者编译的时候加上了–enable-module=so也表明服务器支持server-status。 如果Apache没有加载这个模块，如果是linux服务器，就得重新编译Apache，加上–enable-module=so参数即可；如果你是windows系统的话，无需任何编译，只要把刚才时候说的LoadModule status_module modules/mod_status.so这句加上，如果前面有带#号，开启的话，需要将#去除。 配置Apache Server Status SetHandler server-status Order Deny,Allow Deny from all Allow from www.ccvita.com ExtendedStatus On 这是一个完整的server-status的配置。 第一行的ccvita-server-status表示以后可以用类似http://www.ccvita.com/ccvita-server-status来访问，同时 http://www.ccvita.com/ccvita-server-status?refresh=N将表示访问状态页面可以每N秒自动刷新一次； Deny from表示禁止的访问地址； Allow from表示允许的地址访问； ExtendedStatus On表示的是待会访问的时候能看到详细的请求信息，另外该设置仅能用于全局设置，不能在特定的虚拟主机中打开或关闭。启用扩展状态信息将会导致服务器运行效率降低。]]></description>
			<content:encoded><![CDATA[<p>Apache的日志又多又杂，如果靠分析日志或者查看服务器进程来监视Apache运行状态的话，比较繁冗。其实在Apache 1.3.2及以后的版本中就自带一个查看Apache状态的功能模块server-status</p>
<p>打开Apache Server Status<br />
如果你的Apache配置文件httpd.conf或者extra/httpd-info.conf中有LoadModule status_module modules/mod_status.so话，说明你的Apache已经加载了此模块；或者编译的时候加上了–enable-module=so也表明服务器支持server-status。</p>
<p>如果Apache没有加载这个模块，如果是linux服务器，就得重新编译Apache，加上–enable-module=so参数即可；如果你是windows系统的话，无需任何编译，只要把刚才时候说的LoadModule status_module modules/mod_status.so这句加上，如果前面有带#号，开启的话，需要将#去除。</p>
<p>配置Apache Server Status</p>
<p><location /ccvita-server-status><br />
         SetHandler server-status<br />
         Order Deny,Allow<br />
         Deny from all<br />
         Allow from www.ccvita.com<br />
</location><br />
ExtendedStatus On<br />
这是一个完整的server-status的配置。<br />
第一行的ccvita-server-status表示以后可以用类似http://www.ccvita.com/ccvita-server-status来访问，同时</p>
<p>http://www.ccvita.com/ccvita-server-status?refresh=N将表示访问状态页面可以每N秒自动刷新一次；</p>
<p>Deny from表示禁止的访问地址；<br />
Allow from表示允许的地址访问；<br />
ExtendedStatus On表示的是待会访问的时候能看到详细的请求信息，另外该设置仅能用于全局设置，不能在特定的虚拟主机中打开或关闭。启用扩展状态信息将会导致服务器运行效率降低。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.secblog.cn/server/814.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IIS + FastCGI + PHP5.3 + MySQL5.1 + Gzip</title>
		<link>http://www.secblog.cn/server/809.html</link>
		<comments>http://www.secblog.cn/server/809.html#comments</comments>
		<pubDate>Wed, 11 Aug 2010 07:19:59 +0000</pubDate>
		<dc:creator>豬頭濱</dc:creator>
				<category><![CDATA[环境搭建]]></category>

		<guid isPermaLink="false">http://www.secblog.cn/?p=809</guid>
		<description><![CDATA[本文所用的软件名称及下载地址： PHP5.3.2：php-5.3.2-nts-Win32-VC9-x86.zip 地址：http://windows.php.net/downloads/releases/php-5.3.2-nts-Win32-VC9-x86.zip MySQL：mysql-essential-5.1.48-win32.msi 地址：http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.1/mysql-essential-5.1.48-win32.msi FastCGI：这个有两种配置方法，正文中详细介绍 phpMyAdmin：本文用的是3.3.4版 Zend Optimizer：目前的Zend Optimizer还不支持PHP5.3.2 ，等出新版后我们再装。 前言：PHP5.3的版本选择 现在的PHP5.3 For Windows一共给了四个版本：VC9 x86 Non Thread Safe、VC9 x86 Thread Safe、VC6 x86 Non Thread Safe、VC6 x86 Thread Safe，参考PHP官网提供下载的地方左边的英文来看看这几个版本有什么区别。 一、如何选择PHP5.3的VC9版本和VC6版本 VC6版本是使用Visual Studio 6编译器编译的，如果你的PHP是用Apache来架设的，那你就选择VC6版本。 VC9版本是使用Visual Studio 2008编译器编译的，如果你的PHP是用IIS来架设的，那你就选择VC9版本。 二、如何选择PHP5.3的Thread Safe和Non Thread Safe版本 先从字面意思上理解，Thread Safe是线程安全，执行时会进行线程（Thread）安全检查，以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。Non Thread Safe是非线程安全，在执行时不进行线程（Thread）安全检查。 再来看PHP的两种执行方式：ISAPI和FastCGI。 ISAPI执行方式是以DLL动态库的形式使用，可以在被用户请求后执行，在处理完一个用户请求后不会马上消失，所以需要进行线 程安全检查，这样来提高程序的执行效率，所以如果是以ISAPI来执行PHP，建议选择Thread Safe版本； 而FastCGI执行方式是以单一线程来执行操作，所以不需要进行线程的安全检查，除去线程安全检查的防护反而可以提高执行效 率，所以，如果是以FastCGI来执行PHP，建议选择Non Thread Safe版本。 我们使用IIS+FastCGI方式配置服务器环境，所以使用Non Thread Safe版本。 [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: medium;"><strong>本文所用的软件名称及下载地址：</strong><br />
PHP5.3.2：php-5.3.2-nts-Win32-VC9-x86.zip<br />
地址：</span><a href="http://windows.php.net/downloads/releases/php-5.3.2-nts-Win32-VC9-x86.zip" target="_blank"><span style="font-size: medium;">http://windows.php.net/downloads/releases/php-5.3.2-nts-Win32-VC9-x86.zip</span></a></p>
<p><span style="font-size: medium;">MySQL：mysql-essential-5.1.48-win32.msi<br />
地址：</span><a href="http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.1/mysql-essential-5.1.48-win32.msi" target="_blank"><span style="font-size: medium;">http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.1/mysql-essential-5.1.48-win32.msi</span></a></p>
<p><span style="font-size: medium;">FastCGI：这个有两种配置方法，正文中详细介绍</span><br />
<span style="font-size: medium;"><br />
phpMyAdmin：本文用的是3.3.4版</p>
<p>Zend Optimizer：目前的Zend  Optimizer还不支持PHP5.3.2 ，等出新版后我们再装。</p>
<p><span style="font-family: 黑体;"><span style="font-size: x-large;"><span style="color: blue;">前言：PHP5.3的版本选择</span></span></span><br />
现在的PHP5.3 For  Windows一共给了四个版本：VC9 x86 Non Thread Safe、VC9 x86 Thread Safe、VC6 x86 Non Thread  Safe、VC6 x86 Thread  Safe，参考PHP官网提供下载的地方左边的英文来看看这几个版本有什么区别。</p>
<p>一、如何选择PHP5.3的VC9版本和VC6版本<br />
VC6版本是使用Visual  Studio 6编译器编译的，如果你的PHP是用Apache来架设的，那你就选择VC6版本。<br />
VC9版本是使用Visual Studio  2008编译器编译的，如果你的PHP是用IIS来架设的，那你就选择VC9版本。</p>
<p>二、如何选择PHP5.3的Thread Safe和Non  Thread Safe版本<br />
先从字面意思上理解，Thread  Safe是线程安全，执行时会进行线程（Thread）安全检查，以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。Non Thread  Safe是非线程安全，在执行时不进行线程（Thread）安全检查。<br />
再来看PHP的两种执行方式：ISAPI和FastCGI。<br />
ISAPI执行方式是以DLL动态库的形式使用，可以在被用户请求后执行，在处理完一个用户请求后不会马上消失，所以需要进行线  程安全检查，这样来提高程序的执行效率，所以如果是以ISAPI来执行PHP，建议选择Thread  Safe版本；<br />
而FastCGI执行方式是以单一线程来执行操作，所以不需要进行线程的安全检查，除去线程安全检查的防护反而可以提高执行效  率，所以，如果是以FastCGI来执行PHP，建议选择Non Thread Safe版本。</p>
<p><span style="color: red;">我们使用IIS+FastCGI方式配置服务器环境，所以使用Non Thread  Safe版本。</span></p>
<p>了解了如何选择PHP版本，下面开始我们的IIS+PHP5.3+MySQL5.1+Gzip的配置过程</p>
<p><span style="font-family: 黑体;"><span style="font-size: x-large;"><span style="color: blue;">第一步：手工配置PHP5.3</span></span></span><br />
下载目前为止最新版的PHP5.3.2</p>
<p>因为手工配置更灵活且更能了解细节，所以我们介绍手工配置PHP，所以选择下载zip文件：php-5.3.2-nts-Win32-VC9-x86.zip。<br />
<img src="http://vegirl.com/siteres/ifpmg/phpdown.jpg" border="0" alt="" width="429" height="241" /></p>
<p>1、解压php-5.3.2-nts-Win32-VC9-x86.zip至安装目录，这里是C:\<br />
<img src="http://vegirl.com/siteres/ifpmg/php01.jpg" border="0" alt="" width="411" height="364" /></p>
<p>2、打开php-5.3.2-nts-Win32-VC9-x86，建立php.ini文件<br />
复制一个新的php.ini-development文件，并将文件名改为phi.ini。<br />
如下图<br />
<img src="http://vegirl.com/siteres/ifpmg/php02.jpg" border="0" alt="" width="519" height="243" /></p>
<p>3、打开php.ini文件，修改extension_dir的值<br />
<img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/php03.jpg" border="0" alt="" width="600" height="260" /></p>
<p>修改data.timezone的值<br />
<img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/php04.jpg" border="0" alt="" width="600" height="244" /></p>
<p>选择启用模块：将用到的模块前的;去掉，注意启用php_exif.dll时，必需将其放在mbstring后面，即将php_exif.dll剪切到php_mbstring.dll后面。<br />
<img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/php05.jpg" border="0" alt="" width="600" height="404" /></p>
<p>配置FastCGI模式时，将cgi.force_redirect设置为0，将cgi.rfc2616_headers和fastcgi.impersonate设置为1。<br />
<img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/php06.jpg" border="0" alt="" width="600" height="435" /></p>
<p>稍候我们会使用iProber探针来检测php环境，所以这里必须开启short_open_tag =  On，否则，会出现“iProber.php on line 910”错误。<br />
<img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/php07.jpg" border="0" alt="" width="600" height="258" /></p>
<p>至此，php部分配置完毕。下面我们来在IIS里添加对php的支持，当然，我们采用的FastCGI方式。</p>
<p><span style="font-family: 黑体;"><span style="font-size: x-large;"><span style="color: blue;">第二步：配置IIS的FastCGI模块</span></span></span><br />
为IIS增加FastCGI模块有两种方式，一种是直接下载FastCGI  Extension文件，另一种是使用微软的“web平台安装程序”，在这里我们介绍后者。</p>
<p>第一种方式中FastCGI Extension  文件的名称和下载地址为：<br />
文件名：FastCGI Extension 1.5 for IIS 6.0 and IIS 5.1 &#8211; RC  (x86)<br />
地址：</span><a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;i=1877&amp;g=6" target="_blank"><span style="font-size: medium;">http://www.iis.net/downloads/default.aspx?tabid=34&amp;i=1877&amp;g=6</span></a><br />
<span style="font-size: medium;"><br />
</span><br />
<span style="font-size: medium;"><span style="font-family: 宋体;"><span>该安装程序需要</span></span><span><span style="font-family: Times New Roman;">.net 2.0</span></span><span style="font-family: 宋体;"><span>支持，请确认已经安装</span></span><span><span style="font-family: Times New Roman;">.net  Framework2.0</span></span><span style="font-family: 宋体;"><span>。</span></span><br />
</span><br />
<span style="font-size: medium;">下面我们来介绍使用微软的“web平台安装程序”来配置FastCGI。</span><br />
<span style="font-size: medium;"><br />
1、  FastCGI第一步：打开微软的“web平台安装程序”，网址是：<br />
</span><a href="http://www.microsoft.com/web/gallery/install.aspx?appid=fastcgiiis6" target="_blank"><span style="font-size: medium;">http://www.microsoft.com/web/gallery/install.aspx?appid=fastcgiiis6</span></a><br />
<span style="font-size: medium;">打开该网址单击下面红框内的按钮，进入下一步。</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/fastcgi01.jpg" border="0" alt="" width="600" height="388" /></span></p>
<p><span style="font-size: medium;"></p>
<p>在弹出的对话框里，单击运行。<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/fastcgi02.jpg" border="0" alt="" width="600" height="332" /></span></p>
<p><span style="font-size: medium;"></p>
<p>弹出安全警告对话框，再次单击运行。<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/fastcgi03.jpg" border="0" alt="" width="600" height="359" /></span></p>
<p><span style="font-size: medium;"></p>
<p>接下来是下载web安装程序对话框<br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/fastcgi04.jpg" border="0" alt="" width="412" height="309" /></span></p>
<p><span style="font-size: medium;"></p>
<p>下载完安装程序后是加载web平台<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/fastcgi05.jpg" border="0" alt="" width="600" height="441" /></span></p>
<p><span style="font-size: medium;"></p>
<p>加载完后，弹出FastCGI安装程序对话框，单击安装继续。<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/fastcgi06.jpg" border="0" alt="" width="600" height="442" /></span></p>
<p><span style="font-size: medium;"></p>
<p>接下来是同意条款，单击我接受<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/fastcgi07.jpg" border="0" alt="" width="600" height="440" /></span></p>
<p><span style="font-size: medium;"></p>
<p>正式进入安装，由于文件较小，安装过程非常迅速。<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/fastcgi08.jpg" border="0" alt="" width="600" height="441" /></span></p>
<p><span style="font-size: medium;"></p>
<p>稍候即完成安装！<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/fastcgi09.jpg" border="0" alt="" width="600" height="441" /></span></p>
<p><span style="font-size: medium;"></p>
<p>最后，单击退出并关闭IE<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/fastcgi10.jpg" border="0" alt="" width="600" height="440" /></span></p>
<p><span style="font-size: medium;"></p>
<p>2、  下面在IIS服务里面进行配置，在IIS里右击“网站”节点，然后单击属性，弹出属性对话框。如图<br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/iis01.jpg" border="0" alt="" width="551" height="544" /></span></p>
<p><span style="font-size: medium;"></p>
<p>单击“主目录”选项卡，然后单击“配置”按钮<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/iis02.jpg" border="0" alt="" width="600" height="428" /></span></p>
<p><span style="font-size: medium;"></p>
<p>单击添加，添加一个新的ISAPI项<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/iis03.jpg" border="0" alt="" width="600" height="422" /></span></p>
<p><span style="font-size: medium;"></p>
<p>在C:\window\system32\inetsrv目录下，选中fcgiext.dll<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/iis04.jpg" border="0" alt="" width="600" height="480" /></span></p>
<p><span style="font-size: medium;"></p>
<p>注意，这里别忘了添加.php扩展名<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/iis05.jpg" border="0" alt="" width="600" height="421" /></span></p>
<p><span style="font-size: medium;"></p>
<p>在C:\windows\system32\inetsrv文件夹中，找到fcgiext.ini文件，并打开<br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/iis06.jpg" border="0" alt="" width="593" height="289" /></span></p>
<p><span style="font-size: medium;"></p>
<p>在fcgiext.ini文件底部添加如下配置信息：</p>
<p><span style="color: green;">[Types]<br />
php =  PHP<br />
[PHP]<br />
ExePath=C:\php-5.3.2-nts-Win32-VC9-x86\php-cgi.exe</span><br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/iis07.jpg" border="0" alt="" width="600" height="410" /></span></p>
<p><span style="font-size: medium;"></p>
<p>至此，FastCGI配置完成，下面我们来测试下是否配置正确，将iProber探针程序复制到web目录<br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/iis08.jpg" border="0" alt="" width="592" height="272" /></span></p>
<p><span style="font-size: medium;"></p>
<p>在浏览器输入：</span><a href="http://127.0.0.1/i/iProber.php" target="_blank"><span style="font-size: medium;">http://127.0.0.1/i/iProber.php</span></a><span style="font-size: medium;"> ，输出如下图：</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/iis09.jpg" border="0" alt="" width="600" height="410" /></span></p>
<p><span style="font-size: medium;"></p>
<p>我们看到以下信息<br />
<span style="color: green;">PHP运行方式  CGI-FCGI<br />
PHP版本  5.3.2</span><br />
说明IIS+PHP的FastCGI方式配置成功！<br />
注意，如果出现以下错误信息<br />
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝<br />
<span style="color: green;">Error Details:<br />
Error Number: 14001 (0x800736b1).<br />
Error  Description: 由于应用程序配置不正确，应用程序未能启动。重新安装应用程序可能会纠正这个问题。<br />
HTTP Error 500 &#8211; Server  Error.<br />
Internet Information Services  (IIS)</span><br />
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝<br />
则是没有安装VC9运行库即VISUAL C++  2008，<br />
Microsoft Visual C++ 2008 Redistributable Package  (x86)下载地址：<br />
</span><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&amp;displaylang=zh-cn" target="_blank"><span style="font-size: medium;">http://www.microsoft.com/downloads/details.aspx?FamilyID=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&amp;displaylang=zh-cn</span></a><br />
<a href="http://download.microsoft.com/download/7/5/0/7502f4e9-1f90-4895-9259-1bde67b8b9a1/vcredist_x86.exe" target="_blank"><span style="font-size: medium;">http://download.microsoft.com/download/7/5/0/7502f4e9-1f90-4895-9259-1bde67b8b9a1/vcredist_x86.exe</span></a></p>
<p><span style="font-size: medium;"><span style="font-family: 黑体;"><span style="font-size: x-large;"><span style="color: blue;">第三步：在IIS上启用Gzip压缩</span></span></span><br />
关于Gzip的作用，这里就不再讨论了，大家可以查查资料<br />
1、  启用GZip第一步：右击“网站”，然后单击“属性”，单击“服务”选项卡，选中红框内的两项，然后单击“确定”。</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/gzip01.jpg" border="0" alt="" width="600" height="392" /></span></p>
<p><span style="font-size: medium;"></p>
<p>2、  右击IIS下面的Web服务扩展节点，再单击“添加一个新的Web服务扩展”，如下图<br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/gzip02.jpg" border="0" alt="" width="526" height="433" /></span></p>
<p><span style="font-size: medium;"></p>
<p>添加扩展名为“HTTP  Compression”的扩展，注意gzip.dll所在的目录为：C:\windows\system32\inetsrv\gzip.dll<br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/gzip03.jpg" border="0" alt="" width="459" height="374" /></span></p>
<p><span style="font-size: medium;"></p>
<p>在IIS的Web服务扩展里，选中HTTP  Compression，然后在左侧单击允许。<br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/gzip04.jpg" border="0" alt="" width="597" height="383" /></span></p>
<p><span style="font-size: medium;"></p>
<p>3、设置Gzip参数<br />
设置Gzip需要手工修改C:\windows\system32\inetsrv目录下的MetaBase.xml文件，MetaBase.xml对于IIS的运行非常重要，若被破坏轻则IIS不能正常运行，重则可导致重装系统，所以修改这个文件之前一定要做好备份，下图中名为MetaBase_backup.xml的文件就是一个备份。<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/gzip05.jpg" border="0" alt="" width="600" height="352" /></span></p>
<p><span style="font-size: medium;"></p>
<p>下面设置deflate及gzip的具体参数：<br />
设置deflate的压缩参数，其中主要包括文件扩展名，脚本文件扩展名，压缩比例，需要说明的是，这里压缩比例推荐设置为1，我们稍候讨论哪个压缩比最合适。<br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/gzip06.jpg" border="0" alt="" width="595" height="338" /></span></p>
<p><span style="font-size: medium;"></p>
<p>设置gzip的压缩参数，其中主要包括文件扩展名，脚本文件扩展名，压缩比例，需要说明的是，这里压缩比例仍然推荐设置为1。<br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/gzip07.jpg" border="0" alt="" width="575" height="336" /></span></p>
<p><span style="font-size: medium;"></p>
<p>配置完成后，启动IIS，使设置生效<br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/gzip08.jpg" border="0" alt="" width="506" height="410" /></span></p>
<p><span style="font-size: medium;"></p>
<p>4、如果不想停止IIS而直接编辑MetaBase.xml文件，则按下图设置：<br />
在若编辑MetaBase.xml里不想停止IIS，则在IIS节点上，注意是IIS，不是网站，在IIS上右击，单击“属性”<br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/gzip09.jpg" border="0" alt="" width="474" height="465" /></span></p>
<p><span style="font-size: medium;"></p>
<p>选中“允许直接编辑配置数据库”这一项，可不停止IIS编辑MetaBase.xml文件<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/gzip10.jpg" border="0" alt="" width="600" height="425" /></span></p>
<p><span style="font-size: medium;"></p>
<p>5、检测Gzip压缩是否启用<br />
如果大家的网站发布在Internet上，可以使用许多在线检测工具，很多站长网站上都有提供，如何网站是在自己的电脑上试验，要检测Gzip启用情况，需要一些能够抓取HTTP头信息的软件，这里推荐使用HttpAnalyzer  V4，下载这个软件后，则可清晰的看到Gzip的作用。<br />
我们先关闭Gzip，看年没有启用Gzip压缩时的HTTP头信息截图：<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/gzip11.jpg" border="0" alt="" width="600" height="311" /></span></p>
<p><span style="font-size: medium;"></p>
<p>可以看到，上图中的 Compression  Saving显示为0，我们启用Gzip压缩，再来看一下HTTP头信息情况：<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/gzip12.jpg" border="0" alt="" width="600" height="308" /></span></p>
<p><span style="font-size: medium;"></p>
<p>上图中可以看到，Content-Encoding显示为gzip，右侧Compression  Saving即压缩率显示为73.29%，说明压缩还是很有效的。<br />
用这个软件大家也可以测试一下自己网站的压缩率。<br />
6、有关压缩率的设定<br />
根据官方的测试数据，200KB  的网页依据不同 gzip 等级的压缩比例为<br />
<span style="color: green;">Gzip level 1  0.593<br />
Gzip level 6  (预设)  0.586<br />
Gzip level 9  0.585</span><br />
由此可知，大于 1  以后的压缩效益是很低的，可官方说法，这会消耗服务器资源，因此他们强烈建议设定成 1，gzip 预设是 6。<br />
用某论坛的实际测试结果如下：<br />
<span style="color: green;">level 9 : 88.7% 压缩比<br />
level 1 : 86.7%  压缩比</span><br />
用我自己的网站测试数据如下<br />
Level1时的压缩比为62.93%，在Level9时的压缩比为64.30%，可以看到Level1和Level9基本相差不大。<br />
<img src="http://vegirl.com/siteres/ifpmg/gzip13.jpg" border="0" alt="" width="269" height="338" /></p>
<p><img src="http://vegirl.com/siteres/ifpmg/gzip14.jpg" border="0" alt="" width="260" height="339" /></p>
<p>所以我是建议用 1 就好，用 9 对服务器负载会重，人少没感觉，人一多就会服务器负载就重多了，而且设成 1 和 9  压缩比其实差不了多少。</p>
<p><span style="font-family: 黑体;"><span style="font-size: x-large;"><span style="color: blue;">第四步：安装MySQL5.1</span></span></span><br />
我们这里介绍的是MySQL5.1.48版本。<br />
MySQL的下载地址在本篇开头已经给出。<br />
关于MySQL安装比较简单，这里只给出截图，不再详述<br />
</span></p>
<p><span style="font-size: medium;"><img onclick="zoom(this)" src="http://vegirl.com/siteres/ifpmg/mysql00.jpg" border="0" alt="" width="600" height="300" /></span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql01.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql02.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql03.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql04.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql05.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql06.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql07.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql08.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql09.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql10.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql11.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql12.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql13.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql14.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql15.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql16.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql17.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql18.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql19.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
</span></p>
<p><span style="font-size: medium;"><img src="http://vegirl.com/siteres/ifpmg/mysql20.jpg" border="0" alt="" width="506" height="379" /> </span></p>
<p><span style="font-size: medium;"><br />
由于ZendOptimizer到现在也没有出用于php5.3的版本，我们也就没法安装了。<br />
官方讨论区说，是因为php5.3的改动太大，使ZendGard也要发生很大变化，所以ZendOptimizer要等Gard完善后才能出来。</p>
<p><span style="font-family: 黑体;"><span style="font-size: x-large;"><span style="color: blue;">至此，IIS+FastCGI+PHP5.3+MySQL+Gzip完整配置完成。</span></span></span><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.secblog.cn/server/809.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在IIS6上如何使用FastCGI,如何配置php的fastcgi模式</title>
		<link>http://www.secblog.cn/server/807.html</link>
		<comments>http://www.secblog.cn/server/807.html#comments</comments>
		<pubDate>Wed, 11 Aug 2010 07:16:28 +0000</pubDate>
		<dc:creator>豬頭濱</dc:creator>
				<category><![CDATA[环境搭建]]></category>

		<guid isPermaLink="false">http://www.secblog.cn/?p=807</guid>
		<description><![CDATA[这应该是目前Win上性能最好的PHP支持方法 1、下载并安装FastCGI Extension for Internet Information Services 6.0 http://www.microsoft.com/downloads/details.aspx?FamilyID=2d481579-9a7c-4632-b6e6-dee9097f9dc5&#38;displaylang=en 2、下载php-5.2.5-nts-Win32.zip http://www.php.net/downloads 解压到C:\PHP目录下 要确保IIS启动帐号对C:\PHP\*有读取执行权限 3、注册PHP到FastCGI cscript fcgiconfig.js -add -section:”PHP” -extension:php -path:”C:\PHP\php-cgi.exe” 4、做一些性能和安全设置 C:\PHP\php.ini-recommended重命名为为C:\PHP\php.ini 打开C:\PHP\php.ini，修改： extension_dir = “C:\PHP\ext” fastcgi.impersonate = 1 cgi.fix_pathinfo=1 cgi.force_redirect = 0 执行： cscript fcgiconfig.js -set -section:”PHP” -InstanceMaxRequests:10000 cscript fcgiconfig.js -set -section:”PHP” -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000 以上两项设置最大池和响应连接数，可以根据自己的硬件配置、使用情况修改]]></description>
			<content:encoded><![CDATA[<dl>
<dd>这应该是目前Win上性能最好的PHP支持方法</p>
<p>1、下载并安装FastCGI Extension for Internet  Information Services 6.0</p>
<p><a rel="external" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2d481579-9a7c-4632-b6e6-dee9097f9dc5" target="_blank">http://www.microsoft.com/downloads/details.aspx?FamilyID=2d481579-9a7c-4632-b6e6-dee9097f9dc5</a>&amp;displaylang=en</p>
<p>2、下载php-5.2.5-nts-Win32.zip</p>
<p><a rel="external" href="http://www.php.net/downloads" target="_blank">http://www.php.net/downloads</a></p>
<p>解压到C:\PHP目录下<br />
要确保IIS启动帐号对C:\PHP\*有读取执行权限</p>
<p>3、注册PHP到FastCGI<br />
cscript  fcgiconfig.js -add -section:”PHP” -extension:php  -path:”C:\PHP\php-cgi.exe”</p>
<p>4、做一些性能和安全设置<br />
C:\PHP\php.ini-recommended重命名为为C:\PHP\php.ini<br />
打开C:\PHP\php.ini，修改：<br />
extension_dir  = “C:\PHP\ext”<br />
fastcgi.impersonate =  1<br />
cgi.fix_pathinfo=1<br />
cgi.force_redirect = 0<br />
执行：<br />
cscript  fcgiconfig.js -set -section:”PHP” -InstanceMaxRequests:10000<br />
cscript  fcgiconfig.js -set -section:”PHP”  -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000<br />
以上两项设置最大池和响应连接数，可以根据自己的硬件配置、使用情况修改 </dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://www.secblog.cn/server/807.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IIS7下以FastCGI模式运行PHP的配置方法</title>
		<link>http://www.secblog.cn/server/805.html</link>
		<comments>http://www.secblog.cn/server/805.html#comments</comments>
		<pubDate>Wed, 11 Aug 2010 07:14:17 +0000</pubDate>
		<dc:creator>豬頭濱</dc:creator>
				<category><![CDATA[环境搭建]]></category>

		<guid isPermaLink="false">http://www.secblog.cn/?p=805</guid>
		<description><![CDATA[配置完后，发现“IIS Worker Process 已停止工作”的错误还是存在，而且会在随机时间内弹出，很是令人不爽，之前有看过一篇文章，提到以FastCGI方式运行PHP会快很多，正好也来试一下这种方式还会不会出现这种错误，配置方法如下： 打开IIS，单击一个网站，在右边功能视图内双击“处理程序映射”－》“添加模块映射”，请求路径为*.php，模块为FastCgiModule，可执行文件为PHP目录中的php-cgi.exe，名字为FastCGI-PHP。 然后把PHP目录中的php.ini-dist改名为php.ini，并打开文件做如下修改： extension_dir = “d:\php\ext” cgi.force_redirect = 0 fastcgi.impersonate = 1; extension=php_gd2.dll extension=php_mbstring.dll extension=php_mcrypt.dll extension=php_mysql.dll extension=php_pdo.dll extension=php_pdo_mysql.dll session.save_path = “d:\php\tmp” 最后运行cmd，输入iisreset，看看效果吧。:) © 唯枫志 (转载请写明原文链接)。 注:这个需要安装iis7的时候选中cgi模块 来源URL：http://junnan.org/blog/?p=70]]></description>
			<content:encoded><![CDATA[<dl>
<dd>配置完后，发现“IIS Worker Process  已停止工作”的错误还是存在，而且会在随机时间内弹出，很是令人不爽，之前有看过一篇文章，提到以FastCGI方式运行PHP会快很多，正好也来试一下这种方式还会不会出现这种错误，配置方法如下：</p>
<p>打开IIS，单击一个网站，在右边功能视图内双击“处理程序映射”－》“添加模块映射”，请求路径为*.php，模块为FastCgiModule，可执行文件为PHP目录中的php-cgi.exe，名字为FastCGI-PHP。</p>
<p>然后把PHP目录中的php.ini-dist改名为php.ini，并打开文件做如下修改：<br />
extension_dir =  “d:\php\ext”<br />
cgi.force_redirect = 0<br />
fastcgi.impersonate =  1;<br />
extension=php_gd2.dll<br />
extension=php_mbstring.dll<br />
extension=php_mcrypt.dll<br />
extension=php_mysql.dll<br />
extension=php_pdo.dll<br />
extension=php_pdo_mysql.dll<br />
session.save_path  = “d:\php\tmp”</p>
<p>最后运行cmd，输入iisreset，看看效果吧。:)</p>
<div>© 唯枫志 (转载请写明原文链接)。</div>
<div>注:这个需要安装iis7的时候选中cgi模块</div>
</dd>
<dd><strong>来源URL：</strong><a href="http://junnan.org/blog/?p=70" target="_blank">http://junnan.org/blog/?p=70</a> </dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://www.secblog.cn/server/805.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>转载：iis6和php-cgi进程问题解决办法</title>
		<link>http://www.secblog.cn/server/803.html</link>
		<comments>http://www.secblog.cn/server/803.html#comments</comments>
		<pubDate>Wed, 11 Aug 2010 07:13:15 +0000</pubDate>
		<dc:creator>豬頭濱</dc:creator>
				<category><![CDATA[环境搭建]]></category>

		<guid isPermaLink="false">http://www.secblog.cn/?p=803</guid>
		<description><![CDATA[今天给windows server 2003 上的iis6添加了php-cgi的扩展,下面分享一下这之间的问题和经验 首先来说明iis6支持php解析的三种方式 1.isapi 这是iis应该首选的方式,速度极快,占用资源极少,配置极其方便灵活 但是长久(其实isapi出来不算久,所以问题比较多,需要完善)以来,php对于isapi的支持都是运行时间久了,会锁死iis,这个造成服务器不稳定,不过其实这不算什么,因为我们还可以通过设置iis的应用程序池来最大限度的保证稳定 不过这其实不是我不愿意使用isapi的原因,如果不是因为isapi模式需要将php.ini放置于系统盘windows,我是首选isapi模式的,方便,省资源,负载好,速度快都是选择的理由 只可惜啊,为什么一定要将php.ini放在系统盘windows目录呢?不能跟随php目录吗? 这点希望微软和php能够早日协商解决这个问题,呵呵,不过这也的确是个无关紧要的小问题,或者本来就应该是这样,因为我们是isapi嘛~ 这种方式的配置方法很简单 可以参阅这篇文章:IIS6.0+PHP+ASP+MYSQL优化配置 2.cgi 这个模式稳定是没什么说的,但是很占资源,使用起来,可以明显地感觉到速度相当慢,而且极耗资源,硬盘狂闪,不知道是不是我的配置有问题,但是同样的配置,在isapi模式下和下面要讲的fast-cgi模式下都很快,可以用急速来形容 而且,我的php-cgi.exe进程当浏览php文件的时候,它就出现占用10m左右内存,然后当页面完全载入,也就是php解析完毕的时候,他就自动关闭了,我不知道这是我的配置文件没有配置对,还是就是这样,不知道起他朋友是不是这个情况,当然这个情况只出现在2003 iis6的cgi模式下,我的2008 iis7的cgi模式一切正常,php-cgi.exe会驻留内存知道很久不使用才会被回收. 正是因为这样,浏览php时,你就看任务管理器里的php-cgi.exe进程就像是坐电梯一样,一会飞速上升一会飞速下降直至消失 登陆个phpmyadmin那个时间真是,以为我服务器是286呢 配置cgi,也可以参阅这篇文章:IIS6.0+PHP+ASP+MYSQL优化配置 iis7的isapi和cgi模式配置方法和iis6大同小异可以参阅这篇文章:配置iis7+php+mysql+zend+gd+asp+.net+access+jsp 本文为原创,可以随意转载,但是请保留此信息和链接: iis6和php-cgi进程问题解决办法 @ 网络超市博摘 3.fast-cgi 这个模式是后来出现的,iis7直接集成,名字叫fast-cgi模块(组件) 但是iis6原生是没有的,不过目前微软已经提供免费下载了 地址:FastCGI Extension for Internet Information Services 6.0 下载以后安装,然后参考这篇文章进行配置:在IIS6上如何使用FastCGI,如何配置php的fastcgi模式 实际上安装好以后完全不用那么麻烦,只需用记事本打开fcgiext.ini文件 在最后面[Types]下面加入 PHP=D:\PHP5\php-cgi.exe [D:\PHP5\php-cgi.exe] QueueLength=1000 MaxInstances=4 InstanceTimeout=30 InstanceMaxRequests=1000 就可以了,其中的路径根据自己的实际情况修改 那四个参数根据自己配置修改,也完全可以删掉,使用默认值 最后就成为这样 [Types] PHP=D:\PHP5\php-cgi.exe [D:\PHP5\php-cgi.exe] 保存文件,然后在使用php的网站上右键-属性-主目录-配置(就是打开父目录的地方)-isapi扩展缓存(第一个选项卡)里面添加 以上位置是我记忆中的,和实际可能有些许出入,请大家自行分辨 路径:%windir%\system32\inetsrv\fcgiext.dll 扩展名:.php [...]]]></description>
			<content:encoded><![CDATA[<p>今天给windows server 2003  上的iis6添加了php-cgi的扩展,下面分享一下这之间的问题和经验<br />
首先来说明iis6支持php解析的三种方式<br />
1.isapi<br />
这是iis应该首选的方式,速度极快,占用资源极少,配置极其方便灵活<br />
但是长久(其实isapi出来不算久,所以问题比较多,需要完善)以来,php对于isapi的支持都是运行时间久了,会锁死iis,这个造成服务器不稳定,不过其实这不算什么,因为我们还可以通过设置iis的应用程序池来最大限度的保证稳定<br />
不过这其实不是我不愿意使用isapi的原因,如果不是因为isapi模式需要将php.ini放置于系统盘windows,我是首选isapi模式的,方便,省资源,负载好,速度快都是选择的理由<br />
只可惜啊,为什么一定要将php.ini放在系统盘windows目录呢?不能跟随php目录吗?<br />
这点希望微软和php能够早日协商解决这个问题,呵呵,不过这也的确是个无关紧要的小问题,或者本来就应该是这样,因为我们是isapi嘛~<br />
这种方式的配置方法很简单<br />
可以参阅这篇文章:<a href="http://www.netmkt.cn/get/user0/397/html/5746.html" target="_blank"><span style="color: #ff0000;">IIS6.0+PHP+ASP+MYSQL优化配置</span></a></p>
<p>2.cgi<br />
这个模式稳定是没什么说的,但是很占资源,使用起来,可以明显地感觉到速度相当慢,而且极耗资源,硬盘狂闪,不知道是不是我的配置有问题,但是同样的配置,在isapi模式下和下面要讲的fast-cgi模式下都很快,可以用急速来形容<br />
而且,我的php-cgi.exe进程当浏览php文件的时候,它就出现占用10m左右内存,然后当页面完全载入,也就是php解析完毕的时候,他就自动关闭了,我不知道这是我的配置文件没有配置对,还是就是这样,不知道起他朋友是不是这个情况,当然这个情况只出现在2003  iis6的cgi模式下,我的2008  iis7的cgi模式一切正常,php-cgi.exe会驻留内存知道很久不使用才会被回收.<br />
正是因为这样,浏览php时,你就看任务管理器里的php-cgi.exe进程就像是坐电梯一样,一会飞速上升一会飞速下降直至消失<br />
登陆个phpmyadmin那个时间真是,以为我服务器是286呢<br />
配置cgi,也可以参阅这篇文章:<a href="http://www.netmkt.cn/get/user0/397/html/5746.html" target="_blank"><span style="color: #ff0000;">IIS6.0+PHP+ASP+MYSQL优化配置</span></a><br />
iis7的isapi和cgi模式配置方法和iis6大同小异可以参阅这篇文章:<a href="http://www.netmkt.cn/get/user0/397/html/4714.html" target="_blank"><span style="color: #ff0000;">配置iis7+php+mysql+zend+gd+asp+.net+access+jsp</span></a></p>
<p>本文为原创,可以随意转载,但是请保留此信息和链接:<br />
<a href="http://www.netmkt.cn/get/user0/397/html/5752.html" target="_blank"><span style="color: #ff0000;">iis6和php-cgi进程问题解决办法</span></a> @ <a href="http://www.netmkt.cn/" target="_blank"><span style="color: #800080;">网络超市博摘</span></a></p>
<p>3.fast-cgi<br />
这个模式是后来出现的,iis7直接集成,名字叫fast-cgi模块(组件)<br />
但是iis6原生是没有的,不过目前微软已经提供免费下载了<br />
地址:<a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;g=6&amp;i=1521" target="_blank"><span style="color: #ff0000;">FastCGI Extension for Internet Information  Services 6.0</span></a><br />
下载以后安装,然后参考这篇文章进行配置:<a href="http://www.netmkt.cn/get/user0/397/html/5749.html" target="_blank"><span style="color: #ff0000;">在IIS6上如何使用FastCGI,如何配置php的fastcgi模式</span></a><br />
实际上安装好以后完全不用那么麻烦,只需用记事本打开fcgiext.ini文件<br />
在最后面[Types]下面加入</p>
<p>PHP=D:\PHP5\php-cgi.exe<br />
[D:\PHP5\php-cgi.exe]<br />
QueueLength=1000<br />
MaxInstances=4<br />
InstanceTimeout=30<br />
InstanceMaxRequests=1000<br />
就可以了,其中的路径根据自己的实际情况修改<br />
那四个参数根据自己配置修改,也完全可以删掉,使用默认值<br />
最后就成为这样<br />
[Types]<br />
PHP=D:\PHP5\php-cgi.exe<br />
[D:\PHP5\php-cgi.exe]</p>
<p>保存文件,然后在使用php的网站上右键-属性-主目录-配置(就是打开父目录的地方)-isapi扩展缓存(第一个选项卡)里面添加<br />
以上位置是我记忆中的,和实际可能有些许出入,请大家自行分辨<br />
路径:%windir%\system32\inetsrv\fcgiext.dll<br />
扩展名:.php<br />
如果以前添加过php扩展的,可以修改或者删除重建<br />
ok,重起iis,看下效果<br />
速度也是急速,而且也很稳定,phpinfo和phpmyadmin一下就好,比cgi模式快了何止2倍,和isapi模式比不出来,除非专门测试,否则我感觉两个都很快<br />
不过和isapi模式相比除了iis应用程序池w3wp.exe以外还会打开一个php-cgi.exe进程,和cgi模式相比,这个php-cgi.exe进程不会立刻关闭,而是长时间没有用的时候自动回收<br />
有些人可能会出现2个php-cgi进程或者更多,这大概是因为你有多个网站在使用php,这点和cgi模式是一样的</p>
]]></content:encoded>
			<wfw:commentRss>http://www.secblog.cn/server/803.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nginx 0.8.x + PHP 5.2.13（FastCGI）</title>
		<link>http://www.secblog.cn/server/586.html</link>
		<comments>http://www.secblog.cn/server/586.html#comments</comments>
		<pubDate>Sun, 01 Aug 2010 06:07:37 +0000</pubDate>
		<dc:creator>豬頭濱</dc:creator>
				<category><![CDATA[环境搭建]]></category>

		<guid isPermaLink="false">http://www.secblog.cn/?p=586</guid>
		<description><![CDATA[[文章作者：张宴 本文版本：v6.3 最后修改：2010.07.26 转载请注明原文链接：http://blog.s135.com/nginx_php_v6/] 前言：本文是我撰写的关于搭建“Nginx + PHP（FastCGI）”Web服务器的第6篇文章。本系列文章作为国内最早详细介绍 Nginx + PHP 安装、配置、使用的资料之一，为推动 Nginx 在国内的发展产生了积极的作用。本文可能不断更新小版本，请记住原文链接“http://blog.s135.com/nginx_php_v6/”，获取最新内容。第6篇文章主要介绍了Nginx 0.8.x新的平滑重启方式，将PHP升级到了5.2.14，修正了PEAR问题。另将MySQL 5.1.x升级到了5.5.x系列，配置文件变更较大。 链接：《2007年9月的第1版》、《2007年12月的第2版》、《2008年6月的第3版》、《2008年8月的第4版》、《2009年5月的第5版》 Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器，也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的，它已经在该站点运行超过三年了。Igor 将源代码以类BSD许可证的形式发布。 Nginx 超越 Apache 的高性能和稳定性，使得国内使用 Nginx 作为 Web 服务器的网站也越来越多，其中包括新浪博客、新浪播客、网易新闻、腾讯网、搜狐博客等门户网站频道，六间房、56.com等视频分享网站，Discuz!官方论坛、水木社区等知名论坛，盛大在线、金山逍遥网等网络游戏网站，豆瓣、人人网、YUPOO相册、金山爱词霸、迅雷在线等新兴Web 2.0网站。 Nginx 的官方中文维基：http://wiki.nginx.org/NginxChs 在高并发连接的情况下，Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果，Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3万以上的并发连接数，相当于同等环境下Apache的10倍。 根据我的经验，4GB内存的服务器+Apache（prefork模式）一般只能处理3000个并发连接，因为它们将占用3GB以上的内存，还得为系统 预留1GB的内存。我曾经就有两台Apache服务器，因为在配置文件中设置的MaxClients为4000，当Apache并发连接数达到3800 时，导致服务器内存和Swap空间用满而崩溃。 而这台 Nginx [...]]]></description>
			<content:encoded><![CDATA[<p>[文章作者：张宴 本文版本：v6.3 最后修改：2010.07.26 转载请注明原文链接：<a href="http://blog.s135.com/nginx_php_v6/" target="_blank">http://blog.s135.com/nginx_php_v6/</a>]</p>
<p>前言：本文是我撰写的关于搭建“Nginx + PHP（FastCGI）”Web服务器的第6篇文章。本系列文章作为国内最早详细介绍 Nginx +  PHP 安装、配置、使用的资料之一，为推动 Nginx 在国内的发展产生了积极的作用。本文可能不断更新小版本，请记住原文链接“<a href="http://blog.s135.com/nginx_php_v6/" target="_blank">http://blog.s135.com/nginx_php_v6/</a>”，获取最新内容。第6篇文章主要介绍了Nginx 0.8.x新的平滑重启方式，将PHP升级到了5.2.14，修正了PEAR问题。另将MySQL 5.1.x升级到了5.5.x系列，配置文件变更较大。</p>
<p>链接：《<a href="http://blog.s135.com/post/297/" target="_blank">2007年9月的第1版</a>》、《<a href="http://blog.s135.com/post/314/" target="_blank">2007年12月的第2版</a>》、《<a href="http://blog.s135.com/post/351/" target="_blank">2008年6月的第3版</a>》、《<a href="http://blog.s135.com/nginx_php_v4/" target="_blank">2008年8月的第4版</a>》、《<a href="http://blog.s135.com/nginx_php_v5/" target="_blank">2009年5月的第5版</a>》</p>
<p><a href="http://blog.s135.com/attachment/200806/nginx.png" target="_blank"><img title="点击在新窗口中浏览此图片" src="http://blog.s135.com/attachment/200806/nginx.png" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<p><a href="http://www.nginx.net/" target="_blank">Nginx</a> (“engine x”) 是一个高性能的 HTTP 和反向代理服务器，也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由  Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的，它已经在该站点运行超过三年了。Igor  将源代码以类BSD许可证的形式发布。</p>
<p>Nginx 超越 Apache 的高性能和稳定性，使得国内使用 Nginx 作为 Web 服务器的网站也越来越多，其中包括<a href="http://blog.sina.com.cn/" target="_blank">新浪博客</a>、<a href="http://v.sina.com.cn/" target="_blank">新浪播客</a>、<a href="http://news.163.com/" target="_blank">网易新闻</a>、<a href="http://www.qq.com/" target="_blank">腾讯网</a>、<a href="http://blog.sohu.com/" target="_blank">搜狐博客</a>等门户网站频道，<a href="http://www.6.cn/" target="_blank">六间房</a>、<a href="http://www.56.com/" target="_blank">56.com</a>等视频分享网站，<a href="http://www.discuz.net/" target="_blank">Discuz!官方论坛</a>、<a href="http://www.newsmth.net/" target="_blank">水木社区</a>等知名论坛，<a href="http://www.sdo.com/" target="_blank">盛大在线</a>、<a href="http://www.xoyo.com/" target="_blank">金山逍遥网</a>等网络游戏网站，<a href="http://www.douban.com/" target="_blank">豆瓣</a>、<a href="http://www.renren.com/" target="_blank">人人网</a>、<a href="http://www.yupoo.com/" target="_blank">YUPOO相册</a>、<a href="http://www.iciba.com/" target="_blank">金山爱词霸</a>、<a href="http://www.xunlei.com/" target="_blank">迅雷在线</a>等新兴Web 2.0网站。</p>
<hr />Nginx 的官方中文维基：<a href="http://wiki.nginx.org/NginxChs" target="_blank">http://wiki.nginx.org/NginxChs</a></p>
<hr />在高并发连接的情况下，Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果，<strong>Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3万以上的并发连接数，相当于同等环境下Apache的10倍</strong>。</p>
<p>根据我的经验，4GB内存的服务器+Apache（prefork模式）一般只能处理3000个并发连接，因为它们将占用3GB以上的内存，还得为系统 预留1GB的内存。我曾经就有两台Apache服务器，因为在配置文件中设置的MaxClients为4000，当Apache并发连接数达到3800 时，导致服务器内存和Swap空间用满而崩溃。</p>
<p>而这台 Nginx 0.8.46 + PHP 5.2.14 (FastCGI)  服务器在3万并发连接下，开启的10个Nginx进程消耗150M内存（15M*10=150M），开启的64个php-cgi进程消耗1280M内存 （20M*64=1280M），加上系统自身消耗的内存，总共消耗不到2GB内存。如果服务器内存较小，完全可以只开启25个php-cgi进程，这样 php-cgi消耗的总内存数才500M。</p>
<p>在3万并发连接下，访问Nginx 0.8.46 + PHP 5.2.14  (FastCGI)  服务器的PHP程序，仍然速度飞快。下图为Nginx的状态监控页面，显示的活动连接数为28457（关于Nginx的监控页配置，会在本文接下来所给出 的Nginx配置文件中写明）：</p>
<p><a href="http://blog.s135.com/attachment/200712/nginx_status.png" target="_blank"><img title="点击在新窗口中浏览此图片" src="http://blog.s135.com/attachment/200712/nginx_status.png" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<p>我生产环境下的两台Nginx + PHP5（FastCGI）服务器，跑多个一般复杂的纯PHP动态程序，单台Nginx + PHP5（FastCGI）服务器跑PHP动态程序的处理能力已经超过“700次请求/秒”，相当于每天可以承受6000万（700*60*60*24=60480000）的访问量（<a href="http://blog.s135.com/read.php/334.htm" target="_blank">更多信息见此</a>），而服务器的系统负载也不高：</p>
<p><a href="http://blog.s135.com/attachment/200803/nginx_php_la.gif" target="_blank"><img title="点击在新窗口中浏览此图片" src="http://blog.s135.com/attachment/200803/nginx_php_la.gif" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<p>2009年9月3日下午2：30，金山游戏《剑侠情缘网络版叁》临时维护1小时（<a href="http://kefu.xoyo.com/gonggao/jx3/2009-09-03/750438.shtml" target="_blank">http://kefu.xoyo.com/gonggao/jx3/2009-09-03/750438.shtml</a>），大量玩家上官网，论坛、评论、客服等动态应用Nginx服务器集群，每台服务器的Nginx活动连接数达到2.8万，这是笔者遇到的Nginx生产环境最高并发值。</p>
<p><a href="http://blog.s135.com/attachment/200909/nginx_c30k.png" target="_blank"><img title="点击在新窗口中浏览此图片" src="http://blog.s135.com/attachment/200909/nginx_c30k.png" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<hr />下面是用100个并发连接分别去压生产环境中同一负载均衡器VIP下、提供相同服务的两台服务器，一台为Nginx，另一台为Apache，Nginx每秒处理的请求数是Apache的两倍多，Nginx服务器的系统负载、CPU使用率远低于Apache：</p>
<p>你可以将连接数开到10000～30000，去压Nginx和Apache上的phpinfo.php，这是用浏览器访问Nginx上的 phpinfo.php一切正常，而访问Apache服务器的phpinfo.php，则是该页无法显示。4G内存的服务器，即使再优化，Apache也 很难在“webbench -c 30000 -t 60 <a href="http://xxx.xxx.xxx.xxx/phpinfo.php" target="_blank">http://xxx.xxx.xxx.xxx/phpinfo.php</a>”的压力情况下正常访问，而调整参数优化后的Nginx可以。</p>
<p>webbench 下载地址：<a href="http://blog.s135.com/post/288/" target="_blank">http://blog.s135.com/post/288/</a></p>
<p>注意：webbench 做压力测试时，该软件自身也会消耗CPU和内存资源，为了测试准确，请将 webbench 安装在别的服务器上。</p>
<p>测试结果：##### Nginx + PHP #####</p>
<div>
<div>引用</div>
<div>[root@localhost webbench-1.5]# webbench -c 100 -t 30 <a href="http://192.168.1.21/phpinfo.php" target="_blank">http://192.168.1.21/phpinfo.php</a><br />
Webbench &#8211; Simple Web Benchmark 1.5<br />
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.</p>
<p>Benchmarking: GET <a href="http://192.168.1.21/phpinfo.php" target="_blank">http://192.168.1.21/phpinfo.php</a><br />
100 clients, running 30 sec.</p>
<p>Speed=102450 pages/min, 16490596 bytes/sec.<br />
Requests: 51225 susceed, 0 failed.</p>
<p>top &#8211; 14:06:13 up 27 days,  2:25,  2 users,  load average: 14.57, 9.89, 6.51<br />
Tasks: 287 total,   4 running, 283 sleeping,   0 stopped,   0 zombie<br />
Cpu(s): 49.9% us,  6.7% sy,  0.0% ni, 41.4% id,  1.1% wa,  0.1% hi,  0.8% si<br />
Mem:   6230016k total,  2959468k used,  3270548k free,   635992k buffers<br />
Swap:  2031608k total,     3696k used,  2027912k free,  1231444k cached</p>
</div>
</div>
<p>测试结果：#####  Apache + PHP #####</p>
<div>
<div>引用</div>
<div>[root@localhost webbench-1.5]# webbench -c 100 -t 30 <a href="http://192.168.1.27/phpinfo.php" target="_blank">http://192.168.1.27/phpinfo.php</a><br />
Webbench &#8211; Simple Web Benchmark 1.5<br />
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.</p>
<p>Benchmarking: GET <a href="http://192.168.1.27/phpinfo.php" target="_blank">http://192.168.1.27/phpinfo.php</a><br />
100 clients, running 30 sec.</p>
<p>Speed=42184 pages/min, 31512914 bytes/sec.<br />
Requests: 21092 susceed, 0 failed.</p>
<p>top &#8211; 14:06:20 up 27 days,  2:13,  2 users,  load average: 62.15, 26.36, 13.42<br />
Tasks: 318 total,   7 running, 310 sleeping,   0 stopped,   1 zombie<br />
Cpu(s): 80.4% us, 10.6% sy,  0.0% ni,  7.9% id,  0.1% wa,  0.1% hi,  0.9% si<br />
Mem:   6230016k total,  3075948k used,  3154068k free,   379896k buffers<br />
Swap:  2031608k total,    12592k used,  2019016k free,  1117868k cached</p>
</div>
</div>
<hr />为什么Nginx的性能要比Apache高得多？这得益于Nginx使用了最新的epoll（Linux  2.6内核）和kqueue（freebsd）网络I/O模型，而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的 Squid、Memcached都采用的是epoll网络I/O模型。</p>
<p>处理大量的连接的读写，Apache所采用的select网络I/O模型非常低效。下面用一个比喻来解析Apache采用的select模型和Nginx采用的epoll模型进行之间的区别：</p>
<p>假设你在大学读书，住的宿舍楼有很多间房间，你的朋友要来找你。select版宿管大妈就会带着你的朋友挨个房间去找，直到找到你为止。而epoll版 宿管大妈会先记下每位同学的房间号，你的朋友来时，只需告诉你的朋友你住在哪个房间即可，不用亲自带着你的朋友满大楼找人。如果来了10000个人，都要 找自己住这栋楼的同学时，select版和epoll版宿管大妈，谁的效率更高，不言自明。同理，在高并发服务器中，轮询I/O是最耗时间的操作之 一，select和epoll的性能谁的性能更高，同样十分明了。</p>
<hr />安装步骤：<br />
（系统要求：Linux 2.6+ 内核，本文中的Linux操作系统为CentOS 5.3，另在RedHat AS4上也安装成功）<br />
<a name="entrymore"></a><br />
<strong>一、获取相关开源程序：</strong><br />
1、【适用CentOS操作系统】利用CentOS Linux系统自带的yum命令安装、升级所需的程序库（RedHat等其他Linux发行版可从安装光盘中找到这些程序库的RPM包，进行安装）：</p>
<div>sudo -s<br />
LANG=C<br />
yum  -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng  libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib  zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses  ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel  libidn libidn-devel openssl openssl-devel openldap openldap-devel  nss_ldap openldap-clients openldap-servers</div>
<p>2、【适用RedHat操作系 统】RedHat等其他Linux发行版可从安装光盘中找到这些程序库的RPM包（事先可通过类似“rpm -qa | grep  libjpeg”的命令查看所需的RPM包是否存在，通常是“xxx-devel”不存在，需要安装）。RedHat可以直接利用CentOS的RPM包 安装，以下是RPM包下载网址：<br />
①、RedHat AS4 &amp; CentOS 4<br />
<a href="http://mirrors.163.com/centos/4/os/i386/CentOS/RPMS/" target="_blank">http://mirrors.163.com/centos/4/os/i386/CentOS/RPMS/</a><br />
<a href="http://mirrors.163.com/centos/4/os/x86_64/CentOS/RPMS/" target="_blank">http://mirrors.163.com/centos/4/os/x86_64/CentOS/RPMS/</a></p>
<p>②、RedHat AS5 &amp; CentOS 5<br />
<a href="http://mirrors.163.com/centos/5/os/i386/CentOS/" target="_blank">http://mirrors.163.com/centos/5/os/i386/CentOS/</a><br />
<a href="http://mirrors.163.com/centos/5/os/x86_64/CentOS/" target="_blank">http://mirrors.163.com/centos/5/os/x86_64/CentOS/</a></p>
<p>③、RPM包搜索网站<br />
<a href="http://rpm.pbone.net/" target="_blank">http://rpm.pbone.net/</a><br />
<a href="http://www.rpmfind.net/" target="_blank">http://www.rpmfind.net/</a></p>
<p>④、RedHat AS4 系统环境，通常情况下缺少的支持包安装：<br />
Ⅰ、i386 系统</p>
<div>wget <a href="http://blog.s135.com/soft/linux/nginx_php/rpm/i386/libjpeg-devel-6b-33.i386.rpm" target="_blank">http://blog.s135.com/soft/linux/nginx_php/rpm/i386/libjpeg-devel-6b-33.i386.rpm</a><br />
rpm -ivh libjpeg-devel-6b-33.i386.rpm<br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/rpm/i386/freetype-devel-2.1.9-1.i386.rpm" target="_blank">http://blog.s135.com/soft/linux/nginx_php/rpm/i386/freetype-devel-2.1.9-1.i386.rpm</a><br />
rpm -ivh freetype-devel-2.1.9-1.i386.rpm<br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/rpm/i386/libpng-devel-1.2.7-1.i386.rpm" target="_blank">http://blog.s135.com/soft/linux/nginx_php/rpm/i386/libpng-devel-1.2.7-1.i386.rpm</a><br />
rpm -ivh libpng-devel-1.2.7-1.i386.rpm</div>
<p>Ⅱ、x86_64 系统</p>
<div>wget <a href="http://blog.s135.com/soft/linux/nginx_php/rpm/x86_64/libjpeg-devel-6b-33.x86_64.rpm" target="_blank">http://blog.s135.com/soft/linux/nginx_php/rpm/x86_64/libjpeg-devel-6b-33.x86_64.rpm</a><br />
rpm -ivh libjpeg-devel-6b-33.x86_64.rpm<br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/rpm/x86_64/freetype-devel-2.1.9-1.x86_64.rpm" target="_blank">http://blog.s135.com/soft/linux/nginx_php/rpm/x86_64/freetype-devel-2.1.9-1.x86_64.rpm</a><br />
rpm -ivh freetype-devel-2.1.9-1.x86_64.rpm<br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/rpm/x86_64/libpng-devel-1.2.7-1.x86_64.rpm" target="_blank">http://blog.s135.com/soft/linux/nginx_php/rpm/x86_64/libpng-devel-1.2.7-1.x86_64.rpm</a><br />
rpm -ivh libpng-devel-1.2.7-1.x86_64.rpm</div>
<p>3、【适用CentOS、RedHat及其它Linux操作系统】下载程序源码包：<br />
本文中提到的所有开源软件为截止到2010年07月26日的最新稳定版。<br />
①、从软件的官方网站下载：</p>
<div>mkdir -p /data0/software<br />
cd /data0/software<br />
wget <a href="http://sysoev.ru/nginx/nginx-0.8.46.tar.gz" target="_blank">http://sysoev.ru/nginx/nginx-0.8.46.tar.gz</a><br />
wget <a href="http://www.php.net/get/php-5.2.14.tar.gz/from/this/mirror" target="_blank">http://www.php.net/get/php-5.2.14.tar.gz/from/this/mirror</a><br />
wget <a href="http://php-fpm.org/downloads/php-5.2.14-fpm-0.5.14.diff.gz" target="_blank">http://php-fpm.org/downloads/php-5.2.14-fpm-0.5.14.diff.gz</a><br />
wget <a href="http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.3-m3.tar.gz/from/http://mysql.he.net/" target="_blank">http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.3-m3.tar.gz/from/http://mysql.he.net/</a><br />
wget <a href="http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz" target="_blank">http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz</a><br />
wget “http://downloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz?modtime=1171868460&amp;big_mirror=0&#8243;<br />
wget “http://downloads.sourceforge.net/mcrypt/mcrypt-2.6.8.tar.gz?modtime=1194463373&amp;big_mirror=0&#8243;<br />
wget <a href="http://pecl.php.net/get/memcache-2.2.5.tgz" target="_blank">http://pecl.php.net/get/memcache-2.2.5.tgz</a><br />
wget “http://downloads.sourceforge.net/mhash/mhash-0.9.9.9.tar.gz?modtime=1175740843&amp;big_mirror=0&#8243;<br />
wget <a href="ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.10.tar.gz" target="_blank">ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.10.tar.gz</a><br />
wget <a href="http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2" target="_blank">http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2</a><br />
wget <a href="http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz" target="_blank">http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/imagick/ImageMagick.tar.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/imagick/ImageMagick.tar.gz</a><br />
wget <a href="http://pecl.php.net/get/imagick-2.3.0.tgz" target="_blank">http://pecl.php.net/get/imagick-2.3.0.tgz</a></div>
<p>②、从<a href="http://blog.s135.com/" target="_blank">blog.s135.com</a>下载（比较稳定，只允许在本站，或者在Linux/Unix下通过Wget、Curl等命令下载以下软件）：</p>
<div>mkdir -p /data0/software<br />
cd /data0/software<br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/nginx/nginx-0.8.46.tar.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/nginx/nginx-0.8.46.tar.gz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/php/php-5.2.14.tar.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/php/php-5.2.14.tar.gz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/phpfpm/php-5.2.14-fpm-0.5.14.diff.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/phpfpm/php-5.2.14-fpm-0.5.14.diff.gz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/mysql/mysql-5.5.3-m3.tar.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/mysql/mysql-5.5.3-m3.tar.gz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/libiconv/libiconv-1.13.1.tar.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/libiconv/libiconv-1.13.1.tar.gz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/mcrypt/libmcrypt-2.5.8.tar.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/mcrypt/libmcrypt-2.5.8.tar.gz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/mcrypt/mcrypt-2.6.8.tar.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/mcrypt/mcrypt-2.6.8.tar.gz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/memcache/memcache-2.2.5.tgz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/memcache/memcache-2.2.5.tgz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/mhash/mhash-0.9.9.9.tar.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/mhash/mhash-0.9.9.9.tar.gz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/pcre/pcre-8.10.tar.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/pcre/pcre-8.10.tar.gz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/eaccelerator/eaccelerator-0.9.6.1.tar.bz2" target="_blank">http://blog.s135.com/soft/linux/nginx_php/eaccelerator/eaccelerator-0.9.6.1.tar.bz2</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/pdo/PDO_MYSQL-1.0.2.tgz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/pdo/PDO_MYSQL-1.0.2.tgz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/imagick/ImageMagick.tar.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/imagick/ImageMagick.tar.gz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/imagick/imagick-2.3.0.tgz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/imagick/imagick-2.3.0.tgz</a></div>
<hr /><strong>二、安装PHP 5.2.14（FastCGI模式）</strong><br />
1、编译安装PHP 5.2.14所需的支持库：</p>
<div>tar zxvf libiconv-1.13.1.tar.gz<br />
cd libiconv-1.13.1/<br />
./configure &#8211;prefix=/usr/local<br />
make<br />
make install<br />
cd ../</p>
<p>tar zxvf libmcrypt-2.5.8.tar.gz<br />
cd libmcrypt-2.5.8/<br />
./configure<br />
make<br />
make install<br />
/sbin/ldconfig<br />
cd libltdl/<br />
./configure &#8211;enable-ltdl-install<br />
make<br />
make install<br />
cd ../../</p>
<p>tar zxvf mhash-0.9.9.9.tar.gz<br />
cd mhash-0.9.9.9/<br />
./configure<br />
make<br />
make install<br />
cd ../</p>
<p>ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la<br />
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so<br />
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4<br />
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8<br />
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a<br />
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la<br />
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so<br />
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2<br />
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1<br />
ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config</p>
<p>tar zxvf mcrypt-2.6.8.tar.gz<br />
cd mcrypt-2.6.8/<br />
/sbin/ldconfig<br />
./configure<br />
make<br />
make install<br />
cd ../</p>
</div>
<hr />2、编译安装MySQL 5.5.3-m3</p>
<div>/usr/sbin/groupadd mysql<br />
/usr/sbin/useradd -g mysql mysql<br />
tar zxvf mysql-5.5.3-m3.tar.gz<br />
cd mysql-5.5.3-m3/<br />
./configure  &#8211;prefix=/usr/local/webserver/mysql/ &#8211;enable-assembler  &#8211;with-extra-charsets=complex &#8211;enable-thread-safe-client  &#8211;with-big-tables &#8211;with-readline &#8211;with-ssl &#8211;with-embedded-server  &#8211;enable-local-infile &#8211;with-plugins=partition,innobase,myisammrg<br />
make &amp;&amp; make install<br />
chmod +w /usr/local/webserver/mysql<br />
chown -R mysql:mysql /usr/local/webserver/mysql<br />
cd ../</div>
<hr />附：以下为附加步骤，如果你想在这台服务器上运行MySQL数据库，则执行以下几步。如果你只是希望让PHP支持MySQL扩展库，能够连接其他服务器上的MySQL数据库，那么，以下两步无需执行。</p>
<p>①、创建MySQL数据库存放目录</p>
<div>mkdir -p /data0/mysql/3306/data/<br />
mkdir -p /data0/mysql/3306/binlog/<br />
mkdir -p /data0/mysql/3306/relaylog/<br />
chown -R mysql:mysql /data0/mysql/</div>
<p>②、以mysql用户帐号的身份建立数据表：</p>
<div>/usr/local/webserver/mysql/bin/mysql_install_db  &#8211;basedir=/usr/local/webserver/mysql &#8211;datadir=/data0/mysql/3306/data  &#8211;user=mysql</div>
<p>③、创建my.cnf配置文件：</p>
<div>vi /data0/mysql/3306/my.cnf</div>
<p>输入以下内容：</p>
<div>
<div>引用</div>
<div>[client]<br />
character-set-server = utf8<br />
port    = 3306<br />
socket  = /tmp/mysql.sock</p>
<p>[mysqld]<br />
character-set-server = utf8<br />
replicate-ignore-db = mysql<br />
replicate-ignore-db = test<br />
replicate-ignore-db = information_schema<br />
user    = mysql<br />
port    = 3306<br />
socket  = /tmp/mysql.sock<br />
basedir = /usr/local/webserver/mysql<br />
datadir = /data0/mysql/3306/data<br />
log-error = /data0/mysql/3306/mysql_error.log<br />
pid-file = /data0/mysql/3306/mysql.pid<br />
open_files_limit    = 10240<br />
back_log = 600<br />
max_connections = 5000<br />
max_connect_errors = 6000<br />
table_cache = 614<br />
external-locking = FALSE<br />
max_allowed_packet = 32M<br />
sort_buffer_size = 1M<br />
join_buffer_size = 1M<br />
thread_cache_size = 300<br />
#thread_concurrency = 8<br />
query_cache_size = 512M<br />
query_cache_limit = 2M<br />
query_cache_min_res_unit = 2k<br />
default-storage-engine = MyISAM<br />
thread_stack = 192K<br />
transaction_isolation = READ-COMMITTED<br />
tmp_table_size = 246M<br />
max_heap_table_size = 246M<br />
long_query_time = 3<br />
log-slave-updates<br />
log-bin = /data0/mysql/3306/binlog/binlog<br />
binlog_cache_size = 4M<br />
binlog_format = MIXED<br />
max_binlog_cache_size = 8M<br />
max_binlog_size = 1G<br />
relay-log-index = /data0/mysql/3306/relaylog/relaylog<br />
relay-log-info-file = /data0/mysql/3306/relaylog/relaylog<br />
relay-log = /data0/mysql/3306/relaylog/relaylog<br />
expire_logs_days = 30<br />
key_buffer_size = 256M<br />
read_buffer_size = 1M<br />
read_rnd_buffer_size = 16M<br />
bulk_insert_buffer_size = 64M<br />
myisam_sort_buffer_size = 128M<br />
myisam_max_sort_file_size = 10G<br />
myisam_repair_threads = 1<br />
myisam_recover</p>
<p>interactive_timeout = 120<br />
wait_timeout = 120</p>
<p>skip-name-resolve<br />
#master-connect-retry = 10<br />
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396</p>
<p>#master-host     =   192.168.1.2<br />
#master-user     =   username<br />
#master-password =   password<br />
#master-port     =  3306</p>
<p>server-id = 1</p>
<p>innodb_additional_mem_pool_size = 16M<br />
innodb_buffer_pool_size = 512M<br />
innodb_data_file_path = ibdata1:256M:autoextend<br />
innodb_file_io_threads = 4<br />
innodb_thread_concurrency = 8<br />
innodb_flush_log_at_trx_commit = 2<br />
innodb_log_buffer_size = 16M<br />
innodb_log_file_size = 128M<br />
innodb_log_files_in_group = 3<br />
innodb_max_dirty_pages_pct = 90<br />
innodb_lock_wait_timeout = 120<br />
innodb_file_per_table = 0</p>
<p>#log-slow-queries = /data0/mysql/3306/slow.log<br />
#long_query_time = 10</p>
<p>[mysqldump]<br />
quick<br />
max_allowed_packet = 32M</p>
</div>
</div>
<p>④、创建管理MySQL数据库的shell脚本：</p>
<div>vi /data0/mysql/3306/mysql</div>
<p>输入以下内容（这里的用户名admin和密码12345678接下来的步骤会创建）：</p>
<div>#!/bin/sh</p>
<p>mysql_port=3306<br />
mysql_username=”admin”<br />
mysql_password=”12345678&#8243;</p>
<p>function_start_mysql()<br />
{<br />
printf “Starting MySQL&#8230;\n”<br />
/bin/sh  /usr/local/webserver/mysql/bin/mysqld_safe  &#8211;defaults-file=/data0/mysql/${mysql_port}/my.cnf 2&gt;&amp;1 &gt;  /dev/null &amp;<br />
}</p>
<p>function_stop_mysql()<br />
{<br />
printf “Stoping MySQL&#8230;\n”<br />
/usr/local/webserver/mysql/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S /tmp/mysql.sock shutdown<br />
}</p>
<p>function_restart_mysql()<br />
{<br />
printf “Restarting MySQL&#8230;\n”<br />
function_stop_mysql<br />
sleep 5<br />
function_start_mysql<br />
}</p>
<p>function_kill_mysql()<br />
{<br />
kill -9 $(ps -ef &amp;#124; grep &#8216;bin/mysqld_safe&#8217; &amp;#124; grep ${mysql_port} &amp;#124; awk &#8216;{printf $2}&#8217;)<br />
kill -9 $(ps -ef &amp;#124; grep &#8216;libexec/mysqld&#8217; &amp;#124; grep ${mysql_port} &amp;#124; awk &#8216;{printf $2}&#8217;)<br />
}</p>
<p>if [ "$1" = "start" ]; then<br />
function_start_mysql<br />
elif [ "$1" = "stop" ]; then<br />
function_stop_mysql<br />
elif [ "$1" = "restart" ]; then<br />
function_restart_mysql<br />
elif [ "$1" = "kill" ]; then<br />
function_kill_mysql<br />
else<br />
printf “Usage: /data0/mysql/${mysql_port}/mysql {start&amp;#124;stop&amp;#124;restart&amp;#124;kill}\n”<br />
fi</p>
</div>
<p>⑤、赋予shell脚本可执行权限：</p>
<div>chmod +x /data0/mysql/3306/mysql</div>
<p>⑥、启动MySQL：</p>
<div>/data0/mysql/3306/mysql start</div>
<p>⑦、通过命令行登录管理MySQL服务器（提示输入密码时直接回车）：</p>
<div>/usr/local/webserver/mysql/bin/mysql -u root -p -S /tmp/mysql.sock</div>
<p>⑧、输入以下SQL语句，创建一个具有root权限的用户（admin）和密码（12345678）：</p>
<div>GRANT ALL PRIVILEGES ON *.* TO &#8216;admin&#8217;@'localhost&#8217; IDENTIFIED BY &#8217;12345678&#8242;;<br />
GRANT ALL PRIVILEGES ON *.* TO &#8216;admin&#8217;@&#8217;127.0.0.1&#8242; IDENTIFIED BY &#8217;12345678&#8242;;</div>
<p>⑨、（可选）停止MySQL：</p>
<div>/data0/mysql/3306/mysql stop</div>
<hr />3、编译安装PHP（FastCGI模式）</p>
<div>tar zxvf php-5.2.14.tar.gz<br />
gzip -cd php-5.2.14-fpm-0.5.14.diff.gz | patch -d php-5.2.14 -p1<br />
cd php-5.2.14/<br />
./configure  &#8211;prefix=/usr/local/webserver/php  &#8211;with-config-file-path=/usr/local/webserver/php/etc  &#8211;with-mysql=/usr/local/webserver/mysql  &#8211;with-mysqli=/usr/local/webserver/mysql/bin/mysql_config  &#8211;with-iconv-dir=/usr/local &#8211;with-freetype-dir &#8211;with-jpeg-dir  &#8211;with-png-dir &#8211;with-zlib &#8211;with-libxml-dir=/usr &#8211;enable-xml  &#8211;disable-rpath &#8211;enable-discard-path &#8211;enable-safe-mode &#8211;enable-bcmath  &#8211;enable-shmop &#8211;enable-sysvsem &#8211;enable-inline-optimization  &#8211;with-curl &#8211;with-curlwrappers &#8211;enable-mbregex &#8211;enable-fastcgi  &#8211;enable-fpm &#8211;enable-force-cgi-redirect &#8211;enable-mbstring &#8211;with-mcrypt  &#8211;with-gd &#8211;enable-gd-native-ttf &#8211;with-openssl &#8211;with-mhash  &#8211;enable-pcntl &#8211;enable-sockets &#8211;with-ldap &#8211;with-ldap-sasl  &#8211;with-xmlrpc &#8211;enable-zip &#8211;enable-soap<br />
make ZEND_EXTRA_LIBS=&#8217;-liconv&#8217;<br />
make install<br />
cp php.ini-dist /usr/local/webserver/php/etc/php.ini<br />
cd ../</div>
<hr />4、编译安装PHP5扩展模块</p>
<div>tar zxvf memcache-2.2.5.tgz<br />
cd memcache-2.2.5/<br />
/usr/local/webserver/php/bin/phpize<br />
./configure &#8211;with-php-config=/usr/local/webserver/php/bin/php-config<br />
make<br />
make install<br />
cd ../</p>
<p>tar jxvf eaccelerator-0.9.6.1.tar.bz2<br />
cd eaccelerator-0.9.6.1/<br />
/usr/local/webserver/php/bin/phpize<br />
./configure &#8211;enable-eaccelerator=shared &#8211;with-php-config=/usr/local/webserver/php/bin/php-config<br />
make<br />
make install<br />
cd ../</p>
<p>tar zxvf PDO_MYSQL-1.0.2.tgz<br />
cd PDO_MYSQL-1.0.2/<br />
/usr/local/webserver/php/bin/phpize<br />
./configure &#8211;with-php-config=/usr/local/webserver/php/bin/php-config &#8211;with-pdo-mysql=/usr/local/webserver/mysql<br />
make<br />
make install<br />
cd ../</p>
<p>tar zxvf ImageMagick.tar.gz<br />
cd ImageMagick-6.5.1-2/<br />
./configure<br />
make<br />
make install<br />
cd ../</p>
<p>tar zxvf imagick-2.3.0.tgz<br />
cd imagick-2.3.0/<br />
/usr/local/webserver/php/bin/phpize<br />
./configure &#8211;with-php-config=/usr/local/webserver/php/bin/php-config<br />
make<br />
make install<br />
cd ../</p>
</div>
<p>5、修改php.ini文件<br />
<strong>手工修改：</strong>查找/usr/local/webserver/php/etc/php.ini中的extension_dir = “./”<br />
修改为extension_dir = “/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/”<br />
并在此行后增加以下几行，然后保存：<br />
extension = “memcache.so”<br />
extension = “pdo_mysql.so”<br />
extension = “imagick.so”</p>
<p>再查找output_buffering = Off<br />
修改为output_buffering = On</p>
<p>再查找; cgi.fix_pathinfo=0<br />
修改为cgi.fix_pathinfo=0，防止Nginx文件类型错误解析漏洞。</p>
<p><strong>自动修改：</strong>若嫌手工修改麻烦，可执行以下shell命令，自动完成对php.ini文件的修改：</p>
<div>sed  -i &#8216;s#extension_dir = “./”#extension_dir =  “/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/”\nextension  = “memcache.so”\nextension = “pdo_mysql.so”\nextension =  “imagick.so”\n#&#8217; /usr/local/webserver/php/etc/php.ini<br />
sed -i &#8216;s#output_buffering = Off#output_buffering = On#&#8217; /usr/local/webserver/php/etc/php.ini<br />
sed -i “s#; always_populate_raw_post_data = On#always_populate_raw_post_data = On#g” /usr/local/webserver/php/etc/php.ini<br />
sed -i “s#; cgi.fix_pathinfo=0#cgi.fix_pathinfo=0#g” /usr/local/webserver/php/etc/php.ini</div>
<p>6、配置eAccelerator加速PHP：</p>
<div>mkdir -p /usr/local/webserver/eaccelerator_cache<br />
vi /usr/local/webserver/php/etc/php.ini</div>
<p>按shift+g键跳到配置文件的最末尾，加上以下配置信息：</p>
<div>
<div>引用</div>
<div>[eaccelerator]<br />
zend_extension=”/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so”<br />
eaccelerator.shm_size=”64&#8243;<br />
eaccelerator.cache_dir=”/usr/local/webserver/eaccelerator_cache”<br />
eaccelerator.enable=”1&#8243;<br />
eaccelerator.optimizer=”1&#8243;<br />
eaccelerator.check_mtime=”1&#8243;<br />
eaccelerator.debug=”0&#8243;<br />
eaccelerator.filter=”"<br />
eaccelerator.shm_max=”0&#8243;<br />
eaccelerator.shm_ttl=”3600&#8243;<br />
eaccelerator.shm_prune_period=”3600&#8243;<br />
eaccelerator.shm_only=”0&#8243;<br />
eaccelerator.compress=”1&#8243;<br />
eaccelerator.compress_level=”9&#8243;</div>
</div>
<hr />7、创建www用户和组，以及供blog.s135.com和<a href="http://www.s135.com/" target="_blank">www.s135.com</a>两个虚拟主机使用的目录：</p>
<div>/usr/sbin/groupadd www<br />
/usr/sbin/useradd -g www www<br />
mkdir -p /data0/htdocs/blog<br />
chmod +w /data0/htdocs/blog<br />
chown -R www:www /data0/htdocs/blog<br />
mkdir -p /data0/htdocs/www<br />
chmod +w /data0/htdocs/www<br />
chown -R www:www /data0/htdocs/www</div>
<p>8、创建php-fpm配置文件（php-fpm是为PHP打的一个FastCGI管理补丁，可以平滑变更php.ini配置而无需重启php-cgi）：<br />
在/usr/local/webserver/php/etc/目录中创建php-fpm.conf文件：</p>
<div>rm -f /usr/local/webserver/php/etc/php-fpm.conf<br />
vi /usr/local/webserver/php/etc/php-fpm.conf</div>
<p>输入以下内容（如果您安装 Nginx + PHP 用于程序调试，请将以下的&lt;value  name=”display_errors”&gt;0&lt;/value&gt;改为&lt;value  name=”display_errors”&gt;1&lt;/value&gt;，以便显示PHP错误信息，否则，Nginx  会报状态为500的空白错误页）：</p>
<div>&lt;?xml version=”1.0&#8243; ?&gt;<br />
&lt;configuration&gt;</p>
<p>All relative paths in this config are relative to php&#8217;s install prefix</p>
<p>&lt;section name=”global_options”&gt;</p>
<p>Pid file<br />
&lt;value name=”pid_file”&gt;/usr/local/webserver/php/logs/php-fpm.pid&lt;/value&gt;</p>
<p>Error log file<br />
&lt;value name=”error_log”&gt;/usr/local/webserver/php/logs/php-fpm.log&lt;/value&gt;</p>
<p>Log level<br />
&lt;value name=”log_level”&gt;notice&lt;/value&gt;</p>
<p>When this amount of php processes exited with SIGSEGV or SIGBUS &#8230;<br />
&lt;value name=”emergency_restart_threshold”&gt;10&lt;/value&gt;</p>
<p>&#8230; in a less than this interval of time, a graceful restart will be initiated.<br />
Useful to work around accidental curruptions in accelerator&#8217;s shared memory.<br />
&lt;value name=”emergency_restart_interval”&gt;1m&lt;/value&gt;</p>
<p>Time limit on waiting child&#8217;s reaction on signals from master<br />
&lt;value name=”process_control_timeout”&gt;5s&lt;/value&gt;</p>
<p>Set to &#8216;no&#8217; to debug fpm<br />
&lt;value name=”daemonize”&gt;yes&lt;/value&gt;</p>
<p>&lt;/section&gt;</p>
<p>&lt;workers&gt;</p>
<p>&lt;section name=”pool”&gt;</p>
<p>Name of pool. Used in logs and stats.<br />
&lt;value name=”name”&gt;default&lt;/value&gt;</p>
<p>Address to accept fastcgi requests on.<br />
Valid syntax is &#8216;ip.ad.re.ss:port&#8217; or just &#8216;port&#8217; or &#8216;/path/to/unix/socket&#8217;<br />
&lt;value name=”listen_address”&gt;127.0.0.1:9000&lt;/value&gt;</p>
<p>&lt;value name=”listen_options”&gt;</p>
<p>Set listen(2) backlog<br />
&lt;value name=”backlog”&gt;-1&lt;/value&gt;</p>
<p>Set permissions for unix socket, if one used.<br />
In Linux read/write permissions must be set in order to allow connections from web server.<br />
Many BSD-derrived systems allow connections regardless of permissions.<br />
&lt;value name=”owner”&gt;&lt;/value&gt;<br />
&lt;value name=”group”&gt;&lt;/value&gt;<br />
&lt;value name=”mode”&gt;0666&lt;/value&gt;<br />
&lt;/value&gt;</p>
<p>Additional php.ini defines, specific to this pool of workers.<br />
&lt;value name=”php_defines”&gt;<br />
&lt;value name=”sendmail_path”&gt;/usr/sbin/sendmail -t -i&lt;/value&gt;<br />
&lt;value name=”display_errors”&gt;0&lt;/value&gt;<br />
&lt;/value&gt;</p>
<p>Unix user of processes<br />
&lt;value name=”user”&gt;www&lt;/value&gt;</p>
<p>Unix group of processes<br />
&lt;value name=”group”&gt;www&lt;/value&gt;</p>
<p>Process manager settings<br />
&lt;value name=”pm”&gt;</p>
<p>Sets style of controling worker process count.<br />
Valid values are &#8216;static&#8217; and &#8216;apache-like&#8217;<br />
&lt;value name=”style”&gt;static&lt;/value&gt;</p>
<p>Sets the limit on the number of simultaneous requests that will be served.<br />
Equivalent to Apache MaxClients directive.<br />
Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi<br />
Used with any pm_style.<br />
&lt;value name=”max_children”&gt;128&lt;/value&gt;</p>
<p>Settings group for &#8216;apache-like&#8217; pm style<br />
&lt;value name=”apache_like”&gt;</p>
<p>Sets the number of server processes created on startup.<br />
Used only when &#8216;apache-like&#8217; pm_style is selected<br />
&lt;value name=”StartServers”&gt;20&lt;/value&gt;</p>
<p>Sets the desired minimum number of idle server processes.<br />
Used only when &#8216;apache-like&#8217; pm_style is selected<br />
&lt;value name=”MinSpareServers”&gt;5&lt;/value&gt;</p>
<p>Sets the desired maximum number of idle server processes.<br />
Used only when &#8216;apache-like&#8217; pm_style is selected<br />
&lt;value name=”MaxSpareServers”&gt;35&lt;/value&gt;</p>
<p>&lt;/value&gt;</p>
<p>&lt;/value&gt;</p>
<p>The timeout (in seconds) for serving a single request after which the worker process will be terminated<br />
Should be used when &#8216;max_execution_time&#8217; ini option does not stop script execution for some reason<br />
&#8217;0s&#8217; means &#8216;off&#8217;<br />
&lt;value name=”request_terminate_timeout”&gt;0s&lt;/value&gt;</p>
<p>The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file<br />
&#8217;0s&#8217; means &#8216;off&#8217;<br />
&lt;value name=”request_slowlog_timeout”&gt;0s&lt;/value&gt;</p>
<p>The log file for slow requests<br />
&lt;value name=”slowlog”&gt;logs/slow.log&lt;/value&gt;</p>
<p>Set open file desc rlimit<br />
&lt;value name=”rlimit_files”&gt;65535&lt;/value&gt;</p>
<p>Set max core size rlimit<br />
&lt;value name=”rlimit_core”&gt;0&lt;/value&gt;</p>
<p>Chroot to this directory at the start, absolute path<br />
&lt;value name=”chroot”&gt;&lt;/value&gt;</p>
<p>Chdir to this directory at the start, absolute path<br />
&lt;value name=”chdir”&gt;&lt;/value&gt;</p>
<p>Redirect workers&#8217; stdout and stderr into main error log.<br />
If not set, they will be redirected to /dev/null, according to FastCGI specs<br />
&lt;value name=”catch_workers_output”&gt;yes&lt;/value&gt;</p>
<p>How much requests each process should execute before respawn.<br />
Useful to work around memory leaks in 3rd party libraries.<br />
For endless request processing please specify 0<br />
Equivalent to PHP_FCGI_MAX_REQUESTS<br />
&lt;value name=”max_requests”&gt;1024&lt;/value&gt;</p>
<p>Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect.<br />
Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+)<br />
Makes sense only with AF_INET listening socket.<br />
&lt;value name=”allowed_clients”&gt;127.0.0.1&lt;/value&gt;</p>
<p>Pass environment variables like LD_LIBRARY_PATH<br />
All $VARIABLEs are taken from current environment<br />
&lt;value name=”environment”&gt;<br />
&lt;value name=”HOSTNAME”&gt;$HOSTNAME&lt;/value&gt;<br />
&lt;value name=”PATH”&gt;/usr/local/bin:/usr/bin:/bin&lt;/value&gt;<br />
&lt;value name=”TMP”&gt;/tmp&lt;/value&gt;<br />
&lt;value name=”TMPDIR”&gt;/tmp&lt;/value&gt;<br />
&lt;value name=”TEMP”&gt;/tmp&lt;/value&gt;<br />
&lt;value name=”OSTYPE”&gt;$OSTYPE&lt;/value&gt;<br />
&lt;value name=”MACHTYPE”&gt;$MACHTYPE&lt;/value&gt;<br />
&lt;value name=”MALLOC_CHECK_”&gt;2&lt;/value&gt;<br />
&lt;/value&gt;</p>
<p>&lt;/section&gt;</p>
<p>&lt;/workers&gt;</p>
<p>&lt;/configuration&gt;</p>
</div>
<p>9、启动php-cgi进程，监听127.0.0.1的9000端口，进程数为128（如果服务器内存小于3GB，可以只开启64个进程），用户为www：</p>
<div>ulimit -SHn 65535<br />
/usr/local/webserver/php/sbin/php-fpm start</div>
<p>注：/usr/local/webserver/php/sbin/php-fpm还有其他参数，包 括：start|stop|quit|restart|reload|logrotate，修改php.ini后不重启php-cgi，重新加载配置文件 使用reload。</p>
<hr /><strong>三、安装Nginx 0.8.46</strong><br />
1、安装Nginx所需的pcre库：</p>
<div>tar zxvf pcre-8.10.tar.gz<br />
cd pcre-8.10/<br />
./configure<br />
make &amp;&amp; make install<br />
cd ../</div>
<p>2、安装Nginx</p>
<div>tar zxvf nginx-0.8.46.tar.gz<br />
cd nginx-0.8.46/<br />
./configure &#8211;user=www &#8211;group=www &#8211;prefix=/usr/local/webserver/nginx &#8211;with-http_stub_status_module &#8211;with-http_ssl_module<br />
make &amp;&amp; make install<br />
cd ../</div>
<p>3、创建Nginx日志目录</p>
<div>mkdir -p /data1/logs<br />
chmod +w /data1/logs<br />
chown -R www:www /data1/logs</div>
<p>4、创建Nginx配置文件<br />
①、在/usr/local/webserver/nginx/conf/目录中创建nginx.conf文件：</p>
<div>rm -f /usr/local/webserver/nginx/conf/nginx.conf<br />
vi /usr/local/webserver/nginx/conf/nginx.conf</div>
<p>输入以下内容：</p>
<div>
<div>引用</div>
<div>user  www www;</p>
<p>worker_processes 8;</p>
<p>error_log  /data1/logs/nginx_error.log  crit;</p>
<p>pid        /usr/local/webserver/nginx/nginx.pid;</p>
<p>#Specifies the value for maximum file descriptors that can be opened by this process.<br />
worker_rlimit_nofile 65535;</p>
<p>events<br />
{<br />
use epoll;<br />
worker_connections 65535;<br />
}</p>
<p>http<br />
{<br />
include       mime.types;<br />
default_type  application/octet-stream;</p>
<p>#charset  gb2312;</p>
<p>server_names_hash_bucket_size 128;<br />
client_header_buffer_size 32k;<br />
large_client_header_buffers 4 32k;<br />
client_max_body_size 8m;</p>
<p>sendfile on;<br />
tcp_nopush     on;</p>
<p>keepalive_timeout 60;</p>
<p>tcp_nodelay on;</p>
<p>fastcgi_connect_timeout 300;<br />
fastcgi_send_timeout 300;<br />
fastcgi_read_timeout 300;<br />
fastcgi_buffer_size 64k;<br />
fastcgi_buffers 4 64k;<br />
fastcgi_busy_buffers_size 128k;<br />
fastcgi_temp_file_write_size 128k;</p>
<p>gzip on;<br />
gzip_min_length  1k;<br />
gzip_buffers     4 16k;<br />
gzip_http_version 1.0;<br />
gzip_comp_level 2;<br />
gzip_types       text/plain application/x-javascript text/css application/xml;<br />
gzip_vary on;</p>
<p>#limit_zone  crawler  $binary_remote_addr  10m;</p>
<p>server<br />
{<br />
listen       80;<br />
server_name  blog.s135.com;<br />
index index.html index.htm index.php;<br />
root  /data0/htdocs/blog;</p>
<p>#limit_conn   crawler  20;</p>
<p>location ~ .*\.(php|php5)?$<br />
{<br />
#fastcgi_pass  unix:/tmp/php-cgi.sock;<br />
fastcgi_pass  127.0.0.1:9000;<br />
fastcgi_index index.php;<br />
include fcgi.conf;<br />
}</p>
<p>location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$<br />
{<br />
expires      30d;<br />
}</p>
<p>location ~ .*\.(js|css)?$<br />
{<br />
expires      1h;<br />
}</p>
<p>log_format  access  &#8217;$remote_addr &#8211; $remote_user [$time_local] “$request” &#8216;<br />
&#8216;$status $body_bytes_sent “$http_referer” &#8216;<br />
&#8216;”$http_user_agent” $http_x_forwarded_for&#8217;;<br />
access_log  /data1/logs/access.log  access;<br />
}</p>
<p>server<br />
{<br />
listen       80;<br />
server_name  <a href="http://www.s135.com/;" target="_blank">www.s135.com;</a><br />
index index.html index.htm index.php;<br />
root  /data0/htdocs/www;</p>
<p>location ~ .*\.(php|php5)?$<br />
{<br />
#fastcgi_pass  unix:/tmp/php-cgi.sock;<br />
fastcgi_pass  127.0.0.1:9000;<br />
fastcgi_index index.php;<br />
include fcgi.conf;<br />
}</p>
<p>log_format  wwwlogs  &#8217;$remote_addr &#8211; $remote_user [$time_local] “$request” &#8216;<br />
&#8216;$status $body_bytes_sent “$http_referer” &#8216;<br />
&#8216;”$http_user_agent” $http_x_forwarded_for&#8217;;<br />
access_log  /data1/logs/wwwlogs.log  wwwlogs;<br />
}</p>
<p>server<br />
{<br />
listen  80;<br />
server_name  status.blog.s135.com;</p>
<p>location / {<br />
stub_status on;<br />
access_log   off;<br />
}<br />
}<br />
}</p>
</div>
</div>
<p>②、在/usr/local/webserver/nginx/conf/目录中创建fcgi.conf文件：</p>
<div>vi /usr/local/webserver/nginx/conf/fcgi.conf</div>
<p>输入以下内容：</p>
<div>
<div>引用</div>
<div>fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;<br />
fastcgi_param  SERVER_SOFTWARE    nginx;</p>
<p>fastcgi_param  QUERY_STRING       $query_string;<br />
fastcgi_param  REQUEST_METHOD     $request_method;<br />
fastcgi_param  CONTENT_TYPE       $content_type;<br />
fastcgi_param  CONTENT_LENGTH     $content_length;</p>
<p>fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;<br />
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;<br />
fastcgi_param  REQUEST_URI        $request_uri;<br />
fastcgi_param  DOCUMENT_URI       $document_uri;<br />
fastcgi_param  DOCUMENT_ROOT      $document_root;<br />
fastcgi_param  SERVER_PROTOCOL    $server_protocol;</p>
<p>fastcgi_param  REMOTE_ADDR        $remote_addr;<br />
fastcgi_param  REMOTE_PORT        $remote_port;<br />
fastcgi_param  SERVER_ADDR        $server_addr;<br />
fastcgi_param  SERVER_PORT        $server_port;<br />
fastcgi_param  SERVER_NAME        $server_name;</p>
<p># PHP only, required if PHP was built with &#8211;enable-force-cgi-redirect<br />
fastcgi_param  REDIRECT_STATUS    200;</p>
</div>
</div>
<p>5、启动Nginx</p>
<div>ulimit -SHn 65535<br />
/usr/local/webserver/nginx/sbin/nginx</div>
<hr /><strong>四、配置开机自动启动Nginx + PHP</strong></p>
<div>vi /etc/rc.local</div>
<p>在末尾增加以下内容：</p>
<div>
<div>引用</div>
<div>ulimit -SHn 65535<br />
/usr/local/webserver/php/sbin/php-fpm start<br />
/usr/local/webserver/nginx/sbin/nginx</div>
</div>
<hr /><strong>五、优化Linux内核参数</strong></p>
<div>vi /etc/sysctl.conf</div>
<p>在末尾增加以下内容：</p>
<div>
<div>引用</div>
<div># Add<br />
net.ipv4.tcp_max_syn_backlog = 65536<br />
net.core.netdev_max_backlog =  32768<br />
net.core.somaxconn = 32768</p>
<p>net.core.wmem_default = 8388608<br />
net.core.rmem_default = 8388608<br />
net.core.rmem_max = 16777216<br />
net.core.wmem_max = 16777216</p>
<p>net.ipv4.tcp_timestamps = 0<br />
net.ipv4.tcp_synack_retries = 2<br />
net.ipv4.tcp_syn_retries = 2</p>
<p>net.ipv4.tcp_tw_recycle = 1<br />
#net.ipv4.tcp_tw_len = 1<br />
net.ipv4.tcp_tw_reuse = 1</p>
<p>net.ipv4.tcp_mem = 94500000 915000000 927000000<br />
net.ipv4.tcp_max_orphans = 3276800</p>
<p>#net.ipv4.tcp_fin_timeout = 30<br />
#net.ipv4.tcp_keepalive_time = 120<br />
net.ipv4.ip_local_port_range = 1024  65535</p>
</div>
</div>
<p>使配置立即生效：</p>
<div>/sbin/sysctl -p</div>
<hr /><strong>六、在不停止Nginx服务的情况下平滑变更Nginx配置</strong><br />
1、修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后，请执行以下命令检查配置文件是否正确：</p>
<div>/usr/local/webserver/nginx/sbin/nginx -t</div>
<p>如果屏幕显示以下两行信息，说明配置文件正确：<br />
the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok<br />
the configuration file /usr/local/webserver/nginx/conf/nginx.conf was tested successfully</p>
<p>2、平滑重启：<br />
①、对于Nginx 0.8.x版本，现在平滑重启Nginx配置非常简单，执行以下命令即可：</p>
<div>/usr/local/webserver/nginx/sbin/nginx -s reload</div>
<p>②、对于Nginx 0.8.x之前的版本，平滑重启稍微麻烦一些，按照以下步骤进行即可。输入以下命令查看Nginx主进程号：</p>
<div>ps -ef | grep “nginx: master process” | grep -v “grep” | awk -F &#8216; &#8216; &#8216;{print $2}&#8217;</div>
<p>屏幕显示的即为Nginx主进程号，例如：<br />
6302<br />
这时，执行以下命令即可使修改过的Nginx配置文件生效：</p>
<div>kill -HUP 6302</div>
<p>或者无需这么麻烦，找到Nginx的Pid文件：</p>
<div>kill -HUP `cat /usr/local/webserver/nginx/nginx.pid`</div>
<hr /><strong>七、编写每天定时切割Nginx日志的脚本</strong><br />
1、创建脚本/usr/local/webserver/nginx/sbin/cut_nginx_log.sh</p>
<div>vi /usr/local/webserver/nginx/sbin/cut_nginx_log.sh</div>
<p>输入以下内容：</p>
<div>
<div>引用</div>
<div>#!/bin/bash<br />
# This script run at 00:00</p>
<p># The Nginx logs path<br />
logs_path=”/usr/local/webserver/nginx/logs/”</p>
<p>mkdir -p ${logs_path}$(date -d “yesterday” +”%Y”)/$(date -d “yesterday” +”%m”)/<br />
mv  ${logs_path}access.log ${logs_path}$(date -d “yesterday” +”%Y”)/$(date  -d “yesterday” +”%m”)/access_$(date -d “yesterday” +”%Y%m%d”).log<br />
kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`</p>
</div>
</div>
<p>2、设置crontab，每天凌晨00:00切割nginx访问日志</p>
<div>crontab -e</div>
<p>输入以下内容：</p>
<div>
<div>引用</div>
<div>00 00 * * * /bin/bash  /usr/local/webserver/nginx/sbin/cut_nginx_log.sh</div>
</div>
<hr />本文若有小的修改，会第一时间在以下网址发布：<br />
<a href="http://blog.s135.com/nginx_php_v6/" target="_blank">http://blog.s135.com/nginx_php_v6/</a></p>
<hr /><strong>附：文章修改历史</strong></p>
<p>● [2010年03月04日] [Version 6.0] 新建</p>
<p>● [2010年04月16日] [Version 6.1] Nginx版本升级到0.8.35。</p>
<p>● [2010年05月14日] [Version 6.2]  Nginx版本升级到0.8.36。MySQL版本升级到5.5.3-m3，my.cnf配置文件中的thread_concurrency、 master-connect-retry参数在新版本中不支持，已经注释掉。</p>
<p>● [2010年07月26日] [Version 6.3] Nginx版本升级到0.8.46。PHP版本升级到5.2.14。其他软件也做了相应的升级。开启php.ini中的cgi.fix_pathinfo=0，防止Nginx文件类型错误解析漏洞。</p>
<p>（全文完）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.secblog.cn/server/586.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用Linux的rsync命令实现：多服务器镜像同步</title>
		<link>http://www.secblog.cn/server/581.html</link>
		<comments>http://www.secblog.cn/server/581.html#comments</comments>
		<pubDate>Sun, 01 Aug 2010 06:04:29 +0000</pubDate>
		<dc:creator>豬頭濱</dc:creator>
				<category><![CDATA[环境搭建]]></category>
		<category><![CDATA[rsync]]></category>

		<guid isPermaLink="false">http://www.secblog.cn/?p=581</guid>
		<description><![CDATA[实现功能：当用户在本地客户端某目录内建立、修改、删除目录或文件、修改目录或文件的属性，只要执行相同的shell脚本，rsync就会自动找出有改动或删除的数据，将其传送到服务器上，使服务器端某目录内的数据跟本地客户端某目录内的数据保持一致。 ★方式一： 一、服务器端（例：10.0.0.1*）： 1、创建用户和组 groupadd www -g 48 useradd -u 48 -g www www mkdir -p /opt/htdocs chmod +w /opt/htdocs chown www:www /opt/htdocs 2、编辑rsync的配置文件 vi /etc/rsyncd.conf 输入以下内容： 引用 uid=www gid=www max connections=10 use chroot=no log file=/var/log/rsyncd.log pid file=/var/run/rsyncd.pid lock file=/var/run/rsyncd.lock [zhangyan] path=/opt/htdocs comment = my htdocs ignore errors read only = no hosts allow=10.0.0.21 10.0.0.22 [...]]]></description>
			<content:encoded><![CDATA[<p>实现功能：当用户在本地客户端某目录内建立、修改、删除目录或文件、修改目录或文件的属性，只要执行相同的shell脚本，rsync就会自动找出有改动或删除的数据，将其传送到服务器上，使服务器端某目录内的数据跟本地客户端某目录内的数据保持一致。</p>
<p>★方式一：</p>
<p>一、服务器端（例：10.0.0.1*）：<br />
1、创建用户和组<br />
<a name="entrymore"></a></p>
<div>groupadd www -g 48<br />
useradd -u 48 -g www www<br />
mkdir -p /opt/htdocs<br />
chmod +w /opt/htdocs<br />
chown www:www /opt/htdocs</div>
<p>2、编辑rsync的配置文件</p>
<div>vi /etc/rsyncd.conf</div>
<p>输入以下内容：</p>
<div>
<div>引用</div>
<div>uid=www<br />
gid=www<br />
max connections=10<br />
use chroot=no<br />
log file=/var/log/rsyncd.log<br />
pid file=/var/run/rsyncd.pid<br />
lock file=/var/run/rsyncd.lock</p>
<p>[zhangyan]<br />
path=/opt/htdocs<br />
comment = my htdocs<br />
ignore errors<br />
read only = no<br />
hosts allow=10.0.0.21 10.0.0.22</p>
</div>
</div>
<p>3、启动rsync服务器端</p>
<div>/usr/bin/rsync &#8211;daemon</div>
<p>二、客户端（例：10.0.0.21和10.0.0.22）：<br />
1、创建一个shell脚本push.sh</p>
<div>vi push.sh</div>
<p>输入以下内容（10.0.0.1*为要推送到的目标服务器，zhangyan为服务器端rsyncd.conf配置文件中的模块名）：</p>
<div>
<div>引用</div>
<div>#!/bin/sh<br />
/usr/bin/rsync -vzrtopg &#8211;delete $1 10.0.0.10::zhangyan/<br />
/usr/bin/rsync -vzrtopg &#8211;delete $1 10.0.0.11::zhangyan/<br />
/usr/bin/rsync -vzrtopg &#8211;delete $1 10.0.0.16::zhangyan/<br />
/usr/bin/rsync -vzrtopg &#8211;delete $1 10.0.0.19::zhangyan/</div>
</div>
<p>注：因为是内部局域网之间传输，这里没有设置密码。</p>
<p>2、赋予push.sh执行权限</p>
<div>chmod +x ./push.sh</div>
<p>3、同步推送客户端某个目录中（例：/home/zhanguan/abc）的文件到服务器端的/opt/htdocs目录：</p>
<div>./push.sh /home/zhanguan/abc/</div>
<p>注意：不要忘了abc后面的/。如果更改的文件太大，可以在上面语句的末尾加上空格和&amp;号，推到后台执行。例：</p>
<div>./push.sh /home/zhanguan/abc/ &amp;</div>
<p>★方式二：</p>
<p>一、服务器端（例：10.0.0.1*）：<br />
1、创建用户和组</p>
<div>groupadd www -g 48<br />
useradd -u 48 -g www www<br />
mkdir -p /opt/htdocs<br />
chmod +w /opt/htdocs<br />
chown www:www /opt/htdocs<br />
passwd www</div>
<p>为www用户设置一个密码。</p>
<p>二、客户端：<br />
1、同步推送客户端某个目录中（例：/home/zhanguan/abc）的文件到服务器端的/opt/htdocs目录：</p>
<div>/usr/bin/rsync -vzrtopg &#8211;delete /home/zhanguan/abc/ -e ssh www@10.0.0.10:/opt/htdocs/</div>
<p>输入密码，回车即可，无须服务器端启动rsync服务。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.secblog.cn/server/581.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IP别名+TCP转发+端口映射实现跨网络访问</title>
		<link>http://www.secblog.cn/server/579.html</link>
		<comments>http://www.secblog.cn/server/579.html#comments</comments>
		<pubDate>Sun, 01 Aug 2010 06:03:43 +0000</pubDate>
		<dc:creator>豬頭濱</dc:creator>
				<category><![CDATA[环境搭建]]></category>

		<guid isPermaLink="false">http://www.secblog.cn/?p=579</guid>
		<description><![CDATA[[文章作者：张宴 本文版本：v1.0 最后修改：2007.08.21 转载请注明出处：http://blog.s135.com] 我这两天在工作中遇到了一些问题，在今天下午全部解决，于是决定写一篇文章，将实现方法记录下来： 一、背景环境： 1、都是Linux服务器； 2、“服务器A”与“服务器C”不在同一网络，两者之间是不通的； 3、“服务器A”、“服务器C”分别与“服务器B”相通。 二、要实现的需求： 1、让“服务器A”上的PHP程序能够连接“服务器C”上的MySQL数据库（IP：10.10.1.4，端口：3306）； 2、不允许在“服务器A”上的PHP程序中更改MySQL地址（10.10.1.4）和MySQL端口（3306）。 三、实现原理： 理论上从“服务器A”是无法直接连接“服务器C”的IP地址（10.10.1.4）及其3306端口的【图中的虚线】，但通过“IP别名+TCP转发+端口映射”，我在“服务器A”上的PHP程序无须作任何修改的情况下实现了这项功能【图中的实线】。 访问路线：“服务器A”上的PHP程序─→虚拟10.10.1.4:3306─→192.168.1.3:8520─→真实10.10.1.4:3306 四、实现方法： 1、修改“服务器A”上的Apache配置文件httpd.conf（以下仅列出要修改的部分，其余部分用&#8230;&#8230;表示）： 引用 &#8230;&#8230;&#8230;&#8230;&#8230;. Listen 192.168.1.2:80 &#8230;&#8230;&#8230;&#8230;&#8230;. NameVirtualHost 192.168.1.2:80 &#60;VirtualHost 192.168.1.2:80&#62; &#8230;&#8230;&#8230;&#8230;&#8230;. 然后重启Apache： /usr/local/apache/bin/httpd -k restart 2、在“服务器A”上创建本地回环设备lo（即127.0.0.1）的IP别名10.10.1.4，即虚拟IP： 『图中的①』 /sbin/ifconfig lo:0 10.10.1.4 broadcast 10.10.1.4 netmask 255.255.255.255 up /sbin/route add -host 10.10.1.4 dev lo:0 3、在“服务器A”上编译安装TCP转发软件rinetd（官方网站：http://www.boutell.com/rinetd/），将对10.10.1.4:80的TCP请求重定向到192.168.1.3:8520上： 『图中的②』 wget http://www.boutell.com/rinetd/http/rinetd.tar.gz tar zxvf rinetd.tar.gz cd [...]]]></description>
			<content:encoded><![CDATA[<p>[文章作者：张宴 本文版本：v1.0 最后修改：2007.08.21 转载请注明出处：<a href="http://blog.s135.com/" target="_blank">http://blog.s135.com</a>]</p>
<p>我这两天在工作中遇到了一些问题，在今天下午全部解决，于是决定写一篇文章，将实现方法记录下来：</p>
<p>一、背景环境：<br />
1、都是Linux服务器；<br />
2、“服务器A”与“服务器C”不在同一网络，两者之间是不通的；<br />
3、“服务器A”、“服务器C”分别与“服务器B”相通。</p>
<p>二、要实现的需求：<br />
1、让“服务器A”上的PHP程序能够连接“服务器C”上的MySQL数据库（IP：10.10.1.4，端口：3306）；<br />
2、不允许在“服务器A”上的PHP程序中更改MySQL地址（10.10.1.4）和MySQL端口（3306）。</p>
<p>三、实现原理：<br />
理论上从“服务器A”是无法直接连接“服务器C”的IP地址（10.10.1.4）及其3306端口的【图中的虚线】，但通过“IP别名+TCP转发+端口映射”，我在“服务器A”上的PHP程序无须作任何修改的情况下实现了这项功能【图中的实线】。<br />
访问路线：“服务器A”上的PHP程序─→虚拟10.10.1.4:3306─→192.168.1.3:8520─→真实10.10.1.4:3306</p>
<p><a href="http://blog.s135.com/attachment/200708/iptables.gif" target="_blank"><img title="点击在新窗口中浏览此图片" src="http://blog.s135.com/attachment/200708/iptables.gif" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<p>四、实现方法：<a name="entrymore"></a><br />
1、修改“服务器A”上的Apache配置文件httpd.conf（以下仅列出要修改的部分，其余部分用&#8230;&#8230;表示）：</p>
<div>
<div>引用</div>
<div>&#8230;&#8230;&#8230;&#8230;&#8230;.<br />
Listen 192.168.1.2:80<br />
&#8230;&#8230;&#8230;&#8230;&#8230;.<br />
NameVirtualHost 192.168.1.2:80<br />
&lt;VirtualHost 192.168.1.2:80&gt;<br />
&#8230;&#8230;&#8230;&#8230;&#8230;.</div>
</div>
<p>然后重启Apache：<br />
/usr/local/apache/bin/httpd -k restart</p>
<p>2、在“服务器A”上创建本地回环设备lo（即127.0.0.1）的IP别名10.10.1.4，即虚拟IP：<br />
『图中的①』<br />
/sbin/ifconfig lo:0 10.10.1.4 broadcast 10.10.1.4 netmask 255.255.255.255 up<br />
/sbin/route add -host 10.10.1.4 dev lo:0</p>
<p>3、在“服务器A”上编译安装TCP转发软件rinetd（官方网站：<a href="http://www.boutell.com/rinetd/" target="_blank">http://www.boutell.com/rinetd/</a>），将对10.10.1.4:80的TCP请求重定向到192.168.1.3:8520上：<br />
『图中的②』<br />
wget <a href="http://www.boutell.com/rinetd/http/rinetd.tar.gz" target="_blank">http://www.boutell.com/rinetd/http/rinetd.tar.gz</a><br />
tar zxvf rinetd.tar.gz<br />
cd rinetd<br />
make &amp;&amp; make install<br />
vi /etc/rinetd.conf<br />
输入以下内容(格式：源地址 源端口 目标地址 目标端口)：</p>
<div>
<div>引用</div>
<div>10.10.1.4 80 192.168.1.3 8520</div>
</div>
<p>启动rinetd守护进程<br />
/usr/sbin/rinetd -c /etc/rinetd.conf</p>
<p>4、在“服务器B”上利用iptables配置端口映射，将自身的8520端口映射到10.10.1.4的3306端口上：<br />
『图中的③』<br />
echo “1&#8243;&gt; /proc/sys/net/ipv4/ip_forward<br />
/sbin/iptables -t nat -A PREROUTING -p tcp -s 192.168.1.0/24 -d 192.168.1.3 &#8211;dport 8520 -j DNAT &#8211;to-destination 10.10.1.4:3306<br />
/sbin/iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.0/24 -d 10.10.1.4 &#8211;dport 3306 -j SNAT &#8211;to-source 10.10.1.3</p>
<p>为了防止服务器重启导致TCP转发失效，请：<br />
vi /etc/rc.local<br />
增加一行：</p>
<div>
<div>引用</div>
<div>echo “1&#8243;&gt; /proc/sys/net/ipv4/ip_forward</div>
</div>
<p>或者：<br />
vi /etc/sysctl.conf<br />
增加一行：</p>
<div>
<div>引用</div>
<div>net.ipv4.ip_forward = 1</div>
</div>
<p>/sbin/sysctl -p</p>
]]></content:encoded>
			<wfw:commentRss>http://www.secblog.cn/server/579.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AutoAPM&#8211;Linux下自动编译Apache+PHP+MySQL脚本</title>
		<link>http://www.secblog.cn/server/574.html</link>
		<comments>http://www.secblog.cn/server/574.html#comments</comments>
		<pubDate>Sun, 01 Aug 2010 06:01:06 +0000</pubDate>
		<dc:creator>豬頭濱</dc:creator>
				<category><![CDATA[环境搭建]]></category>

		<guid isPermaLink="false">http://www.secblog.cn/?p=574</guid>
		<description><![CDATA[[AutoAPM作者：张宴 版本：v1.0.5 最后修改：2007.02.19 转载请注明出处：http://blog.s135.com] 因工作需要，编写了一个在Linux操作系统下自动从源码包编译安装Apache2.0.59、PHP5.2.1(支持freetype、 libpng、jpegsrc、gd、libxml扩展)、MySQL5.0.33、ZendOptimizer3.2.2的bash脚本—— AutoAPM，源代码完全公开，可根据自己的需要修改(命令行下tar zxvf autoapm-1.0.4.tar.gz解压缩后，vi autoapm即可)。 脚本前列的基本配置信息说明： #&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;config start&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- mysql_tar_gz_name=”mysql-5.0.33.tar.gz” #MySQL的源码压缩包 mysql_source_dir_name=”mysql-5.0.33&#8243; #tar zxvf解压MySQL源码压缩包后的默认目录名 mysql_download_url=”http://www.vista.ac.cn/autoapm/src/1.0.5/mysql-5.0.33.tar.gz” #MySQL源码压缩包的下载网址 #&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;config end&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; 使用说明： 在Linux字符界面中用wget http://www.vista.ac.cn/autoapm/down/autoapm-1.0.5.tar.gz下载autoapm压缩包，然后用tar zxvf autoapm-1.0.4.tar.gz解压，最后输入./autoapm执行即可。 接下来会提示要您选择源码包来源，如果当前目录中有相应的源码包，可选择Current directory.，如果没有，可选择Download from Internet.,脚本会根据配置信息中的下载地址自动下载源码包并编译安装。编译安装的时间需要20至50分钟。 脚本源码：http://www.vista.ac.cn/autoapm/down/autoapm-1.0.5.src.txt 下载地址：http://www.vista.ac.cn/autoapm/down/autoapm-1.0.5.tar.gz AutoAPM 1.0.5 for Linux Written by Zhang Yan, SINA Corp., Beijing, China A tool to auto-compile &#38; install Apache, PHP, MySQL on [...]]]></description>
			<content:encoded><![CDATA[<p>[AutoAPM作者：张宴 版本：v1.0.5 最后修改：2007.02.19 转载请注明出处：<a href="http://blog.s135.com/" target="_blank">http://blog.s135.com</a>]</p>
<p>因工作需要，编写了一个在Linux操作系统下自动从源码包编译安装Apache2.0.59、PHP5.2.1(支持freetype、 libpng、jpegsrc、gd、libxml扩展)、MySQL5.0.33、ZendOptimizer3.2.2的bash脚本—— AutoAPM，源代码完全公开，可根据自己的需要修改(命令行下tar zxvf autoapm-1.0.4.tar.gz解压缩后，vi  autoapm即可)。<br />
<a name="entrymore"></a><br />
脚本前列的基本配置信息说明：<br />
#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;config start&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
mysql_tar_gz_name=”mysql-5.0.33.tar.gz”<br />
#MySQL的源码压缩包</p>
<p>mysql_source_dir_name=”mysql-5.0.33&#8243;<br />
#tar zxvf解压MySQL源码压缩包后的默认目录名</p>
<p>mysql_download_url=”http://www.vista.ac.cn/autoapm/src/1.0.5/mysql-5.0.33.tar.gz”<br />
#MySQL源码压缩包的下载网址<br />
#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;config end&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>使用说明：<br />
在Linux字符界面中用wget <a href="http://www.vista.ac.cn/autoapm/down/autoapm-1.0.5.tar.gz" target="_blank">http://www.vista.ac.cn/autoapm/down/autoapm-1.0.5.tar.gz</a>下载autoapm压缩包，然后用tar zxvf autoapm-1.0.4.tar.gz解压，最后输入./autoapm执行即可。<br />
接下来会提示要您选择源码包来源，如果当前目录中有相应的源码包，可选择Current directory.，如果没有，可选择Download  from Internet.,脚本会根据配置信息中的下载地址自动下载源码包并编译安装。编译安装的时间需要20至50分钟。</p>
<p>脚本源码：<span style="color: blue;"><a href="http://www.vista.ac.cn/autoapm/down/autoapm-1.0.5.src.txt" target="_blank">http://www.vista.ac.cn/autoapm/down/autoapm-1.0.5.src.txt</a></span><br />
下载地址：<span style="color: blue;"><a href="http://www.vista.ac.cn/autoapm/down/autoapm-1.0.5.tar.gz" target="_blank">http://www.vista.ac.cn/autoapm/down/autoapm-1.0.5.tar.gz</a></span></p>
<p>AutoAPM 1.0.5 for Linux Written by Zhang Yan, SINA Corp., Beijing, China</p>
<p>A tool to auto-compile &amp; install Apache, PHP, MySQL on Linux from sources<br />
For more information please visit <span style="color: blue;"><a href="http://autoapm.vista.ac.cn/" target="_blank">http://autoapm.vista.ac.cn</a></span></p>
<p><strong>Usage:</strong><br />
[root@sina var]# wget <a href="http://www.vista.ac.cn/autoapm/down/autoapm-1.0.5.tar.gz" target="_blank">http://www.vista.ac.cn/autoapm/down/autoapm-1.0.5.tar.gz</a><br />
[root@sina var]# tar zxvf autoapm-1.0.5.tar.gz<br />
[root@sina var]# ./autoapm</p>
<p><strong>The path of some dirs (If install to /opt/sina):</strong><br />
Apache dir: /opt/sina/apache/<br />
Webpages dir: /opt/sina/apache/htdocs/<br />
MySQL dir: /opt/sina/mysql/<br />
PHP dir: /opt/sina/php/</p>
<p><strong>The path of some files (If install to /opt/sina):</strong><br />
apachectl: /opt/sina/apache/bin/apachectl<br />
httpd.conf: /opt/sina/apache/conf/httpd.conf<br />
mysql: /opt/sina/mysql/bin/mysql<br />
my.cnf: /etc/my.cnf<br />
php: /opt/sina/php/php<br />
php.ini: /opt/sina/php/etc/php.ini (Before install ZendOptimizer?)<br />
php.ini: /opt/sina/zend/etc/php.ini (After install ZendOptimizer?)</p>
<p><strong>Restart Apache:</strong> service httpd restart<br />
<strong>Restart MySQL:</strong> service mysql restart</p>
<p>更新记录：<br />
2007.01.19 AutoAPM v1.0.5 修正了源码包下载链接<br />
2007.01.15 AutoAPM v1.0.4 第一个公开版本</p>
]]></content:encoded>
			<wfw:commentRss>http://www.secblog.cn/server/574.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nginx+PHP+MySQL双机互备、全自动切换方案</title>
		<link>http://www.secblog.cn/server/571.html</link>
		<comments>http://www.secblog.cn/server/571.html#comments</comments>
		<pubDate>Sun, 01 Aug 2010 05:58:43 +0000</pubDate>
		<dc:creator>豬頭濱</dc:creator>
				<category><![CDATA[环境搭建]]></category>

		<guid isPermaLink="false">http://www.secblog.cn/?p=571</guid>
		<description><![CDATA[[文章作者：张宴 本文版本：v1.0 最后修改：2008.11.19 转载请注明原文链接：http://blog.s135.com/post/379/] 在生产应用中，某台“Nginx+PHP+MySQL”接口数据服务器，扮演的角色十分重要，如果服务器硬件或Nginx、MySQL发生故障，而短时 间内无法恢复，后果将非常严重。为了避免单点故障，我设计了此套方案，编写了failover.sh脚本，实现了双机互备、全自动切换，故障转移时间只需 几十秒。 一、双机互备、全自动切换方案： 1、拓扑图： 2、解释： (1)、假设外网域名blog.s135.com解析到外网虚拟IP 72.249.146.214上，内网hosts设置db10对应内网虚拟IP 192.168.146.214 (2)、默认情况下，由主机绑定内、外网虚拟IP，备机作为备份，当主机的MySQL、Nginx或服务器出现故障无法访问时，备机会自动接管内、外网 虚拟IP。两台服务器都启动负责监控、自动切换虚拟IP的守护进程/usr/bin/nohup /bin/sh /usr/local/webserver/failover/failover.sh 2&#62;&#38;1 &#62; /dev/null &#38; (3)、主机和备机上的MySQL服务器互为主从，互相同步。在主机处于活动状态（即由主机绑定虚拟IP）时，读写主机的 MySQL，写到主机的数据会同步到备机；在备机处于活动状态时，读写备机的MySQL，写到备机的数据会同步到主机（如果主机上的MySQL死掉暂时无 法同步，主机上的MySQL恢复后，数据会自动从备机上同步过来，反之亦然）。 (4)、主机处于活动状态时，每20秒会把 /data0/htdocs/（网页、程序、图片存放目录）、/usr/local/webserver/php/etc/（php.ini等配置文件目 录）、/usr/local/webserver/nginx/conf/（Nginx配置文件目录）三个目录下的文件通过rsync推送到备机服务器上 的对应目录（增量推送，两台服务器上一样的文件不会重复推送），反之如果备机处于活动状态时，每20秒会尝试把文件推送到主机。rsync的配置文件见两 台服务器的/etc/rsyncd.conf，rsync守护进程的启动命令为rsync &#8211;daemon 3、自动切换流程 (1)、主机默认绑定内、外网虚拟IP，当主机的MySQL、Nginx无法访问或服务器宕机，主机上的failover.sh守护进程会自动摘除自己 绑定的内、外网虚拟IP（如果主机上的failover.sh死掉，无法摘除自己绑定的虚拟IP也没关系），备机上的failover.sh守护进程会自 动接管备机原来绑定的内、外网虚拟IP，并发送ARPing包给内、外网网关更新MAC，强行接管。 (2)、备机绑定虚拟IP后，会发送ARPing包给内、外网网关，通知网关更新虚拟IP的MAC地址为备机的MAC地址，从而保证了切换后能够通过虚拟IP及时访问到备机。 (3)、如果主机的MySQL、Nginx启动起来，全部恢复正常访问，主机上的failover.sh守护进程会检测主机上的MySQL数据是否已经 完全从备机上同步过来。如果同步延迟时间为0，主机会自动接管内、外网虚拟IP，并发送ARPing包给内、外网网关，而备机也会自动摘除内、外网虚拟 IP。 (4)、整个切换流程均由failover.sh自动完成，无需人工处理。 4、注意事项（很重要）： (1)、crontab里的文件没有做自动同步，如果修改，需要手工在两台服务器上都做修改。 (2)、/data0/htdocs/目录内任何用ln -s建立的软连接，rsync不会自动同步，如果在一台服务器上建了软连接，需要手工在另外一台服务器上也建相同的软连接。 (3)、如果要删除/data0/htdocs/目录内的某些文件或目录，需要先删除处于活动状态（即绑定了虚拟IP）服务器上的文件或目录，再删除处于备用状态服务器上的文件或目录。 (4)、除了/data0/htdocs/（网页、程序、图片存放目录）、/usr/local/webserver/php/etc /（php.ini等配置文件目录）、/usr/local/webserver/nginx/conf/（Nginx配置文件目录）三个目录之外的其他 配置修改，需要在两台服务器上都做修改。 二、配置文档与脚本： 1、主机、备机两台服务器的rsync配置（配置相同） (1)、rsync配置文件 vi /etc/rsyncd.conf 输入一些内容并保存： 引用 uid [...]]]></description>
			<content:encoded><![CDATA[<p>[文章作者：张宴 本文版本：v1.0 最后修改：2008.11.19 转载请注明原文链接：<a href="http://blog.s135.com/post/379/" target="_blank">http://blog.s135.com/post/379/</a>]</p>
<p>在生产应用中，某台“Nginx+PHP+MySQL”接口数据服务器，扮演的角色十分重要，如果服务器硬件或Nginx、MySQL发生故障，而短时 间内无法恢复，后果将非常严重。为了避免单点故障，我设计了此套方案，编写了failover.sh脚本，实现了双机互备、全自动切换，故障转移时间只需 几十秒。</p>
<p><strong>一、双机互备、全自动切换方案：</strong><br />
<strong>1、拓扑图：</strong><br />
<a href="http://blog.s135.com/attachment/200811/nginx_php_mysql_ha.png" target="_blank"><img title="点击在新窗口中浏览此图片" src="http://blog.s135.com/attachment/200811/nginx_php_mysql_ha.png" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<p><strong>2、解释：</strong><br />
(1)、假设外网域名blog.s135.com解析到外网虚拟IP 72.249.146.214上，内网hosts设置db10对应内网虚拟IP 192.168.146.214</p>
<p>(2)、默认情况下，由主机绑定内、外网虚拟IP，备机作为备份，当主机的MySQL、Nginx或服务器出现故障无法访问时，备机会自动接管内、外网 虚拟IP。两台服务器都启动负责监控、自动切换虚拟IP的守护进程/usr/bin/nohup /bin/sh  /usr/local/webserver/failover/failover.sh 2&gt;&amp;1 &gt; /dev/null  &amp;</p>
<p>(3)、主机和备机上的MySQL服务器互为主从，互相同步。在主机处于活动状态（即由主机绑定虚拟IP）时，读写主机的 MySQL，写到主机的数据会同步到备机；在备机处于活动状态时，读写备机的MySQL，写到备机的数据会同步到主机（如果主机上的MySQL死掉暂时无 法同步，主机上的MySQL恢复后，数据会自动从备机上同步过来，反之亦然）。</p>
<p>(4)、主机处于活动状态时，每20秒会把 /data0/htdocs/（网页、程序、图片存放目录）、/usr/local/webserver/php/etc/（php.ini等配置文件目 录）、/usr/local/webserver/nginx/conf/（Nginx配置文件目录）三个目录下的文件通过rsync推送到备机服务器上 的对应目录（增量推送，两台服务器上一样的文件不会重复推送），反之如果备机处于活动状态时，每20秒会尝试把文件推送到主机。rsync的配置文件见两 台服务器的/etc/rsyncd.conf，rsync守护进程的启动命令为rsync &#8211;daemon</p>
<p><strong>3、自动切换流程</strong><br />
(1)、主机默认绑定内、外网虚拟IP，当主机的MySQL、Nginx无法访问或服务器宕机，主机上的failover.sh守护进程会自动摘除自己 绑定的内、外网虚拟IP（如果主机上的failover.sh死掉，无法摘除自己绑定的虚拟IP也没关系），备机上的failover.sh守护进程会自 动接管备机原来绑定的内、外网虚拟IP，并发送ARPing包给内、外网网关更新MAC，强行接管。<br />
<a name="entrymore"></a><br />
(2)、备机绑定虚拟IP后，会发送ARPing包给内、外网网关，通知网关更新虚拟IP的MAC地址为备机的MAC地址，从而保证了切换后能够通过虚拟IP及时访问到备机。</p>
<p>(3)、如果主机的MySQL、Nginx启动起来，全部恢复正常访问，主机上的failover.sh守护进程会检测主机上的MySQL数据是否已经 完全从备机上同步过来。如果同步延迟时间为0，主机会自动接管内、外网虚拟IP，并发送ARPing包给内、外网网关，而备机也会自动摘除内、外网虚拟 IP。</p>
<p>(4)、整个切换流程均由failover.sh自动完成，无需人工处理。</p>
<p><strong>4、注意事项（很重要）：</strong><br />
(1)、crontab里的文件没有做自动同步，如果修改，需要手工在两台服务器上都做修改。</p>
<p>(2)、/data0/htdocs/目录内任何用ln -s建立的软连接，rsync不会自动同步，如果在一台服务器上建了软连接，需要手工在另外一台服务器上也建相同的软连接。</p>
<p>(3)、如果要删除/data0/htdocs/目录内的某些文件或目录，需要先删除处于活动状态（即绑定了虚拟IP）服务器上的文件或目录，再删除处于备用状态服务器上的文件或目录。</p>
<p>(4)、除了/data0/htdocs/（网页、程序、图片存放目录）、/usr/local/webserver/php/etc /（php.ini等配置文件目录）、/usr/local/webserver/nginx/conf/（Nginx配置文件目录）三个目录之外的其他 配置修改，需要在两台服务器上都做修改。</p>
<hr /><strong>二、配置文档与脚本：</strong><br />
<strong>1、主机、备机两台服务器的rsync配置（配置相同）</strong><br />
(1)、rsync配置文件</p>
<div>vi /etc/rsyncd.conf</div>
<p>输入一些内容并保存：</p>
<div>
<div>引用</div>
<div>uid = root<br />
gid = root<br />
use chroot = no<br />
max connections = 20<br />
pid file = /var/run/rsyncd.pid<br />
lock file = /var/run/rsync.lock<br />
log file = /var/log/rsyncd.log</p>
<p>[data0_htdocs]<br />
path = /data0/htdocs/<br />
ignore errors<br />
read only = no<br />
hosts allow = 192.168.146.0/24<br />
hosts deny = 0.0.0.0/32</p>
<p>[php_etc]<br />
path = /usr/local/webserver/php/etc/<br />
ignore errors<br />
read only = no<br />
hosts allow = 192.168.146.0/24<br />
hosts deny = 0.0.0.0/32</p>
<p>[nginx_conf]<br />
path = /usr/local/webserver/nginx/conf/<br />
ignore errors<br />
read only = no<br />
hosts allow = 192.168.146.0/24<br />
hosts deny = 0.0.0.0/32</p>
</div>
</div>
<p>(2)、启动rsync守护进程</p>
<div>/usr/bin/rsync &#8211;daemon</div>
<p><strong>2、两台MySQL互为主从的配置</strong><br />
这里就不详细写出互为主从的配置过程了，如果不懂的朋友可以在Google上搜一下。有一点需要指出，my.cnf配置文件中请加上skip-name-resolve参数，使用IP来进行MySQL帐号验证。</p>
<p><strong>3、主机、备机两台服务器负载监控、虚拟IP自动切换的failover.sh守护进程</strong><br />
(1)、启动failover.sh守护进程（为了开机能够自动运行，请将以下语句添加到/etc/rc.local文件中）：</p>
<div>/usr/bin/nohup /bin/sh /usr/local/webserver/failover/failover.sh 2&gt;&amp;1 &gt; /dev/null &amp;</div>
<p>(2)、停止failover.sh守护进程：</p>
<div>ps -ef | grep failover.sh</div>
<p>会显示以下信息：<br />
root     15428     1  0 Nov17 ?        00:00:03 /bin/sh /usr/local/webserver/failover/failover.sh<br />
root     20123  6878  0 16:16 pts/2    00:00:00 grep failover.sh<br />
然后杀死failover.sh的进程：</p>
<div>kill -9 15428</div>
<p>(3)、failover.sh代码内容（请注意其中的type设置，主机设为master，备机设为slave）：</p>
<div>#!/bin/sh<br />
LANG=C<br />
date=$(date -d “today” +”%Y-%m-%d %H:%M:%S”)</p>
<p>#&#8212;&#8212;&#8212;&#8212;&#8212;配置信息(开始)&#8212;&#8212;&#8212;&#8212;&#8212;<br />
#类型：主机设为master，备机设为slave<br />
type=”master”</p>
<p>#主机、备机切换日志路径<br />
logfile=”/var/log/failover.log”</p>
<p>#MySQL可执行文件地址，例如/usr/local/mysql/bin/mysql；MySQL用户名；密码；端口<br />
mysql_bin=”/usr/local/webserver/mysql/bin/mysql”<br />
mysql_username=”root”<br />
mysql_password=”123456&#8243;<br />
mysql_port=”3306&#8243;</p>
<p>#内网网关<br />
gateway_eth0=”192.168.146.1&#8243;</p>
<p>#主机内网真实IP<br />
rip_eth0_master=”192.168.146.213&#8243;</p>
<p>#备机内网真实IP<br />
rip_eth0_slave=”192.168.146.215&#8243;</p>
<p>#主机、备机内网共用的虚拟IP<br />
vip_eth0_share=”192.168.113.214&#8243;</p>
<p>#外网网关<br />
gateway_eth1=”72.249.146.193&#8243;</p>
<p>#主机外网真实IP<br />
rip_eth1_master=”72.249.146.213&#8243;</p>
<p>#备机外网真实IP<br />
rip_eth1_slave=”72.249.146.215&#8243;</p>
<p>#主机、备机外网共用的虚拟IP<br />
vip_eth1_share=”72.249.146.214&#8243;<br />
#&#8212;&#8212;&#8212;&#8212;&#8212;配置信息(结束)&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>#绑定内、外网虚拟IP<br />
function_bind_vip()<br />
{<br />
/sbin/ifconfig eth0:vip ${vip_eth0_share} broadcast ${vip_eth0_share} netmask 255.255.255.255 up<br />
/sbin/route add -host ${vip_eth0_share} dev eth0:vip<br />
/sbin/ifconfig eth1:vip ${vip_eth1_share} broadcast ${vip_eth1_share} netmask 255.255.255.255 up<br />
/sbin/route add -host ${vip_eth1_share} dev eth1:vip<br />
/usr/local/webserver/php/sbin/php-fpm reload<br />
kill -USR1 `cat /usr/local/webserver/nginx/logs/nginx.pid`<br />
/sbin/service crond start<br />
}</p>
<p>#解除内、外网虚拟IP<br />
function_remove_vip()<br />
{<br />
/sbin/ifconfig eth0:vip ${vip_eth0_share} broadcast ${vip_eth0_share} netmask 255.255.255.255 down<br />
/sbin/ifconfig eth1:vip ${vip_eth1_share} broadcast ${vip_eth1_share} netmask 255.255.255.255 down<br />
/sbin/service crond stop<br />
}</p>
<p>#主机向备机推送文件的函数<br />
function_rsync_master_to_slave()<br />
{<br />
/usr/bin/rsync -zrtuog /data0/htdocs/ ${rip_eth0_slave}::data0_htdocs/ &gt; /dev/null 2&gt;&amp;1<br />
/usr/bin/rsync -zrtuog /usr/local/webserver/php/etc/ ${rip_eth0_slave}::php_etc/ &gt; /dev/null 2&gt;&amp;1<br />
/usr/bin/rsync -zrtuog /usr/local/webserver/nginx/conf/ ${rip_eth0_slave}::nginx_conf/ &gt; /dev/null 2&gt;&amp;1<br />
}</p>
<p>#备机向主机推送文件的函数<br />
function_rsync_slave_to_master()<br />
{<br />
/usr/bin/rsync -zrtuog /data0/htdocs/ ${rip_eth0_master}::data0_htdocs/ &gt; /dev/null 2&gt;&amp;1<br />
/usr/bin/rsync -zrtuog /usr/local/webserver/php/etc/ ${rip_eth0_master}::php_etc/ &gt; /dev/null 2&gt;&amp;1<br />
/usr/bin/rsync -zrtuog /usr/local/webserver/nginx/conf/ ${rip_eth0_master}::nginx_conf/ &gt; /dev/null 2&gt;&amp;1<br />
}</p>
<p>#虚拟IP ARPing<br />
function_vip_arping()<br />
{<br />
/sbin/arping -I eth0 -c 3 -s ${vip_eth0_share} ${gateway_eth0} &gt; /dev/null 2&gt;&amp;1<br />
/sbin/arping -I eth1 -c 3 -s ${vip_eth1_share} ${gateway_eth1} &gt; /dev/null 2&gt;&amp;1<br />
}</p>
<p>while true<br />
do<br />
#用HTTP协议检查虚拟IP<br />
if  (curl -m 30 -G http://${vip_eth1_share}/ &gt; /dev/null 2&gt;&amp;1)  &amp;&amp; (${mysql_bin} -u”${mysql_username}” -p”${mysql_password}”  -P”${mysql_port}” -h”${vip_eth0_share}” -e”show slave status\G” &gt;  /dev/null 2&gt;&amp;1)<br />
then<br />
#取得与内网VIP绑定的服务器内网IP<br />
eth0_active_server=$(${mysql_bin}  -u”${mysql_username}” -p”${mysql_password}” -P”${mysql_port}”  -h”${vip_eth0_share}” -e”show slave status\G” &amp;#124; grep  “Master_Host” &amp;#124; awk -F &#8216;: &#8216; &#8216;{printf $2}&#8217;)</p>
<p>#如果内网VIP=主机内网IP（主机MySQL中的Master_Host显示的是备机的域名或IP），且本机为主机<br />
if [ "${eth0_active_server}" = "${rip_eth0_slave}" ] &amp;&amp; [ "${type}" = "master" ]<br />
then<br />
function_rsync_master_to_slave<br />
function_vip_arping<br />
#如果内网VIP=备机内网IP（备机MySQL中的Master_Host显示的是主机的域名或IP）<br />
elif [ "${eth0_active_server}" = "${rip_eth0_master}" ]<br />
then<br />
if  (curl -m 30 -G http://${rip_eth1_master}/ &gt; /dev/null 2&gt;&amp;1)  &amp;&amp; (${mysql_bin} -u”${mysql_username}” -p”${mysql_password}”  -P”${mysql_port}” -h”${rip_eth0_master}” -e”show slave status\G”  &amp;#124; grep “Seconds_Behind_Master: 0&#8243; &gt; /dev/null 2&gt;&amp;1)<br />
then<br />
#如果主机能够访问，数据库同步无延迟，且本机就是主机，那么由本机绑定虚拟IP<br />
if [ "${type}" = "master" ]<br />
then<br />
#如果本机为主机<br />
function_bind_vip<br />
function_vip_arping<br />
echo “${date} 主机已绑定虚拟IP!(Type:1)” &gt;&gt; ${logfile}<br />
else<br />
#如果本机为备机<br />
function_remove_vip<br />
echo “${date} 备机已去除虚拟IP!(Type:2)” &gt;&gt; ${logfile}<br />
fi<br />
else<br />
if [ "${type}" = "slave" ]<br />
then<br />
#如果本机为备机<br />
function_rsync_slave_to_master<br />
function_vip_arping<br />
fi<br />
fi<br />
fi<br />
else<br />
#虚拟IP无法访问时，判断主机能否访问<br />
if  (curl -m 30 -G http://${rip_eth1_master}/ &gt; /dev/null 2&gt;&amp;1)  &amp;&amp; (${mysql_bin} -u”${mysql_username}” -p”${mysql_password}”  -P”${mysql_port}” -h”${rip_eth0_master}” -e”show slave status\G” &gt;  /dev/null 2&gt;&amp;1)<br />
then<br />
#如果主机能够访问，且本机就是主机，那么由本机绑定虚拟IP<br />
if [ "${type}" = "master" ]<br />
then<br />
function_bind_vip<br />
function_vip_arping<br />
echo “${date} 主机已绑定虚拟IP!(Type:3)” &gt;&gt; ${logfile}<br />
else<br />
function_remove_vip<br />
echo “${date} 备机已去除虚拟IP!(Type:4)” &gt;&gt; ${logfile}<br />
fi<br />
elif  (curl -m 30 -G http://${rip_eth1_slave}/ &gt; /dev/null 2&gt;&amp;1)  &amp;&amp; (${mysql_bin} -u”${mysql_username}” -p”${mysql_password}”  -P”${mysql_port}” -h”${rip_eth0_slave}” -e”show slave status\G” &gt;  /dev/null 2&gt;&amp;1)<br />
then<br />
#如果主机不能访问而备机能够访问，且本机就是备机，那么由备机绑定虚拟IP<br />
if [ "${type}" = "slave" ]<br />
then<br />
function_bind_vip<br />
function_vip_arping<br />
echo “${date} 备机已绑定虚拟IP!(Type:5)” &gt;&gt; ${logfile}<br />
else<br />
function_remove_vip<br />
echo “${date} 主机已去除虚拟IP!(Type:6)” &gt;&gt; ${logfile}<br />
fi<br />
else<br />
echo “${date} 主机、备机全部无法访问!(Type:7)” &gt;&gt; ${logfile}<br />
fi<br />
fi<br />
#每次循环暂停20秒(即间隔20秒检测一次)<br />
sleep 20<br />
done</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.secblog.cn/server/571.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

