﻿<?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>P.Linux Laboratory &#187; Apache</title>
	<atom:link href="http://www.penglixun.com/tag/apache/feed" rel="self" type="application/rss+xml" />
	<link>http://www.penglixun.com</link>
	<description>MySQL DBA &#38; Linux SA</description>
	<lastBuildDate>Sun, 22 Jan 2012 16:34:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>配置全功能Cacti</title>
		<link>http://www.penglixun.com/tech/system/configure_all_function_cacti.html</link>
		<comments>http://www.penglixun.com/tech/system/configure_all_function_cacti.html#comments</comments>
		<pubDate>Tue, 17 Nov 2009 08:48:43 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[操作系统]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Cacti]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Memcached]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Nigix]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/PLX/Blog/?p=535</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/system/configure_all_function_cacti.html 今天终于配置好了Cacti，加入... ]]></description>
			<content:encoded><![CDATA[<p><span style="color: #888888;">本文内容遵从<a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" target="_blank">CC版权协议</a>, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明</br>网址: http://www.penglixun.com/tech/system/configure_all_function_cacti.html </p>
<p></span>今天终于配置好了Cacti，加入了MySQL/Linux/Apache/Memcached/Nigix模板。<br />
主要遇到的一个问题是修改轮询时间，默认5分钟，我想改成1分钟。<br />
要修改的地方是/etc/cron.d/cacti，改成1分钟间隔，*/<span style="color: #ff0000;">1 </span>* * * * root php /var/www/cacti/poller.php &amp;&gt;/dev/null<br />
然后最好先设置好轮询间隔再导入模板，这样可以在导入的时候把模板的间隔也改掉，否则要手动去改。<br />
修改了轮询时间需要重建轮询索引，最好还要关闭所有的设备再启动，怕有轮询器还没关闭。</p>
<p>过程很多地方有了：<br />
1062错误的解决方法：</p>
<p>http://yadayadayada.nl/archives/2009/04/000779-tuning_cacti_with_the_spine_poller_the_solution.html</p>
<p>http://yadayadayada.nl/archives/2008/11/000750-tuning_cacti_with_the_spine_poller_mysql_error_1062_.html</p>
<p>采用<acronym title="Secure Shell">SSH</acronym>方式监控：http://code.google.com/p/mysql-cacti-templates/wiki/SSHBasedTemplates<br />
MySQL模板安装方法：http://xok.la/2009/05/cacti_mysql_monitor.html<br />
Cacti源代码安装方法：http://www.askwan.com/post/48/<br />
Cacti中文版安装方法：http://hi.baidu.com/%C2%ED%B3%A4%D5%F72008/blog/item/566cbb440ac6742fcefca347.html</p><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2012年01月23日 -- <a href="http://www.penglixun.com/tech/database/case_about_innodb_faster_than_oracle.html" title="一个InnoDB性能超过Oracle的调优Case">一个InnoDB性能超过Oracle的调优Case</a> (1)</li><li>2009年12月15日 -- <a href="http://www.penglixun.com/tech/system/memcached_complete_analyze.html" title="[转] memcached完全剖析">[转] memcached完全剖析</a> (0)</li><li>2009年10月25日 -- <a href="http://www.penglixun.com/tech/database/mysql_gui_tool_in_linux.html" title="MySQL GUI Tool在Linux下运行">MySQL GUI Tool在Linux下运行</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/system/configure_all_function_cacti.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nginx 0.7.x + PHP 5.2.10（FastCGI）搭建胜过Apache十倍的Web服务器</title>
		<link>http://www.penglixun.com/tech/system/nginx_php_fastcgi_better_apache.html</link>
		<comments>http://www.penglixun.com/tech/system/nginx_php_fastcgi_better_apache.html#comments</comments>
		<pubDate>Wed, 15 Jul 2009 06:58:24 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[操作系统]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[FastCGI]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/PLX/Blog/?p=283</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/system/nginx_php_fastcgi_better_apache.html [文章作者：张宴 本文版本... ]]></description>
			<content:encoded><![CDATA[<p><span style="color: #888888;">本文内容遵从<a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" target="_blank">CC版权协议</a>, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明</br>网址: http://www.penglixun.com/tech/system/nginx_php_fastcgi_better_apache.html </p>
<p></span>[文章作者：张宴 本文版本：v5.4 最后修改：<span style="COLOR: #ff0000">2009.06.26</span> 转载请注明原文链接：<a href="http://blog.s135.com/nginx_php_v5/" target="_blank">http://blog.s135.com/nginx_php_v5/</a>]</p>
<p>　　前言：本文是我撰写的关于搭建“Nginx + <acronym title="Pre-Hypertext Processing">PHP</acronym>（FastCGI）”Web服务器的第5篇文章。本系列文章作为国内最早详细介绍 Nginx + <acronym title="Pre-Hypertext Processing">PHP</acronym> 安装、配置、使用的资料之一，为推动 Nginx 在国内的发展产生了积极的作用。这是一篇关于Nginx 0.7.x系列版本的文章，安装、配置方式与第4篇文章相差不大，但增加了MySQL安装配置的信息、<strong><acronym title="Pre-Hypertext Processing">PHP</acronym> 5.2.10 的 php-fpm 补丁</strong>。Nginx 0.7.x系列版本虽然为开发版，但在很多大型网站的生产环境中已经使用。</p>
<p>　　<span id="more-283"></span>链接：《<a href="post/297/" target="_blank">2007年9月的第1版</a>》、《<a href="post/314/" target="_blank">2007年12月的第2版</a>》、《<a href="post/351/" target="_blank">2008年6月的第3版</a>》、《<a href="nginx_php_v4/" target="_blank">2008年8月的第4版</a>》</p>
<p>　　<a href="http://blog.s135.com/attachment/200806/nginx.png" target="_blank"><img style="border: 0px;" 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”) 是一个高性能的 <acronym title="HyperText Transfer Protocol">HTTP</acronym> 和反向代理服务器，也是一个 <acronym title="Internet Message Access Protocol">IMAP</acronym>/<acronym title="Post Office Protocol 3">POP3</acronym>/<acronym title="Simple Mail Transfer Protocol">SMTP</acronym> 代理服务器。 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.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.douban.com/" target="_blank">豆瓣</a>、<a href="http://www.yupoo.com/" target="_blank">YUPOO相册</a>、<a href="http://www.hainei.com/" target="_blank">海内SNS</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.7.61 + <acronym title="Pre-Hypertext Processing">PHP</acronym> 5.2.10 (FastCGI) 可以承受3万以上的并发连接数，相当于同等环境下Apache的10倍</strong>。</p>
<p>　　根据我的经验，4GB内存的服务器+Apache（prefork模式）一般只能处理3000个并发连接，因为它们将占用3GB以上的内存，还得为系统预留1GB的内存。我曾经就有两台Apache服务器，因为在配置文件中设置的MaxClients为4000，当Apache并发连接数达到3800时，导致服务器内存和Swap空间用满而崩溃。</p>
<p>　　而这台 Nginx 0.7.61 + <acronym title="Pre-Hypertext Processing">PHP</acronym> 5.2.10 (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.7.61 + <acronym title="Pre-Hypertext Processing">PHP</acronym> 5.2.10 (FastCGI) 服务器的<acronym title="Pre-Hypertext Processing">PHP</acronym>程序，仍然速度飞快。下图为Nginx的状态监控页面，显示的活动连接数为28457（关于Nginx的监控页配置，会在本文接下来所给出的Nginx配置文件中写明）：</p>
<p>　　<a href="http://blog.s135.com/attachment/200712/nginx_status.png" target="_blank"><img style="border: 0px;" title="点击在新窗口中浏览此图片" src="http://blog.s135.com/attachment/200712/nginx_status.png" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<p>　　我生产环境下的两台Nginx + PHP5（FastCGI）服务器，跑多个一般复杂的纯<acronym title="Pre-Hypertext Processing">PHP</acronym>动态程序，单台Nginx + PHP5（FastCGI）服务器跑<acronym title="Pre-Hypertext Processing">PHP</acronym>动态程序的处理能力已经超过“<span style="COLOR: #ff0000">700次请求/秒</span>”，相当于每天可以承受6000万（700*60*60*24=60480000）的访问量（<a href="read.php/334.htm" target="_blank">更多信息见此</a>），而服务器的系统负载也不高：</p>
<p>　　<a href="http://blog.s135.com/attachment/200803/nginx_php_la.gif" target="_blank"><img style="border: 0px;" title="点击在新窗口中浏览此图片" src="http://blog.s135.com/attachment/200803/nginx_php_la.gif" 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 + <acronym title="Pre-Hypertext Processing">PHP</acronym> #####</p>
<div>引用</div>
<p>[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, <acronym title="GNU General Public License">GPL</acronym> 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>
<p>　　测试结果：#####  Apache + <acronym title="Pre-Hypertext Processing">PHP</acronym> #####</p>
<div>引用</div>
<p>[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, <acronym title="GNU General Public License">GPL</acronym> 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>
<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 style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">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 style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">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 style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">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 />
　　本文中提到的所有开源软件为截止到<span style="COLOR: #ff0000">2009年06月26日</span>的最新稳定版。<br />
　　①、从软件的官方网站下载：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">mkdir -p /data0/software<br />
cd /data0/software<br />
wget <a href="http://sysoev.ru/nginx/nginx-0.7.61.tar.gz" target="_blank">http://sysoev.ru/nginx/nginx-0.7.61.tar.gz</a><br />
wget <a href="http://www.php.net/get/php-5.2.10.tar.gz/from/this/mirror" target="_blank">http://www.php.net/get/php-5.2.10.tar.gz/from/this/mirror</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/phpfpm/php-5.2.10-fpm-0.5.11.diff.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/phpfpm/php-5.2.10-fpm-0.5.11.diff.gz</a><br />
wget <a href="http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.35.tar.gz/from/http://mysql.he.net/" target="_blank">http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.35.tar.gz/from/http://mysql.he.net/</a><br />
wget <a href="http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.tar.gz" target="_blank">http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.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-7.9.tar.gz" target="_blank">ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.9.tar.gz</a><br />
wget <a href="http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2" target="_blank">http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.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.2.2.tgz" target="_blank">http://pecl.php.net/get/imagick-2.2.2.tgz</a></div>
<p>　　②、从<a href="http://blog.s135.com" target="_blank">blog.s135.com</a>下载（比较稳定，只允许在本站，或者在Linux/Unix下通过Wget、Curl等命令下载以下软件）：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">mkdir -p /data0/software<br />
cd /data0/software<br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/nginx/nginx-0.7.61.tar.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/nginx/nginx-0.7.61.tar.gz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/php/php-5.2.10.tar.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/php/php-5.2.10.tar.gz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/phpfpm/php-5.2.10-fpm-0.5.11.diff.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/phpfpm/php-5.2.10-fpm-0.5.11.diff.gz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/mysql/mysql-5.1.35.tar.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/mysql/mysql-5.1.35.tar.gz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/libiconv/libiconv-1.13.tar.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/libiconv/libiconv-1.13.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-7.9.tar.gz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/pcre/pcre-7.9.tar.gz</a><br />
wget <a href="http://blog.s135.com/soft/linux/nginx_php/eaccelerator/eaccelerator-0.9.5.3.tar.bz2" target="_blank">http://blog.s135.com/soft/linux/nginx_php/eaccelerator/eaccelerator-0.9.5.3.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.2.2.tgz" target="_blank">http://blog.s135.com/soft/linux/nginx_php/imagick/imagick-2.2.2.tgz</a></div>
<p> </p>
<hr />　　<strong>二、安装<acronym title="Pre-Hypertext Processing">PHP</acronym> 5.2.10（FastCGI模式）</strong><br />
　　1、编译安装<acronym title="Pre-Hypertext Processing">PHP</acronym> 5.2.10所需的支持库：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">tar zxvf libiconv-1.13.tar.gz<br />
cd libiconv-1.13/<br />
./configure &#8211;prefix=/usr/local<br />
make<br />
make install<br />
cd ../</div>
<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</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>
<p> </p>
<hr />　　2、编译安装MySQL 5.1.35</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">/usr/sbin/groupadd mysql<br />
/usr/sbin/useradd -g mysql mysql<br />
tar zxvf mysql-5.1.35.tar.gz<br />
cd mysql-5.1.35/<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=innobase<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>
<p> </p>
<hr />　　附：以下为附加步骤，如果你想在这台服务器上运行MySQL数据库，则执行以下两步。如果你只是希望让<acronym title="Pre-Hypertext Processing">PHP</acronym>支持MySQL扩展库，能够连接其他服务器上的MySQL数据库，那么，以下两步无需执行。</p>
<p>　　①、创建MySQL数据库存放目录</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">mkdir -p /data0/mysql/3306/data/<br />
chown -R mysql:mysql /data0/mysql/</div>
<p>　　②、以mysql用户帐号的身份建立数据表：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">/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 style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">vi /data0/mysql/3306/my.cnf</div>
<p>　　输入以下内容：</p>
<div>引用</div>
<p>[client]<br />
default-character-set = utf8<br />
port    = 3306<br />
socket  = /tmp/mysql.sock</p>
<p>[mysql]<br />
prompt=”(\u:blog.s135.com:)[\d]&gt; ”<br />
no-auto-rehash</p>
<p>[mysqld]<br />
#default-character-set = utf8<br />
user    = mysql<br />
port    = 3306<br />
socket  = /tmp/mysql.sock<br />
basedir = /usr/local/webserver/mysql<br />
datadir = /data0/mysql/3306/data<br />
open_files_limit    = 10240<br />
back_log = 600<br />
max_connections = 3000<br />
max_connect_errors = 6000<br />
table_cache = 614<br />
external-locking = FALSE<br />
max_allowed_packet = 32M<br />
sort_buffer_size = 2M<br />
join_buffer_size = 2M<br />
thread_cache_size = 300<br />
thread_concurrency = 8<br />
query_cache_size = 32M<br />
query_cache_limit = 2M<br />
query_cache_min_res_unit = 2k<br />
default-storage-engine = MyISAM<br />
default_table_type = 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 = 1<br />
log_long_format<br />
log-bin = /data0/mysql/3306/binlog<br />
binlog_cache_size = 4M<br />
binlog_format = MIXED<br />
max_binlog_cache_size = 8M<br />
max_binlog_size = 512M<br />
expire_logs_days = 7<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_max_extra_sort_file_size = 10G<br />
myisam_repair_threads = 1<br />
myisam_recover</p>
<p>skip-name-resolve<br />
master-connect-retry = 10<br />
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396</p>
<p>server-id = 1</p>
<p>innodb_additional_mem_pool_size = 16M<br />
innodb_buffer_pool_size = 2048M<br />
innodb_data_file_path = ibdata1:1024M: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<br />
[mysqldump]<br />
quick<br />
max_allowed_packet = 32M</p>
<p>　　④、创建管理MySQL数据库的shell脚本：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">vi /data0/mysql/3306/mysql</div>
<p>　　输入以下内容（这里的用户名admin和密码12345678接下来的步骤会创建）：</p>
<div>
<div><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="#">view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="#">copy to clipboard</a><a onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="#">print</a><a onclick="dp.sh.Toolbar.Command('About',this);return false;" href="#">?</a></div>
</div>
<li><span><span>#!/bin/sh </span><span>  </span></span></li>
<li><span>  </span></li>
<li><span>mysql_port=3306   </span></li>
<li><span>mysql_username=</span><span>“admin”</span><span>  </span></li>
<li><span>mysql_password=</span><span>“12345678&#8243;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>function_start_mysql()   </span></li>
<li><span>{   </span></li>
<li><span>    printf </span><span>“Starting MySQL&#8230;\n”</span><span>  </span></li>
<li><span>    /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;   </span></li>
<li><span>}   </span></li>
<li><span>  </span></li>
<li><span>function_stop_mysql()   </span></li>
<li><span>{   </span></li>
<li><span>    printf </span><span>“Stoping MySQL&#8230;\n”</span><span>  </span></li>
<li><span>    /usr/local/webserver/mysql/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S /tmp/mysql.sock shutdown   </span></li>
<li><span>}   </span></li>
<li><span>  </span></li>
<li><span>function_restart_mysql()   </span></li>
<li><span>{   </span></li>
<li><span>    printf </span><span>“Restarting MySQL&#8230;\n”</span><span>  </span></li>
<li><span>    function_stop_mysql   </span></li>
<li><span>    sleep 5   </span></li>
<li><span>    function_start_mysql   </span></li>
<li><span>}   </span></li>
<li><span>  </span></li>
<li><span>function_kill_mysql()   </span></li>
<li><span>{   </span></li>
<li><span>    kill -9 $(ps -ef | grep </span><span>&#8216;bin/mysqld_safe&#8217;</span><span> | grep ${mysql_port} | awk </span><span>&#8216;{printf $2}&#8217;</span><span>)   </span></li>
<li><span>    kill -9 $(ps -ef | grep </span><span>&#8216;libexec/mysqld&#8217;</span><span> | grep ${mysql_port} | awk </span><span>&#8216;{printf $2}&#8217;</span><span>)   </span></li>
<li><span>}   </span></li>
<li><span>  </span></li>
<li><span> </span><span>if</span><span> [ </span><span>"$1"</span><span> = </span><span>"start"</span><span> ]; then   </span></li>
<li><span>    function_start_mysql   </span></li>
<li><span>elif [ </span><span>"$1"</span><span> = </span><span>"stop"</span><span> ]; then   </span></li>
<li><span>    function_stop_mysql   </span></li>
<li><span>elif [ </span><span>"$1"</span><span> = </span><span>"restart"</span><span> ]; then   </span></li>
<li><span>function_restart_mysql   </span></li>
<li><span>elif [ </span><span>"$1"</span><span> = </span><span>"kill"</span><span> ]; then   </span></li>
<li><span>function_kill_mysql   </span></li>
<li><span> </span><span>else</span><span>  </span></li>
<li><span>    printf </span><span>“Usage: /data0/mysql/${mysql_port}/mysql {start|stop|restart|kill}\n”</span><span>  </span></li>
<li><span>fi  </span></li>
<p><textarea style="DISPLAY: none" cols="100" rows="15" name="code">#!/bin/sh  mysql_port=3306 mysql_username=”admin” mysql_password=”12345678&#8243;  function_start_mysql() {     printf “Starting MySQL&#8230;\n”     /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; }  function_stop_mysql() {     printf “Stoping MySQL&#8230;\n”     /usr/local/webserver/mysql/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S /tmp/mysql.sock shutdown }  function_restart_mysql() {     printf “Restarting MySQL&#8230;\n”     function_stop_mysql     sleep 5     function_start_mysql }  function_kill_mysql() {     kill -9 $(ps -ef | grep &#8216;bin/mysqld_safe&#8217; | grep ${mysql_port} | awk &#8216;{printf $2}&#8217;)     kill -9 $(ps -ef | grep &#8216;libexec/mysqld&#8217; | grep ${mysql_port} | awk &#8216;{printf $2}&#8217;) }  if [ "$1" = "start" ]; then     function_start_mysql elif [ "$1" = "stop" ]; then     function_stop_mysql elif [ "$1" = "restart" ]; then function_restart_mysql elif [ "$1" = "kill" ]; then function_kill_mysql else     printf “Usage: /data0/mysql/${mysql_port}/mysql {start|stop|restart|kill}\n” fi</textarea><br />
　　⑤、赋予shell脚本可执行权限：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">chmod +x /data0/mysql/3306/mysql</div>
<p>　　⑥、启动MySQL：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">/data0/mysql/3306/mysql start</div>
<p>　　⑦、通过命令行登录管理MySQL服务器（提示输入密码时直接回车）：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">/usr/local/webserver/mysql/bin/mysql -u root -p -S /tmp/mysql.sock</div>
<p>　　⑧、输入以下<acronym title="Structured Query Language">SQL</acronym>语句，创建一个具有root权限的用户（admin）和密码（12345678）：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">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 style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">/data0/mysql/3306/mysql stop</div>
<p> </p>
<hr />　　3、编译安装<acronym title="Pre-Hypertext Processing">PHP</acronym>（FastCGI模式）</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">tar zxvf php-5.2.10.tar.gz<br />
gzip -cd php-5.2.10-fpm-0.5.11.diff.gz | patch -d php-5.2.10 -p1<br />
cd php-5.2.10/<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 &#8211;without-pear<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>
<p> </p>
<hr />　　4、编译安装PHP5扩展模块</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">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 ../</div>
<p>tar jxvf eaccelerator-0.9.5.3.tar.bz2<br />
cd eaccelerator-0.9.5.3/<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.2.2.tgz<br />
cd imagick-2.2.2/<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>　　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>　　<strong>自动修改：</strong>若嫌手工修改麻烦，可执行以下shell命令，自动完成对php.ini文件的修改：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">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</div>
<p>　　6、配置eAccelerator加速<acronym title="Pre-Hypertext Processing">PHP</acronym>：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">mkdir -p /usr/local/webserver/eaccelerator_cache<br />
vi /usr/local/webserver/php/etc/php.ini</div>
<p>　　按shift+g键跳到配置文件的最末尾，加上以下配置信息：</p>
<div>引用</div>
<p>[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;</p>
<hr />　　7、创建www用户和组，以及供blog.s135.com和<a href="http://www.s135.com" target="_blank">www.s135.com</a>两个虚拟主机使用的目录：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">/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是为<acronym title="Pre-Hypertext Processing">PHP</acronym>打的一个FastCGI管理补丁，可以平滑变更php.ini配置而无需重启php-cgi）：<br />
　　在/usr/local/webserver/php/etc/目录中创建php-fpm.conf文件：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">rm -f /usr/local/webserver/php/etc/php-fpm.conf<br />
vi /usr/local/webserver/php/etc/php-fpm.conf</div>
<p>　　输入以下内容（如果您安装 Nginx + <acronym title="Pre-Hypertext Processing">PHP</acronym> 用于程序调试，请将以下的&lt;value name=”display_errors”&gt;0&lt;/value&gt;改为&lt;value name=”display_errors”&gt;1&lt;/value&gt;，以便显示<acronym title="Pre-Hypertext Processing">PHP</acronym>错误信息，否则，Nginx 会报状态为500的空白错误页）：</p>
<div>
<div><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="#">view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="#">copy to clipboard</a><a onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="#">print</a><a onclick="dp.sh.Toolbar.Command('About',this);return false;" href="#">?</a></div>
</div>
<li><span><span>&lt;?</span>xml</span><span> </span><span>version</span><span>=</span>“1.0&#8243;<span> </span><span>?&gt;</span><span>  </span></li>
<li><span> </span><span>&lt;</span>configuration<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>  All relative paths in this config are relative to php&#8217;s install prefix   </span></li>
<li><span>  </span></li>
<li><span>  </span><span>&lt;</span>section<span> </span><span>name</span><span>=</span>“global_options”<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>    Pid file   </span></li>
<li><span>    </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“pid_file”<span>&gt;</span><span>/usr/local/webserver/php/logs/php-fpm.pid</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>    Error log file   </span></li>
<li><span>    </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“error_log”<span>&gt;</span><span>/usr/local/webserver/php/logs/php-fpm.log</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>    Log level   </span></li>
<li><span>    </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“log_level”<span>&gt;</span><span>notice</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>    When this amount of php processes exited with SIGSEGV or SIGBUS &#8230;   </span></li>
<li><span>    </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“emergency_restart_threshold”<span>&gt;</span><span>10</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>    &#8230; in a less than this interval of time, a graceful restart will be initiated.   </span></li>
<li><span>    Useful to work around accidental curruptions in accelerator&#8217;s shared memory.   </span></li>
<li><span>    </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“emergency_restart_interval”<span>&gt;</span><span>1m</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>    Time limit on waiting child&#8217;s reaction on signals from master   </span></li>
<li><span>    </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“process_control_timeout”<span>&gt;</span><span>5s</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>    Set to &#8217;no&#8217; to debug fpm   </span></li>
<li><span>    </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“daemonize”<span>&gt;</span><span>yes</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>  </span><span>&lt;/</span>section<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>  </span><span>&lt;</span>workers<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>    </span><span>&lt;</span>section<span> </span><span>name</span><span>=</span>“pool”<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      Name of pool. Used in logs and stats.   </span></li>
<li><span>      </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“name”<span>&gt;</span><span>default</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      Address to accept fastcgi requests on.   </span></li>
<li><span>      Valid syntax is &#8217;ip.ad.re.ss:port&#8217; or just &#8217;port&#8217; or &#8217;/path/to/unix/socket&#8217;   </span></li>
<li><span>      </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“listen_address”<span>&gt;</span><span>127.0.0.1:9000</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“listen_options”<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>        Set listen(2) backlog   </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“backlog”<span>&gt;</span><span>-1</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>        Set permissions for unix socket, if one used.   </span></li>
<li><span>        In Linux read/write permissions must be set in order to allow connections from web server.   </span></li>
<li><span>        Many BSD-derrived systems allow connections regardless of permissions.   </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“owner”<span>&gt;</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“group”<span>&gt;</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“mode”<span>&gt;</span><span>0666</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>      </span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      Additional php.ini defines, specific to this pool of workers.   </span></li>
<li><span>      </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“php_defines”<span>&gt;</span><span>  </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“sendmail_path”<span>&gt;</span><span>/usr/sbin/sendmail -t -i</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“display_errors”<span>&gt;</span><span>1</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>      </span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      Unix user of processes   </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“user”<span>&gt;</span><span>www</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      Unix group of processes   </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“group”<span>&gt;</span><span>www</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      Process manager settings   </span></li>
<li><span>      </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“pm”<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>        Sets style of controling worker process count.   </span></li>
<li><span>        Valid values are &#8217;static&#8217; and &#8217;apache-like&#8217;   </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“style”<span>&gt;</span><span>static</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>        Sets the limit on the number of simultaneous requests that will be served.   </span></li>
<li><span>        Equivalent to Apache MaxClients directive.   </span></li>
<li><span>        Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi   </span></li>
<li><span>        Used with any pm_style.   </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“max_children”<span>&gt;</span><span>128</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>        Settings group for &#8217;apache-like&#8217; pm style   </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“apache_like”<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>          Sets the number of server processes created on startup.   </span></li>
<li><span>          Used only when &#8217;apache-like&#8217; pm_style is selected   </span></li>
<li><span>          </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“StartServers”<span>&gt;</span><span>20</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>          Sets the desired minimum number of idle server processes.   </span></li>
<li><span>          Used only when &#8217;apache-like&#8217; pm_style is selected   </span></li>
<li><span>          </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“MinSpareServers”<span>&gt;</span><span>5</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>          Sets the desired maximum number of idle server processes.   </span></li>
<li><span>          Used only when &#8217;apache-like&#8217; pm_style is selected   </span></li>
<li><span>          </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“MaxSpareServers”<span>&gt;</span><span>35</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>        </span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      </span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      The timeout (in seconds) for serving a single request after which the worker process will be terminated   </span></li>
<li><span>      Should be used when &#8217;max_execution_time&#8217; ini option does not stop script execution for some reason   </span></li>
<li><span>      &#8217;0s&#8217; means &#8217;off&#8217;   </span></li>
<li><span>      </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“request_terminate_timeout”<span>&gt;</span><span>0s</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file   </span></li>
<li><span>      &#8217;0s&#8217; means &#8217;off&#8217;   </span></li>
<li><span>      </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“request_slowlog_timeout”<span>&gt;</span><span>0s</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      The log file for slow requests   </span></li>
<li><span>      </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“slowlog”<span>&gt;</span><span>logs/slow.log</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      Set open file desc rlimit   </span></li>
<li><span>      </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“rlimit_files”<span>&gt;</span><span>51200</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      Set max core size rlimit   </span></li>
<li><span>      </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“rlimit_core”<span>&gt;</span><span>0</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      Chroot to this directory at the start, absolute path   </span></li>
<li><span>      </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“chroot”<span>&gt;</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      Chdir to this directory at the start, absolute path   </span></li>
<li><span>      </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“chdir”<span>&gt;</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      Redirect workers&#8217; stdout and stderr into main error log.   </span></li>
<li><span>      If not set, they will be redirected to /dev/null, according to FastCGI specs   </span></li>
<li><span>      </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“catch_workers_output”<span>&gt;</span><span>yes</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      How much requests each process should execute before respawn.   </span></li>
<li><span>      Useful to work around memory leaks in 3rd party libraries.   </span></li>
<li><span>      For endless request processing please specify 0   </span></li>
<li><span>      Equivalent to PHP_FCGI_MAX_REQUESTS   </span></li>
<li><span>      </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“max_requests”<span>&gt;</span><span>102400</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect.   </span></li>
<li><span>      Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+)   </span></li>
<li><span>      Makes sense only with AF_INET listening socket.   </span></li>
<li><span>      </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“allowed_clients”<span>&gt;</span><span>127.0.0.1</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>      Pass environment variables like LD_LIBRARY_PATH   </span></li>
<li><span>      All $VARIABLEs are taken from current environment   </span></li>
<li><span>      </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“environment”<span>&gt;</span><span>  </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“HOSTNAME”<span>&gt;</span><span>$HOSTNAME</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“PATH”<span>&gt;</span><span>/usr/local/bin:/usr/bin:/bin</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“TMP”<span>&gt;</span><span>/tmp</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“TMPDIR”<span>&gt;</span><span>/tmp</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“TEMP”<span>&gt;</span><span>/tmp</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“OSTYPE”<span>&gt;</span><span>$OSTYPE</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“MACHTYPE”<span>&gt;</span><span>$MACHTYPE</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>        </span><span>&lt;</span>value<span> </span><span>name</span><span>=</span>“MALLOC_CHECK_”<span>&gt;</span><span>2</span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>      </span><span>&lt;/</span>value<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>    </span><span>&lt;/</span>section<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span>  </span><span>&lt;/</span>workers<span>&gt;</span><span>  </span></li>
<li><span>  </span></li>
<li><span> </span><span>&lt;/</span>configuration<span>&gt;</span><span>  </span></li>
<p><textarea style="DISPLAY: none" cols="100" rows="15" name="code">&lt;?xml version=”1.0&#8243; ?&gt; &lt;configuration&gt;    All relative paths in this config are relative to php&#8217;s install prefix    &lt;section name=”global_options”&gt;      Pid file     &lt;value name=”pid_file”&gt;/usr/local/webserver/php/logs/php-fpm.pid&lt;/value&gt;      Error log file     &lt;value name=”error_log”&gt;/usr/local/webserver/php/logs/php-fpm.log&lt;/value&gt;      Log level     &lt;value name=”log_level”&gt;notice&lt;/value&gt;      When this amount of php processes exited with SIGSEGV or SIGBUS &#8230;     &lt;value name=”emergency_restart_threshold”&gt;10&lt;/value&gt;      &#8230; in a less than this interval of time, a graceful restart will be initiated.     Useful to work around accidental curruptions in accelerator&#8217;s shared memory.     &lt;value name=”emergency_restart_interval”&gt;1m&lt;/value&gt;      Time limit on waiting child&#8217;s reaction on signals from master     &lt;value name=”process_control_timeout”&gt;5s&lt;/value&gt;      Set to &#8216;no&#8217; to debug fpm     &lt;value name=”daemonize”&gt;yes&lt;/value&gt;    &lt;/section&gt;    &lt;workers&gt;      &lt;section name=”pool”&gt;        Name of pool. Used in logs and stats.       &lt;value name=”name”&gt;default&lt;/value&gt;        Address to accept fastcgi requests on.       Valid syntax is &#8216;ip.ad.re.ss:port&#8217; or just &#8216;port&#8217; or &#8216;/path/to/unix/socket&#8217;       &lt;value name=”listen_address”&gt;127.0.0.1:9000&lt;/value&gt;        &lt;value name=”listen_options”&gt;          Set listen(2) backlog         &lt;value name=”backlog”&gt;-1&lt;/value&gt;          Set permissions for unix socket, if one used.         In Linux read/write permissions must be set in order to allow connections from web server.         Many BSD-derrived systems allow connections regardless of permissions.         &lt;value name=”owner”&gt;&lt;/value&gt;         &lt;value name=”group”&gt;&lt;/value&gt;         &lt;value name=”mode”&gt;0666&lt;/value&gt;       &lt;/value&gt;        Additional php.ini defines, specific to this pool of workers.       &lt;value name=”php_defines”&gt;         &lt;value name=”sendmail_path”&gt;/usr/sbin/sendmail -t -i&lt;/value&gt;         &lt;value name=”display_errors”&gt;1&lt;/value&gt;       &lt;/value&gt;        Unix user of processes         &lt;value name=”user”&gt;www&lt;/value&gt;        Unix group of processes         &lt;value name=”group”&gt;www&lt;/value&gt;        Process manager settings       &lt;value name=”pm”&gt;          Sets style of controling worker process count.         Valid values are &#8216;static&#8217; and &#8216;apache-like&#8217;         &lt;value name=”style”&gt;static&lt;/value&gt;          Sets the limit on the number of simultaneous requests that will be served.         Equivalent to Apache MaxClients directive.         Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi         Used with any pm_style.         &lt;value name=”max_children”&gt;128&lt;/value&gt;          Settings group for &#8216;apache-like&#8217; pm style         &lt;value name=”apache_like”&gt;            Sets the number of server processes created on startup.           Used only when &#8216;apache-like&#8217; pm_style is selected           &lt;value name=”StartServers”&gt;20&lt;/value&gt;            Sets the desired minimum number of idle server processes.           Used only when &#8216;apache-like&#8217; pm_style is selected           &lt;value name=”MinSpareServers”&gt;5&lt;/value&gt;            Sets the desired maximum number of idle server processes.           Used only when &#8216;apache-like&#8217; pm_style is selected           &lt;value name=”MaxSpareServers”&gt;35&lt;/value&gt;          &lt;/value&gt;        &lt;/value&gt;        The timeout (in seconds) for serving a single request after which the worker process will be terminated       Should be used when &#8216;max_execution_time&#8217; ini option does not stop script execution for some reason       &#8217;0s&#8217; means &#8216;off&#8217;       &lt;value name=”request_terminate_timeout”&gt;0s&lt;/value&gt;        The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file       &#8217;0s&#8217; means &#8216;off&#8217;       &lt;value name=”request_slowlog_timeout”&gt;0s&lt;/value&gt;        The log file for slow requests       &lt;value name=”slowlog”&gt;logs/slow.log&lt;/value&gt;        Set open file desc rlimit       &lt;value name=”rlimit_files”&gt;51200&lt;/value&gt;        Set max core size rlimit       &lt;value name=”rlimit_core”&gt;0&lt;/value&gt;        Chroot to this directory at the start, absolute path       &lt;value name=”chroot”&gt;&lt;/value&gt;        Chdir to this directory at the start, absolute path       &lt;value name=”chdir”&gt;&lt;/value&gt;        Redirect workers&#8217; stdout and stderr into main error log.       If not set, they will be redirected to /dev/null, according to FastCGI specs       &lt;value name=”catch_workers_output”&gt;yes&lt;/value&gt;        How much requests each process should execute before respawn.       Useful to work around memory leaks in 3rd party libraries.       For endless request processing please specify 0       Equivalent to PHP_FCGI_MAX_REQUESTS       &lt;value name=”max_requests”&gt;102400&lt;/value&gt;        Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect.       Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+)       Makes sense only with AF_INET listening socket.       &lt;value name=”allowed_clients”&gt;127.0.0.1&lt;/value&gt;        Pass environment variables like LD_LIBRARY_PATH       All $VARIABLEs are taken from current environment       &lt;value name=”environment”&gt;         &lt;value name=”HOSTNAME”&gt;$HOSTNAME&lt;/value&gt;         &lt;value name=”PATH”&gt;/usr/local/bin:/usr/bin:/bin&lt;/value&gt;         &lt;value name=”TMP”&gt;/tmp&lt;/value&gt;         &lt;value name=”TMPDIR”&gt;/tmp&lt;/value&gt;         &lt;value name=”TEMP”&gt;/tmp&lt;/value&gt;         &lt;value name=”OSTYPE”&gt;$OSTYPE&lt;/value&gt;         &lt;value name=”MACHTYPE”&gt;$MACHTYPE&lt;/value&gt;         &lt;value name=”MALLOC_CHECK_”&gt;2&lt;/value&gt;       &lt;/value&gt;      &lt;/section&gt;    &lt;/workers&gt;  &lt;/configuration&gt;</textarea>　　9、启动php-cgi进程，监听127.0.0.1的9000端口，进程数为200（如果服务器内存小于3GB，可以只开启64个进程），用户为www：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">ulimit -SHn 51200<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.7.61</strong><br />
　　1、安装Nginx所需的pcre库：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">tar zxvf pcre-7.9.tar.gz<br />
cd pcre-7.9/<br />
./configure<br />
make &amp;&amp; make install<br />
cd ../</div>
<p>　　2、安装Nginx</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">tar zxvf nginx-0.7.61.tar.gz<br />
cd nginx-0.7.61/<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 style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">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 style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">rm -f /usr/local/webserver/nginx/conf/nginx.conf<br />
vi /usr/local/webserver/nginx/conf/nginx.conf</div>
<p>　　输入以下内容：</p>
<div>引用</div>
<p>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 51200;</p>
<p>events<br />
{<br />
  use epoll;<br />
  worker_connections 51200;<br />
}</p>
<p>http<br />
{<br />
  include       mime.types;<br />
  default_type  application/octet-stream;</p>
<p>  #charset  gb2312;<br />
      <br />
  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;<br />
      <br />
  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;    <br />
                            <br />
    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 />
    }<br />
    <br />
    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 />
              &#8217;$status $body_bytes_sent “$http_referer” &#8216;<br />
              &#8217;”$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>
<p>　　②、在/usr/local/webserver/nginx/conf/目录中创建fcgi.conf文件：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">vi /usr/local/webserver/nginx/conf/fcgi.conf</div>
<p>　　输入以下内容：</p>
<div>引用</div>
<p>fastcgi_param  GATEWAY_INTERFACE  <acronym title="Common Gateway Interface">CGI</acronym>/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># <acronym title="Pre-Hypertext Processing">PHP</acronym> only, required if <acronym title="Pre-Hypertext Processing">PHP</acronym> was built with &#8211;enable-force-cgi-redirect<br />
fastcgi_param  REDIRECT_STATUS    200;</p>
<p>　　5、启动Nginx</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">ulimit -SHn 51200<br />
/usr/local/webserver/nginx/sbin/nginx</div>
<p> </p>
<hr />　　<strong>四、配置开机自动启动Nginx + <acronym title="Pre-Hypertext Processing">PHP</acronym></strong></p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">vi /etc/rc.local</div>
<p>　　在末尾增加以下内容：</p>
<div>引用</div>
<p>ulimit -SHn 51200<br />
/usr/local/webserver/php/sbin/php-fpm start<br />
/usr/local/webserver/nginx/sbin/nginx</p>
<hr />　　<strong>五、优化Linux内核参数</strong></p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">vi /etc/sysctl.conf</div>
<p>　　在末尾增加以下内容：</p>
<div>引用</div>
<p># 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>
<p>　　使配置立即生效：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">/sbin/sysctl -p</div>
<p> </p>
<hr />　　<strong>六、在不停止Nginx服务的情况下平滑变更Nginx配置</strong><br />
　　1、修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后，请执行以下命令检查配置文件是否正确：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">/usr/local/webserver/nginx/sbin/nginx -t</div>
<p>　　如果屏幕显示以下两行信息，说明配置文件正确：<br />
　　<span style="COLOR: #008000">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</span></p>
<p>　　2、这时，输入以下命令查看Nginx主进程号：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">ps -ef | grep “nginx: master process” | grep -v “grep” | awk -F &#8216; &#8216; &#8216;{print $2}&#8217;</div>
<p>　　屏幕显示的即为Nginx主进程号，例如：<br />
　　<span style="COLOR: #008000">6302</span><br />
　　这时，执行以下命令即可使修改过的Nginx配置文件生效：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">kill -HUP 6302</div>
<p>　　或者无需这么麻烦，找到Nginx的Pid文件：</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">kill -HUP `cat /usr/local/webserver/nginx/nginx.pid`</div>
<p> </p>
<hr />　　<strong>七、编写每天定时切割Nginx日志的脚本</strong><br />
　　1、创建脚本/usr/local/webserver/nginx/sbin/cut_nginx_log.sh</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">vi /usr/local/webserver/nginx/sbin/cut_nginx_log.sh</div>
<p>　　输入以下内容：</p>
<div>引用</div>
<p>#!/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>
<p>　　2、设置crontab，每天凌晨00:00切割nginx访问日志</p>
<div style="BORDER-BOTTOM: #00a0c6 1px dashed; BORDER-LEFT: #00a0c6 1px dashed; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #ffffff; MARGIN: 5px 5px 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; BORDER-RIGHT: #00a0c6 1px dashed; PADDING-TOP: 3px">crontab -e</div>
<p>　　输入以下内容：</p>
<div>引用</div>
<p>00 00 * * * /bin/bash  /usr/local/webserver/nginx/sbin/cut_nginx_log.sh</p>
<hr /><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2009年07月15日 -- <a href="http://www.penglixun.com/tech/system/build_webserver_use_lighttpd_spuid_apache.html" title="Lighttpd+Squid+Apache搭建高效率Web服务器">Lighttpd+Squid+Apache搭建高效率Web服务器</a> (0)</li><li>2010年04月9日 -- <a href="http://www.penglixun.com/tech/system/xfce_zendstudio_error.html" title="Xfce下ZendStudio的报错处理">Xfce下ZendStudio的报错处理</a> (0)</li><li>2010年01月18日 -- <a href="http://www.penglixun.com/tech/system/linux_compile_php_error.html" title="Linux下编译PHP的几种错误">Linux下编译PHP的几种错误</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/system/nginx_php_fastcgi_better_apache.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lighttpd+Squid+Apache搭建高效率Web服务器</title>
		<link>http://www.penglixun.com/tech/system/build_webserver_use_lighttpd_spuid_apache.html</link>
		<comments>http://www.penglixun.com/tech/system/build_webserver_use_lighttpd_spuid_apache.html#comments</comments>
		<pubDate>Wed, 15 Jul 2009 05:01:07 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[操作系统]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[LightHttp]]></category>
		<category><![CDATA[Squid]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/PLX/Blog/?p=280</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/system/build_webserver_use_lighttpd_spuid_apache.html 架构原理 Apache通常... ]]></description>
			<content:encoded><![CDATA[<p><span style="color: #888888;">本文内容遵从<a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" target="_blank">CC版权协议</a>, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明</br>网址: http://www.penglixun.com/tech/system/build_webserver_use_lighttpd_spuid_apache.html </p>
<p></span><br />
<h2>架构原理</h2>
<p><a href="http://www.apache.org/">Apache</a>通常是开源界的首选Web服务器，因为它的强大和可靠，已经具有了品牌效应，可以适用于绝大部分的应用场合。但是它的强大有时候却显得笨重，配置文件得让人望而生畏，高并发情况下效率不太高。而轻量级的Web服务器<a href="http://lighttpd.net/">Lighttpd</a>却是后起之秀，其静态文件的响应能力远高于Apache，据说是Apache的2-3倍。Lighttpd的高性能和易用性，足以打动我们，在它能够胜任的领域，尽量用它。Lighttpd对<acronym title="Pre-Hypertext Processing">PHP</acronym>的支持也很好，还可以通过Fastcgi方式支持其他的语言，比如Python。</p>
<p><span id="more-280"></span>毕竟Lighttpd是轻量级的服务器，功能上不能跟Apache比，某些应用无法胜任。比如Lighttpd还不支持缓存，而现在的绝大部分站点都是用程序生成动态内容，没有缓存的话即使程序的效率再高也很难满足大访问量的需求，而且让程序不停的去做同一件事情也实在没有意义。首先，Web程序是需要做缓存处理的，即把反复使用的数据做缓存。即使这样也还不够，单单是启动Web处理程序的代价就不少，缓存最后生成的静态页面是必不可少的。而做这个是 <a href="http://www.squid-cache.org/">Squid</a>的强项，它本是做代理的，支持高效的缓存，可以用来给站点做反向代理加速。把Squid放在Apache或者Lighttpd的前端来缓存 Web服务器生成的动态内容，而Web应用程序只需要适当地设置页面实效时间即可。</p>
<p>即使是大部分内容动态生成的网站，仍免不了会有一些静态元素，比如图片、<acronym title="JavaScript">JS</acronym>脚本、<acronym title="Cascading Style Sheets">CSS</acronym>等等，将Squid放在Apache或者Lighttp前端后，反而会使性能下降，毕竟处理<acronym title="HyperText Transfer Protocol">HTTP</acronym>请求是Web服务器的强项。而且已经存在于文件系统中的静态内容再在Squid中缓存一下，浪费内存和硬盘空间。因此可以考虑将Lighttpd再放在Squid的前面，构成 Lighttpd+Squid+Apache的一条处理链，Lighttpd在最前面，专门用来处理静态内容的请求，把动态内容请求通过proxy模块转发给Squid，如果Squid中有该请求的内容且没有过期，则直接返回给Lighttpd。新请求或者过期的页面请求交由Apache中Web程序来处理。经过Lighttpd和Squid的两级过滤，Apache需要处理的请求将大大减少，减少了Web应用程序的压力。同时这样的构架，便于把不同的处理分散到多台计算机上进行，由Lighttpd在前面统一把关。</p>
<p>在这种架构下，每一级都是可以进行单独优化的，比如Lighttpd可以采用异步IO方式，Squid可以启用内存来缓存，Apache可以启用MPM 等，并且每一级都可以使用多台机器来均衡负载，伸缩性很好。</p>
<h2>实例讲解</h2>
<p>下面以daviesliu.net和rainbud.net域下面的几个站点为例来介绍一下此方案的具体做法。daviesliu.net域下有几个用 <a href="http://www.modpython.org/">mod_python</a>实现的<a href="http://blog.daviesliu.net/">blog站点</a>，几个php的站点，一个<a href="http://share.daviesliu.net/">mod_python的小程序</a>，以后可能还会架设几个<acronym title="Pre-Hypertext Processing">PHP</acronym>和<a href="http://www.djangoproject.com/">Django</a>的站点。而服务器非常弱，CPU为Celeron 500，内存为PC 100 384M，因此比较关注Web服务器的效率。这几个站点都是采用虚拟主机方式，开在同一台机器的同一个端口上。</p>
<p>Lighttpd服务于80端口，Squid运行在3128端口，Apache运行在81端口。</p>
<h3>Lighttpd的配置</h3>
<p>多个域名采用/var/www/domain/subdomain 的目录结构，用evhost模块配置document-root如下：</p>
<blockquote><p>evhost.path-pattern        =  var.basedir + “/%0/%3/” </p></blockquote>
<p>FtpSearch中有<acronym title="Practical Extraction and Report Language">Perl</acronym>脚本，需要启用<acronym title="Common Gateway Interface">CGI</acronym>支持，它是用来做ftp站内搜索的，缓存的意义不大，直接由lighttpd的mod_cgi处理：</p>
<blockquote><p>$<acronym title="HyperText Transfer Protocol">HTTP</acronym>["url"] =~ “^/cgi-bin/” { # only allow cgi&#8217;s in this directory<br />
    dir-listing.activate = “disable”    # disable directory listings<br />
    cgi.assign = ( “.pl”   =&gt;  “/usr/bin/perl”, “.cgi”  =&gt;  “/usr/bin/perl” )<br />
}</p></blockquote>
<p>bbs使用的是phpBB，访问量不大，可以放在lighttpd(fastcgi)或者apache(mod_php)下，暂时使用 lighttpd，设置所有.php的页面请求有fastcgi处理：</p>
<blockquote><p>fastcgi.server = ( “.php” =&gt;  ( (  “host”  =&gt; “127.0.0.1&#8243;, “port”=&gt; 1026,  “bin-path”  =&gt;  “/usr/bin/php-cgi”  )  ) )</p></blockquote>
<p>blog.daviesliu.net 和 blog.rainbud.net 是用mod_python编写的blogxp程序，所有静态内容都有扩展名，而动态内容没有扩展名。blogxp是用python程序生成<acronym title="eXtensible Markup Language">XML</acronym>格式的数据再交由mod_xslt转换成<acronym title="HyperText Markup Language">HTML</acronym>页面，只能放在Apache下运行。该站点采用典型Lighttpd+Squid+Apache方式处理：</p>
<blockquote><p>$<acronym title="HyperText Transfer Protocol">HTTP</acronym>["host"] =~ “^blog” { <br />
    $<acronym title="HyperText Transfer Protocol">HTTP</acronym>["url"] !~ “\.” {      <br />
        proxy.server = ( “” =&gt; ( “localhost” =&gt; ( “host”=&gt; “127.0.0.1&#8243;, “port”=&gt; 3128 ) ) )  #3128端口为<br />
    }<br />
}</p></blockquote>
<p>share中有静态页面，也有用mod_python处理的请求，在/cgi/下：</p>
<blockquote><p>$<acronym title="HyperText Transfer Protocol">HTTP</acronym>["host"] =~ “^share” {<br />
    proxy.server = (<br />
        “/cgi” =&gt; ( “localhost” =&gt; ( “host”=&gt; “127.0.0.1&#8243;, “port”=&gt; 3128 )  )  <br />
    )<br />
}</p></blockquote>
<h3>Squid的配置</h3>
<p>只允许本地访问：</p>
<blockquote><p>http_port   3128<br />
http_access allow localhost<br />
http_access deny all</p></blockquote>
<p>启用反向代理：</p>
<blockquote><p> httpd_accel_host 127.0.0.1<br />
 httpd_accel_port 81                   #apache的端口<br />
 httpd_accel_single_host on<br />
 httpd_accel_with_proxy on          #启用缓存<br />
 httpd_accel_uses_host_header on #启用虚拟主机支持</p></blockquote>
<p>此方向代理支持该主机上的所有域名。</p>
<h3>Apache的配置</h3>
<p>配置/etc/conf.d/apache2，让其加载mod_python、mod_xslt、mod_php模块：</p>
<blockquote><p>APACHE2_OPTS=”-D PYTHON -D <acronym title="eXtensible Stylesheet Language Transformations">XSLT</acronym> -D PHP5&#8243;</p></blockquote>
<p>所有网站的根目录：</p>
<blockquote><p>&lt;Directory “/var/www”&gt;<br />
   AllowOverride All     #允许.htaccess覆盖<br />
    Order allow,deny<br />
    Allow from all<br />
&lt;/Directory&gt;</p></blockquote>
<p>基于域名的虚拟主机：</p>
<blockquote><p>&lt;VirtualHost *:81&gt;<br />
ServerName blog.daviesliu.net<br />
DocumentRoot /var/www/daviesliu.net/blog<br />
&lt;/VirtualHost&gt;</p></blockquote>
<p>这里明显没有lighttpd的evhost配置方便。</p>
<p>blog.daviesliu.net下的.htaccess设置(便于开发，不用重启Apache):</p>
<blockquote><p>SetHandler mod_python<br />
PythonHandler blogxp.publisher<br />
PythonDebug On<br />
PythonAutoReload On</p>
<p>&lt;FilesMatch “\.”&gt;<br />
    SetHandler None        #静态文件直接由Apache处理<br />
&lt;/FilesMatch&gt;</p>
<p>&lt;IfModule mod_xslt.c&gt;<br />
    AddType text/xsl .xsl  #防止对xsl文件进行转化<br />
    AddOutputFilterByType mod_xslt text/xml<br />
    XSLTCache off<br />
    XSLTProcess on<br />
&lt;/IfModule&gt;<br />
Header set Pragma “cache”<br />
Header set Cache-Control “cache”</p></blockquote>
<p>在blogxp.publisher里面，还需要设置返回的文档类型和过期时间：</p>
<blockquote><p>    req.content_type = “text/xml”<br />
    req.headers_out['Expires'] = formatdate( time.time() + 60 * 5 )</p></blockquote>
<p>经过这样的配置，所有站点都可以通过80、3128、81三个端口进行正常访问，80端口用作对外的访问，以减少负荷。81端口可以用作开发时的调试，没有缓存的困扰。</p>
<h2>性能测试</h2>
<p>由于时间和精力有限，下面只用ab2做一个并不规范的性能对比测试(每项都测多次取平均)，评价指标为每秒钟的请求数。<br />
测试命令,以测试lighttpd上并发10个请求 scripts/prototype.js 为例：</p>
<blockquote><p>ab2 -n 1000 -c 10 http://blog.daviesliu.net:80/scripts/prototype.js</p></blockquote>
<p>静态内容：prototype.js (27kB)</p>
<div>
<table border="1" cellspacing="3" cellpadding="3">
<tbody>
<tr>
<td width="25%">Con</td>
<td width="25%">Lighttpd(:80)</td>
<td width="25%">Squid(:3128)</td>
<td width="25%">Apache(:81)</td>
</tr>
<tr>
<td width="25%">1</td>
<td width="25%">380</td>
<td width="25%">210</td>
<td width="25%">240</td>
</tr>
<tr>
<td width="25%">10</td>
<td width="25%">410</td>
<td width="25%">215</td>
<td width="25%">240</td>
</tr>
<tr>
<td width="25%">100</td>
<td width="25%">380</td>
<td width="25%" align="center" valign="middle">160</td>
<td width="25%" align="center" valign="middle">230</td>
</tr>
</tbody>
</table>
<p>可见在静态内容上，Lighttpd表现强劲，而Squid在没有配内存缓存的情况下比另两个Web服务器的性能要差些。</p>
<p>动态页面：/rss (31kB)</p></div>
<div>
<table border="1" cellspacing="3" cellpadding="5">
<tbody>
<tr>
<td width="25%">Con</td>
<td width="25%">Lighttpd(:80)</td>
<td width="25%">Squid(:3128)</td>
<td width="25%">Apache(:81)</td>
</tr>
<tr>
<td width="25%">1</td>
<td width="25%">103</td>
<td width="25%">210</td>
<td width="25%">6.17</td>
</tr>
<tr>
<td width="25%">10</td>
<td width="25%">110</td>
<td width="25%">200</td>
<td width="25%">6.04</td>
</tr>
<tr>
<td>100</td>
<td width="25%">100</td>
<td width="25%">100</td>
<td width="25%">6.24</td>
</tr>
</tbody>
</table>
</div>
<p>在动态内容上，Squid的作用非常明显，而Lighttpd受限于Squid的效率，并且还要低一大截。如果是有多台Squid来做均衡的话，Lighttpd的功效才能发挥出来。<br />
在单机且静态内容很少的情况下，可以不用Lighttpd而将Squid置于最前面。</p><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2009年07月15日 -- <a href="http://www.penglixun.com/tech/system/nginx_php_fastcgi_better_apache.html" title="Nginx 0.7.x + PHP 5.2.10（FastCGI）搭建胜过Apache十倍的Web服务器">Nginx 0.7.x + PHP 5.2.10（FastCGI）搭建胜过Apache十倍的Web服务器</a> (0)</li><li>2009年11月17日 -- <a href="http://www.penglixun.com/tech/system/configure_all_function_cacti.html" title="配置全功能Cacti">配置全功能Cacti</a> (0)</li><li>2009年05月24日 -- <a href="http://www.penglixun.com/tech/system/load_average_concept.html" title="load average概念理解">load average概念理解</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/system/build_webserver_use_lighttpd_spuid_apache.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

