﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>PHP博客-Programming Life-随笔分类-LAMP</title><link>http://www.phpweblog.net/killjin/category/311.html</link><description>相信不能相信的，完成不能完成的。矛盾，就象征进步。</description><language>zh-cn</language><lastBuildDate>Fri, 28 Dec 2007 02:27:16 GMT</lastBuildDate><pubDate>Fri, 28 Dec 2007 02:27:16 GMT</pubDate><ttl>60</ttl><item><title>说说大型高并发高负载网站的系统架构</title><link>http://www.phpweblog.net/killjin/archive/2007/12/28/2612.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Thu, 27 Dec 2007 17:41:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2007/12/28/2612.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/2612.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2007/12/28/2612.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/2612.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/2612.html</trackback:ping><description><![CDATA[<p>转载请保留出处：俊麟 Michael&#8217;s blog (http://www.toplee.com/blog/?p=71)<br>Trackback Url : <a href="http://www.toplee.com/blog/wp-trackback.php?p=71"><font color=#2e432e>http://www.toplee.com/blog/wp-trackback.php?p=71</font></a></p>
<p>　　我在CERNET做过拨号接入平台的搭建，而后在Yahoo&amp;3721从事过搜索引擎前端开发，又在MOP处理过大型社区猫扑大杂烩的架构升级等工作，同时自己接触和开发过不少大中型网站的模块，因此在大型网站应对高负载和并发的解决方案上有一些积累和经验，可以和大家一起探讨一下。</p>
<p><span id=more-71></span><br>　　一个小型的网站，比如个人网站，可以使用最简单的html静态页面就实现了，配合一些图片达到美化效果，所有的页面均存放在一个目录下，这样的网站对系统架构、性能的要求都很简单，随着互联网业务的不断丰富，网站相关的技术经过这些年的发展，已经细分到很细的方方面面，尤其对于大型网站来说，所采用的技术更是涉及面非常广，从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求，已经不是原来简单的html静态网站所能比拟的。</p>
<p>　　大型网站，比如门户网站。在面对大量用户访问、高并发请求方面，基本的解决方案集中在这样几个环节：使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。但是除了这几个方面，还没法根本解决大型网站面临的高负载和高并发问题。</p>
<p>　　上面提供的几个解决思路在一定程度上也意味着更大的投入，并且这样的解决思路具备瓶颈，没有很好的扩展性，下面我从低成本、高性能和高扩张性的角度来说说我的一些经验。</p>
<p><strong>1、HTML静态化</strong><br>　　其实大家都知道，效率最高、消耗最小的就是纯静态化的html页面，所以我们尽可能使我们的网站上的页面采用静态页面来实现，这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站，我们无法全部手动去挨个实现，于是出现了我们常见的信息发布系统CMS，像我们常访问的各个门户站点的新闻频道，甚至他们的其他频道，都是通过信息发布系统来管理和实现的，信息发布系统可以实现最简单的信息录入自动生成静态页面，还能具备频道管理、权限管理、自动抓取等功能，对于一个大型网站来说，拥有一套高效、可管理的CMS是必不可少的。</p>
<p>　　除了门户和信息发布类型的网站，对于交互性要求很高的社区类型网站来说，尽可能的静态化也是提高性能的必要手段，将社区内的帖子、文章进行实时的静态化，有更新的时候再重新静态化也是大量使用的策略，像Mop的大杂烩就是使用了这样的策略，网易社区等也是如此。目前很多博客也都实现了静态化，我使用的这个Blog程序WordPress还没有静态化，所以如果面对高负载访问，www.toplee.com一定不能承受 <img class=wp-smiley alt=:) src="http://www.toplee.com/blog/wp-includes/images/smilies/icon_smile.gif"> </p>
<p>　　同时，html静态化也是某些缓存策略使用的手段，对于系统中频繁使用数据库查询但是内容更新很小的应用，可以考虑使用html静态化来实现，比如论坛中论坛的公用设置信息，这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中，这些信息其实大量被前台程序调用，但是更新频率很小，可以考虑将这部分内容进行后台更新的时候进行静态化，这样避免了大量的数据库访问请求。</p>
<p>　　在进行html静态化的时候可以使用一种折中的方法，就是前端使用动态实现，在一定的策略下进行定时静态化和定时判断调用，这个能实现很多灵活性的操作，我开发的台球网站故人居(<a href="http://www.8zone.cn/"><font color=#2e432e>www.8zone.cn</font></a>)就是使用了这样的方法，我通过设定一些html静态化的时间间隔来对动态网站内容进行缓存，达到分担大部分的压力到静态页面上，可以应用于中小型网站的架构上。故人居网站的地址：<a href="http://www.8zone.cn/"><font color=#2e432e>http://www.8zone.cn</font></a>，顺便提一下，有喜欢台球的朋友多多支持我这个免费网站:)</p>
<p><strong>2、图片服务器分离</strong><br>　　大家知道，对于Web服务器来说，不管是Apache、IIS还是其他容器，图片是最消耗资源的，于是我们有必要将图片与页面进行分离，这是基本上大型网站都会采用的策略，他们都有独立的图片服务器，甚至很多台图片服务器。这样的架构可以降低提供页面访问请求的服务器系统压力，并且可以保证系统不会因为图片问题而崩溃。</p>
<p>　　在应用服务器和图片服务器上，可以进行不同的配置优化，比如Apache在配置ContentType的时候可以尽量少支持，尽可能少的LoadModule，保证更高的系统消耗和执行效率。</p>
<p>　　我的台球网站故人居<a href="http://www.8zone.cn/"><font color=#2e432e>8zone.cn</font></a>也使用了图片服务器架构上的分离，目前是仅仅是架构上分离，物理上没有分离，由于没有钱买更多的服务器:)，大家可以看到故人居上的图片连接都是类似img.9tmd.com或者img1.9tmd.com的URL。</p>
<p>　　另外，在处理静态页面或者图片、js等访问方面，可以考虑使用<a href="http://www.lighttpd.net/"><font color=#2e432e>lighttpd</font></a>代替Apache，它提供了更轻量级和更高效的处理能力。</p>
<p><strong>3、数据库集群和库表散列</strong><br>　　大型网站都有复杂的应用，这些应用必须使用数据库，那么在面对大量访问的时候，数据库的瓶颈很快就能显现出来，这时一台数据库将很快无法满足应用，于是我们需要使用数据库集群或者库表散列。</p>
<p>　　在数据库集群方面，很多数据库都有自己的解决方案，Oracle、Sybase等都有很好的方案，常用的MySQL提供的Master/Slave也是类似的方案，您使用了什么样的DB，就参考相应的解决方案来实施即可。</p>
<p>　　上面提到的数据库集群由于在架构、成本、扩张性方面都会受到所采用DB类型的限制，于是我们需要从应用程序的角度来考虑改善系统架构，库表散列是常用并且最有效的解决方案。我们在应用程序中安装业务和应用或者功能模块将数据库进行分离，不同的模块对应不同的数据库或者表，再按照一定的策略对某个页面或者功能进行更小的数据库散列，比如用户表，按照用户ID进行表散列，这样就能够低成本的提升系统的性能并且有很好的扩展性。sohu的论坛就是采用了这样的架构，将论坛的用户、设置、帖子等信息进行数据库分离，然后对帖子、用户按照板块和ID进行散列数据库和表，最终可以在配置文件中进行简单的配置便能让系统随时增加一台低成本的数据库进来补充系统性能。</p>
<p><strong>4、缓存</strong><br>　　缓存一词搞技术的都接触过，很多地方用到缓存。网站架构和网站开发中的缓存也是非常重要。这里先讲述最基本的两种缓存。高级和分布式的缓存在后面讲述。</p>
<p>　　架构方面的缓存，对Apache比较熟悉的人都能知道Apache提供了自己的mod_proxy缓存模块，也可以使用外加的Squid进行缓存，这两种方式均可以有效的提高Apache的访问响应能力。</p>
<p>　　网站程序开发方面的缓存，Linux上提供的<a href="http://www.danga.com/memcached/"><font color=#2e432e>Memcached</font></a>是常用的缓存方案，不少web编程语言都提供memcache访问接口，<a href="http://cn.php.net/memcached"><font color=#2e432e>php</font></a>、perl、c和java都有，可以在web开发中使用，可以实时或者Cron的把数据、对象等内容进行缓存，策略非常灵活。一些大型社区使用了这样的架构。</p>
<p>　　另外，在使用web语言开发的时候，各种语言基本都有自己的缓存模块和方法，PHP有<a href="http://pear.php.net/"><font color=#2e432e>Pear</font></a>的Cache模块和<a href="http://www.toplee.com/blog/?p=100"><font color=#2e432e>eAccelerator</font></a>加速和Cache模块，还要知名的Apc、XCache（国人开发的，支持！）php缓存模块，Java就更多了，.net不是很熟悉，相信也肯定有。</p>
<p><strong>5、镜像</strong><br>　　镜像是大型网站常采用的提高性能和数据安全性的方式，镜像的技术可以解决不同网络接入商和地域带来的用户访问速度差异，比如ChinaNet和EduNet之间的差异就促使了很多网站在教育网内搭建镜像站点，数据进行定时更新或者实时更新。在镜像的细节技术方面，这里不阐述太深，有很多专业的现成的解决架构和产品可选。也有廉价的通过软件实现的思路，比如Linux上的rsync等工具。</p>
<p><strong>6、负载均衡</strong><br>　　负载均衡将是大型网站解决高负荷访问和大量并发请求采用的终极解决办法。</p>
<p>　　负载均衡技术发展了多年，有很多专业的服务提供商和产品可以选择，我个人接触过一些解决方法，其中有两个架构可以给大家做参考。另外有关初级的负载均衡DNS轮循和较专业的CDN架构就不多说了。</p>
<p><strong>6.1 硬件四层交换</strong><br>　　第四层交换使用第三层和第四层信息包的报头信息，根据应用区间识别业务流，将整个区间段的业务流分配到合适的应用服务器进行处理。　第四层交换功能就象是虚IP，指向物理服务器。它传输的业务服从的协议多种多样，有HTTP、FTP、NFS、Telnet或其他协议。这些业务在物理服务器基础上，需要复杂的载量平衡算法。在IP世界，业务类型由终端TCP或UDP端口地址来决定，在第四层交换中的应用区间则由源端和终端IP地址、TCP和UDP端口共同决定。</p>
<p>　　在硬件四层交换产品领域，有一些知名的产品可以选择，比如Alteon、F5等，这些产品很昂贵，但是物有所值，能够提供非常优秀的性能和很灵活的管理能力。Yahoo中国当初接近2000台服务器使用了三四台Alteon就搞定了。</p>
<p><strong>6.2 软件四层交换</strong><br>　　大家知道了硬件四层交换机的原理后，基于OSI模型来实现的软件四层交换也就应运而生，这样的解决方案实现的原理一致，不过性能稍差。但是满足一定量的压力还是游刃有余的，有人说软件实现方式其实更灵活，处理能力完全看你配置的熟悉能力。</p>
<p>　　软件四层交换我们可以使用Linux上常用的LVS来解决，LVS就是Linux Virtual Server，他提供了基于心跳线heartbeat的实时灾难应对解决方案，提高系统的鲁棒性，同时可供了灵活的虚拟VIP配置和管理功能，可以同时满足多种应用需求，这对于分布式的系统来说必不可少。</p>
<p>　　一个典型的使用负载均衡的策略就是，在软件或者硬件四层交换的基础上搭建squid集群，这种思路在很多大型网站包括搜索引擎上被采用，这样的架构低成本、高性能还有很强的扩张性，随时往架构里面增减节点都非常容易。这样的架构我准备空了专门详细整理一下和大家探讨。</p>
<p>总结：<br>　　对于大型网站来说，前面提到的每个方法可能都会被同时使用到，Michael这里介绍得比较浅显，具体实现过程中很多细节还需要大家慢慢熟悉和体会，有时一个很小的squid参数或者apache参数设置，对于系统性能的影响就会很大，希望大家一起讨论，达到抛砖引玉之效。</p>
<img src ="http://www.phpweblog.net/killjin/aggbug/2612.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2007-12-28 01:41 <a href="http://www.phpweblog.net/killjin/archive/2007/12/28/2612.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>centos 5.0 编译安装apache 2.2.6+php5.2.5+mysql5.0.46+Zend Optimizer 3.3.0+eacc</title><link>http://www.phpweblog.net/killjin/archive/2007/11/04/2169.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Sun, 04 Nov 2007 10:37:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2007/11/04/2169.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/2169.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2007/11/04/2169.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/2169.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/2169.html</trackback:ping><description><![CDATA[<div class=t_msgfont id=postmessage_1394>V2.0 2007年10月14日 操作系统更新为<strong><font color=#ff0000>centos</font></strong> <strong><font color=#ff0000>5.0</font></strong>&nbsp;&nbsp;apache 更新为2.2.6版本， php更新为5.2.5,增加集成Suhosin补丁，mysql 更新为<strong><font color=#ff0000>5.0</font></strong>.46, Zend Optimizer 更新为3.3.0。解决新平台下的一些问题。修正文字错误。<br><br>v1.2 2007年2月12日 apache 更新为2.2.4版本，增加mod_ssl和openssl支持，增加apr和apr-util的编译， php更新为5.2.1,增加集成Suhosin补丁，mysql 更新为<strong><font color=#ff0000>5.0</font></strong>.33, Zend Optimizer 更新为3.2.2，增加phpmyadmin。修改一些文字错误。<br><br>v1.0 2007年1月11日<br><br>先声明，我绝对是个Linux的菜鸟，以下的这些文字个人的安装笔记，是参考了网上许多高手的成功经验组合而成的，说实话我自己的东西不多 ：）我想把这些经验写下来，既可以对其他跟我一样摸索的兄弟一个经验，也可以防止以后自己都忘记了，嘿嘿。<br><br>所以如果某个大虾看到我借用了你的资源，请你不要生气。也欢迎大家进行指点。<br><br>1、下载<strong><font color=#ff0000>centos</font></strong> 5<br>我是下载的DVD版本，大家也可以下载服务器CD安装版本，其实都差不多。大家可以到这儿下载，速度很快的。<br><a href="http://ftp.iasi.roedu.net/mirrors/centos.org/5/isos/i386/CentOS-5.0-i386-bin-DVD.iso" target=_blank>http://ftp.iasi.roedu.net/mirror ... .0-i386-bin-DVD.iso</a><br><br>当然也可以在windows下用BT或迅雷下载，速度也很不错的。<br><br>下载后当然就刻录成光盘。我建议你刻录DVD啦，如果是菜鸟，也可以在图形界面进行学习，不会这么抓不住头脑。<br><br>2、（1）安装CentOS 5<br>作为服务器，不安装不需要的组件，所以在选择组件的时候，除了选择FTP SERVER外取消所有组件的选择。也不要选web服务器。因为我们后面要手动<strong><font color=#ff0000>编译安装</font></strong>。<br><br><br>系统约定RPM包和源码包存放位置<br><br>RPM包和源码包存放位置 /usr/local/src<br>源码包<strong><font color=#ff0000>编译安装</font></strong>位置(prefix) /usr/local/xxx<br>脚本以及维护程序存放位置 /usr/local/sbin<br>MySQL 数据库位置 /var/lib/mysql<br>Apache 网站根目录 /home/www<br>Apache 虚拟主机日志根目录 /data/logs/www<br>yum RPM包信息文件 /etc/yum.list<br><br>3、系统环境部署及调整<br><br>（1）. 检查系统是否正常<br># more /var/log/messages //检查有无系统内核级错误信息<br># demesg //检查硬件设备是否有错误信息<br># ifconfig //检查网卡设置是否正确<br># ping <a href="http://www.163.com/" target=_blank>www.163.com</a> // 检查网络是否正常<br><br>（2）. 关闭不需要的服务<br># export LANG='en_US' //设置语言<br># setup //选择启动的服务<br>进入system service 选项。<br>以space 键选定所需服务。<br>以下仅列出需要启动的服务，未列出的服务一律关闭：<br>crond<br>irqbalance 仅当服务器CPU为S.M.P架构或支持双核心、HT技术时，才需开启，否则关闭。<br>microcode_ctl<br>network<br>vsftpd<br>sshd<br>syslog<br><br>（3）、修改/etc/yum.repos.d/CentOS-Base.repo，将镜象站点地址改为在中国的镜象站点地址。不然我们通过yum安装软件速度会极慢。修改如下：<br><br># CentOS-Base.repo<br>#<br># This file uses a new mirrorlist system developed by Lance Davis for CentOS.<br># The mirror system uses the connecting IP address of the client and the<br># update status of each mirror to pick mirrors that are updated to and<br># geographically close to the client.&nbsp;&nbsp;You should use this for CentOS updates<br># unless you are manually picking other mirrors.<br>#<br># If the mirrorlist= does not work for you, as a fall back you can try the <br># remarked out baseurl= line instead.<br>#<br>#<br><br>[base]<br>name=CentOS-$releasever - Base<br>baseurl=http://mirror.be10.com/<strong><font color=#ff0000>centos</font></strong>/$releasever/os/$basearch/<br>gpgcheck=1<br>gpgkey=http://mirror.<strong><font color=#ff0000>centos</font></strong>.org/<strong><font color=#ff0000>centos</font></strong>/RPM-GPG-KEY-CentOS-5<br>protect=1<br><br>#released updates <br>[updates]<br>name=CentOS-$releasever - Updates<br>baseurl=http://mirror.be10.com/<strong><font color=#ff0000>centos</font></strong>/$releasever/updates/$basearch/<br>gpgcheck=1<br>gpgkey=http://mirror.<strong><font color=#ff0000>centos</font></strong>.org/<strong><font color=#ff0000>centos</font></strong>/RPM-GPG-KEY-CentOS-5<br>protect=1<br><br>#packages used/produced in the build but not released<br>[addons]<br>name=CentOS-$releasever - Addons<br>baseurl=http://mirror.be10.com/<strong><font color=#ff0000>centos</font></strong>/$releasever/addons/$basearch/<br>gpgcheck=1<br>gpgkey=http://mirror.<strong><font color=#ff0000>centos</font></strong>.org/<strong><font color=#ff0000>centos</font></strong>/RPM-GPG-KEY-CentOS-5<br>protect=0<br><br>#additional packages that may be useful<br>[extras]<br>name=CentOS-$releasever - Extras<br>baseurl=http://mirror.be10.com/<strong><font color=#ff0000>centos</font></strong>/$releasever/extras/$basearch/<br>gpgcheck=1<br>gpgkey=http://mirror.<strong><font color=#ff0000>centos</font></strong>.org/<strong><font color=#ff0000>centos</font></strong>/RPM-GPG-KEY-CentOS-5<br>protect=0<br><br>#additional packages that extend functionality of existing packages<br>[<strong><font color=#ff0000>centos</font></strong>plus]<br>name=CentOS-$releasever - Plus<br>baseurl=http://mirror.be10.com/<strong><font color=#ff0000>centos</font></strong>/$releasever/<strong><font color=#ff0000>centos</font></strong>plus/$basearch/<br>gpgcheck=1<br>enabled=0<br>gpgkey=http://mirror.<strong><font color=#ff0000>centos</font></strong>.org/<strong><font color=#ff0000>centos</font></strong>/RPM-GPG-KEY-CentOS-5<br>protect=1<br><br>#contrib - packages by Centos Users<br>[contrib]<br>name=CentOS-$releasever - Contrib<br>baseurl=http://mirror.be10.com/<strong><font color=#ff0000>centos</font></strong>/$releasever/contrib/$basearch/<br>gpgcheck=1<br>enabled=0<br>protect=0<br>gpgkey=http://mirror.<strong><font color=#ff0000>centos</font></strong>.org/<strong><font color=#ff0000>centos</font></strong>/RPM-GPG-KEY-CentOS-5<br><br>#packages in testing<br>[testing]<br>name=CentOS-5 - Testing<br>baseurl=http://mirror.be10.com/<strong><font color=#ff0000>centos</font></strong>/5/testing/i386/<br><br>gpgcheck=1<br>enabled=0<br>protect=0<br><br><br>保存。<br><br>（2）更新系统，我们使用yum,<br><br>然后执行：<br># yum upgrade<br>建议更新所有列出的程序，rhel 5.X的稳定性还要继续努力呢。<br><br><br>（4）、定时校正服务器时间<br># yum install ntp<br># crontab -e<br>0 23 * * * root /usr/sbin/ntpdate 210.72.145.44 &gt; /dev/null 2&gt;&amp;1<br><br>以上命令设置好后存盘。您的机器将在每天的23:00根据中国国家授时中心的NTP服务器时间自动校准时间。<br><br>(5). 对TCP/IP网络参数进行调整，加强抗SYN Flood能力<br># echo 'net.ipv4.tcp_syncookies = 1' &gt;&gt; /etc/sysctl.conf //将net.ipv4.tcp_syncookies = 1写入sysctl.conf 文件<br># sysctl -p //查看<br><br>（6）、FTP服务器的配置<br>vi /etc/vsftpd/vsftpd.conf<br>把anonymous_enable=YES注释掉不允许匿名登录。<br>把chroot_list_enable=YES<br>chroot_list_file=/etc/vsftpd.chroot_list<br>前的注释去掉。<br>把ftpd_banner=*前的注释去掉。后面改成你的欢迎信息(这样设置可以避免显示ftp服务器的版本信息)<br>然后保存，service vsftpd start就可以了。<br><br>这时应当添加用户，因为root默认不能通过FTP方式登录。<br><br># adduser username<br># passwd userpassword<br><br>这样对于我们上传一些文件到系统中很方便。<br><br><br>4. 重新启动系统<br># init 6<br><br><br>5. 使用 yum 程序安装所需开发包（以下为标准的 RPM 包名称）<br># yum install gcc gcc-c++ gcc-g77 flex bison autoconf automake bzip2-devel zlib-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel openssl-devel libxml2-devel<br><br>#这里我们将编译GD所必须的一些小软件比如libpng,libtiff,freetype,libjpeg,等先用RPM的方式一并安装好，避免手动编译浪费时间，同时也能避免很多错误，这几个小软件的编译很麻烦。这几个小软件编译错误了，GD当然安装不了，php5的编译当然也没戏了。所以我们抓大放小，对这些小牛鬼蛇神采取快速简洁的方式进行安装。并且对服务器的性能也不能产生什么影响。<br>另外libxml2系统已经默认安装了，所以我们不需要手工编译了，直接安装它的开发包就行了。<br><br>6. 源码<strong><font color=#ff0000>编译安装</font></strong>所需包 (Source)<br>(1) GD2<br># cd /usr/local/src<br># wget <a href="http://www.boutell.com/gd/http/gd-2.0.34.tar.gz" target=_blank>http://www.boutell.com/gd/http/gd-2.0.34.tar.gz</a><br># tar xzvf gd-2.0.34.tar.gz<br># cd gd-2.0.34<br># CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/gd2 --mandir=/usr/share/man //./configure 配置。<br><br># make //make 是用来编译的，它从 Makefile 中读取指令，然后编译。<br># make install //make install 是用来安装的，它也从 Makefile 中读取指令，安装到指定的位置。<br><br>(2) Apache 日志截断程序<br># cd /usr/local/src<br># wget <a href="http://cronolog.org/download/cronolog-1.6.2.tar.gz" target=_blank>http://cronolog.org/download/cronolog-1.6.2.tar.gz</a><br># tar xzvf cronolog-1.6.2.tar.gz<br># cd cronolog-1.6.2<br># ./configure --prefix=/usr/local/cronolog<br># make<br># make install<br><br><br>7、编译mysql <strong><font color=#ff0000>5.0</font></strong>.46<br>mysql <strong><font color=#ff0000>5.0</font></strong>.46是企业版本，貌似双数版本都是企业版本了。个人觉得代码质量要比社区版本要好一些。大家可以下载，免费使用。并不需要向mysql公司交钱。<br><br>cd /usr/local/src<br># wget <a href="http://mirror.provenscaling.com/mysql/enterprise/source/5.0/mysql-5.0.46.tar.gz" target=_blank>http://mirror.provenscaling.com/ ... mysql-<strong><font color=#ff0000>5.0</font></strong>.46.tar.gz</a><br># tar xzvf mysql-<strong><font color=#ff0000>5.0</font></strong>.46.tar.gz<br># cd mysql-<strong><font color=#ff0000>5.0</font></strong>.46<br><br>修改mysql 客户端最大连接数， 默认的只有100,远远达不到我们的要求。<br><br># vi sql/mysqld.cc<br><br>搜索找到下面一行：<br>{"max_connections", OPT_MAX_CONNECTIONS,<br>"The number of simultaneous clients allowed.", (gptr*) &amp;max_connections,<br>(gptr*) &amp;max_connections, 0, GET_ULONG, REQUIRED_ARG, 100, 1, 16384, 0, 1,<br>0},<br><br>将其中的100改为1500, 当然小点也可以，根据你的需要来，不建议改的太大。<br><br>{"max_connections", OPT_MAX_CONNECTIONS,<br>"The number of simultaneous clients allowed.", (gptr*) &amp;max_connections,<br>(gptr*) &amp;max_connections, 0, GET_ULONG, REQUIRED_ARG, 1500, 1, 16384, 0, 1,<br>0},<br><br>保存。<br><br># CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/mysql --localstatedir=/var/lib/mysql --with-comment=Source --with-server-suffix=-enterprise-gpl --with-mysqld-user=mysql --without-debug --with-big-tables --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=all --with-pthread --enable-static --enable-thread-safe-client --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --enable-assembler --without-innodb --without-ndb-debug --without-isam<br><br><br>配置成功会提示：<br><br>MySQL has a Web site at <a href="http://www.mysql.com/" target=_blank>http://www.mysql.com/</a> which carries details on the<br>latest release, upcoming features, and other information to make your<br>work or play with MySQL more productive. There you can also find<br>information about mailing lists for MySQL discussion.<br><br>Remember to check the platform specific part of the reference manual for<br>hints about installing MySQL on your platform. Also have a look at the<br>files in the Docs directory.<br><br>Thank you for choosing MySQL!<br><br>// 注意 ，CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" 这个环境参数只针对intel P4 芯片，如果你的CPU是AMD的，注意不能使用。请查看相应的编译优化参数。否则程序会无法编译，即使编译成功也无法运行，嘿嘿。<br><br>关于其他CPU的优化请看我的BLOG的一篇转贴：<br><a href="http://www.cnprint.org/bbs/blogs/1/blog43.html" target=_blank>http://www.cnprint.org/bbs/blogs/1/blog43.html</a><br><br><br># make<br>编译的时间可能会比较长，毕竟优化的比较厉害。<br><br># make install<br><br><strong><font color=#ff0000>编译安装</font></strong>完成后执行后续操作：<br># useradd mysql //添加 mysql 用户<br># cd /usr/local/mysql<br># bin/mysql_install_db --user=mysql<br># chown -R root:mysql . //设置权限，注意后面有一个 "."<br># chown -R mysql /var/lib/mysql //设置 mysql 目录权限<br># chgrp -R mysql . //注意后面有一个 "."<br># cp share/mysql/my-medium.cnf /etc/my.cnf<br># cp share/mysql/mysql.server /etc/rc.d/init.d/mysqld //开机自动启动 mysql。<br># chmod 755 /etc/rc.d/init.d/mysqld<br># chkconfig --add mysqld<br># /etc/rc.d/init.d/mysqld start //启动 MySQL<br># bin/mysqladmin -u root password "password_for_root"<br># service mysqld stop //关闭 MySQL<br><br>8. <strong><font color=#ff0000>编译安装</font></strong> Apache<br># cd /usr/local/src<br># wget <a href="http://www.ip97.com/apache.org/httpd/httpd-2.2.6.tar.gz" target=_blank>http://www.ip97.com/apache.org/httpd/httpd-2.2.6.tar.gz</a><br># tar zxvf httpd-2.2.6.tar.gz<br># cd httpd-2.2.6<br><br>依次安装apr和apr-util<br><br># cd srclib/apr<br># CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/apr --enable-threads --enable-other-child --enable-static<br># make &amp;&amp; make install<br><br># cd ../apr-util<br># CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ --with-mysql=/usr/local/mysql<br># make &amp;&amp; make install<br><br>cd /usr/local/src/httpd-2.2.6<br># CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --with-mysql=/usr/local/mysql --enable-cache --enable-file-cache --enable-mem-cache --enable-disk-cache --enable-static-support --enable-static-htpasswd --enable-static-htdigest --enable-static-rotatelogs --enable-static-logresolve --enable-static-htdbm --enable-static-ab --enable-static-checkgid --disable-cgid --disable-cgi --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --enable-ssl --with-ssl=/usr/include/openssl<br><br># make<br># make install<br># echo '/usr/local/apache2/bin/apachectl start ' &gt;&gt; /etc/rc.local //将 apachectl 的调用加入到你的系统启动文件中。<br><br>注解：<br>./configure //配置源代码树<br>--prefix=/usr/local/apache2 //体系无关文件的顶级安装目录PREFIX ，也就Apache的安装目录。<br>--enable-module=so //打开 so 模块，so 模块是用来提 DSO 支持的 apache 核心模块<br>--enable-mods-shared=all //编译全部的模板，对于不需要我们可以在httpd.conf去掉。<br>--enable-cache //支持缓存<br>--enable-file-cache //支持文件缓存<br>--enable-mem-cache //支持记忆缓存<br>--enable-disk-cache //支持磁盘缓存<br>--enable-static-support //支持静态连接(默认为动态连接)<br>--enable-static-htpasswd //使用静态连接编译 htpasswd - 管理用于基本认证的用户文件<br>--enable-static-htdigest //使用静态连接编译 htdigest - 管理用于摘要认证的用户文件<br>--enable-static-rotatelogs //使用静态连接编译 rotatelogs - 滚动 Apache 日志的管道日志程序<br>--enable-static-logresolve //使用静态连接编译 logresolve - 解析 Apache 日志中的IP地址为主机名<br>--enable-static-htdbm //使用静态连接编译 htdbm - 操作 DBM 密码数据库<br>--enable-static-ab //使用静态连接编译 ab - Apache HTTP 服务器性能测试工具<br>--enable-static-checkgid //使用静态连接编译 checkgid<br>--disable-cgid //禁止用一个外部 CGI 守护进程执行CGI脚本<br>--disable-cgi //禁止编译 CGI 版本的 PHP<br>--enable-ssl // 编译 ssl模块。<br><br>我们不再使用worker模式编译apache，worker模式和php貌似有一些不协调不稳定之处。所以使用了默认的perfork模式。<br><br>将apache设置成开机自启动:<br><br>在/etc/rc.d/rc.local文件中加入一行<br>/usr/local/apache2/bin/apachectl start<br>这样每次重新启动系统以后,apache也会随系统一起启动.<br><br>或者<br># cp /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/httpd<br>然后 vi /etc/rc.d/init.d/httpd 添加(#!/bin/sh下面)<br># chkconfig: 2345 10 90<br># description: Activates/Deactivates Apache Web Server<br>最后，运行chkconfig把Apache添加到系统的启动服务组里面：<br># chkconfig --add httpd<br># chkconfig httpd on<br><br><br>9、编译php 5.2.5-devel。<br>php 5.2.4有点小BUG，无法在<strong><font color=#ff0000>centos</font></strong> 5上正常编译，官方已经在php5.2.5中修复了。所以我们使用php 5.2.5进行编译。<br>Suhosin是php增强型安全补丁，可以编译到静态内核中，也可以编译成php动态扩展。我个人强烈你建议安装成静态内核。Suhosin已经进入freebsd和gentoo的ports。下面的以下先说静态安装步骤。当然你也可以在安装php后将它编译成php的动态扩展。<br><br># cd /usr/local/src<br># wget <a href="http://cn.php.net/get/php-5.2.5.tar.gz/from/this/mirror" target=_blank>http://cn.php.net/get/php-5.2.5.tar.gz/from/this/mirror</a><br>wget <a href="http://www.hardened-php.net/suhosin/_media/suhosin-patch-5.2.5-0.9.6.2.patch.gz" target=_blank>http://www.hardened-php.net/suho ... .5-0.9.6.2.patch.gz</a><br># tar zxvf php-5.2.5.tar.gz<br># gunzip suhosin-patch-5.2.1-0.9.6.2.patch.gz<br># cd php-5.2.5<br><br># CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-pear=/usr/share/php --with-zlib-dir --with-bz2 --with-libxml-dir=/usr --with-gd=/usr/local/gd2 --enable-gd-native-ttf --enable-gd-jis-conv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-ttf=shared,/usr --enable-mbstring --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-config-file-path=/etc --with-iconv --disable-ipv6 --enable-static --enable-maintainer-zts --enable-zend-multibyte --enable-inline-optimization --enable-zend-multibyte --enable-sockets --enable-soap --with-openssl<br><br>配置成功会提示：<br><br>+--------------------------------------------------------------------+<br>| License:&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;|<br>| This software is subject to the PHP License, available in this&nbsp; &nbsp;&nbsp;&nbsp;|<br>| distribution in the file LICENSE.&nbsp;&nbsp;By continuing this installation |<br>| process, you are bound by the terms of this license agreement.&nbsp; &nbsp;&nbsp;&nbsp;|<br>| If you do not agree with the terms of this license, you must abort |<br>| the installation process at this point.&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; |<br>+--------------------------------------------------------------------+<br><br>Thank you for using PHP.<br><br><br># make<br><br># make install<br><br># cp php.ini-recommended /etc/php.ini<br><br><br>在这里也顺便说一下将suhosin安装成为php的动态扩展的方法。毕竟网上根本不见它的中文安装教程。<br><br>虽然我个人不推荐这种方式。<br><br>wget <a href="http://www.hardened-php.net/suhosin/_media/suhosin-0.9.16.tgz" target=_blank>http://www.hardened-php.net/suhosin/_media/suhosin-0.9.16.tgz</a><br>tar zxvf suhosin-0.9.16.tgz<br>cd suhosin-0.9.16<br>./configure --with-php-config=/usr/local/php/bin/php-config<br>make<br>make install<br><br>会提示编译的模块存在的目录，记住它。<br>Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/<br><br>然后在php.ini中增加一行下列语句。<br>extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/suhosin.so<br><br>10 、整合apache 与php<br># vi /usr/local/apache2/conf/httpd.conf<br>在最后一行加上：<br>AddType application/x-httpd-php .php<br><br>查找：(设置 WEB 默认文件)<br>DirectoryIndex index.html<br>替换为：<br>DirectoryIndex index.php index.html index.htm //在 WEB 目录不到默认文件，httpd 就会执行 /var/www/error/noindex.html<br><br>找到这一段：<br># AllowOverride controls what directives may be placed in .htaccess files.<br># It can be "All", "None", or any combination of the keywords:<br># Options FileInfo AuthConfig Limit<br>#<br>AllowOverride none<br><br>更改为AllowOverride all<br>允许apache rewrite<br><br># 监听443端口,支持https连接<br>取消注释 httpd.conf 中的 Include conf/extra/httpd-ssl.conf<br><br>保存httpd.conf，退出。<br><br># /usr/local/apache2/bin/apachectl restart //重启 Apache<br><br>这时会出现错误：<br><br>/usr/local/apache2/bin/apachectl start<br>httpd: Syntax error on line 107 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied<br><br>不急，我们慢慢解决。<br><br>先重启下机器：<br>reboot<br>这个Permission denied问题，在<strong><font color=#ff0000>centos</font></strong> 5下面一般是Selinux引起的，作为生产用服务器，我建议你千万别草率地关掉Selinux一了百了。就像家里的防盗网，阻碍了你的猫自由进出窗户，你不能为了猫方便，就把防盗网简单拆除是同样的道理。我看见网上许多人建议把Selinux简单关闭来解决这个问题，很不以为然。<br>我们可以这样操作：<br><br># audit2allow -d<br>allow initrc_t usr_t:file execmod;<br>allow mount_t default_t:file execute;<br><br><br># cd /etc/selinux/targeted/modules/<br># audit2allow -M local -d<br><br>屏幕产生如下提示：<br><br>产生类型强制文件：local.te<br>正在编译策略<br>checkmodule -M -m -o local.mod local.te<br>semodule_package -o local.pp -m local.mod<br><br>********************重要 ***********************<br><br>为了在内核中加载这个新创建的策略软件包，<br>您需要执行 <br><br>semodule -i local.pp<br><br>我们运行<br><br># semodule -i local.pp<br><br>这样就让Selinux加载了新的规则。<br><br>更详细的内容请看我在BLOG上的转贴：<br><br><a href="http://www.cnprint.org/bbs/blogs/1/blog48.html" target=_blank>http://www.cnprint.org/bbs/blogs/1/blog48.html</a><br><br>reboot<br><br>哈哈，apache不会再报错了吧？<br>这样我保留了selinux的功能，同时apache也能正常运行。<br><br>11. 查看确认 L.A.M.P 环境信息<br>vi /usr/local/apache2/htdocs/phpinfo.php<br><br>新增加下面一行，并保存。<br><br><br><br># chmod 755 /usr/local/apache2/htdocs/phpinfo.php<br><br>用浏览器打开 <a href="http://127.0.0.1/phpinfo.php" target=_blank>http://127.0.0.1/phpinfo.php</a><br><br><br># echo ' ' &gt; /usr/local/apache2/htdocs/testdb.php<br># chmod 755 /usr/local/apache2/htdocs/testdb.php<br># service mysqld start<br>用浏览器打开 <a href="http://127.0.0.1/testdb.php" target=_blank>http://127.0.0.1/testdb.php</a><br>检查 phpinfo 中的各项信息是否正确。<br><br>12、设置SSL并创建自己的CA<br><br># cd /usr/share/ssl/misc<br><br># ./CA -newca<br><br>屏幕上出现如下的提示:CA certificate filename (or enter to create)<br><br>这是要求输入要创建的CA的证书文件名, 可以直接回车或输入证书文件名。<br><br>Making CA certificate ...<br>Generating a 1024 bit RSA private key<br>.........++++++<br>................................++++++<br>writing new private key to './demoCA/private/./cakey.pem'<br>Enter PEM pass phrase:<br><br>Verifying password - Enter PEM pass phrase:-<br><br>此时要求输入和验证CA的私钥口令、国家代码（中国是CN）、省份、城市或地区、组织或企业名称、部门名称、CA的名称或服务器的主机名称、管理员电子邮件地址。<br><br>至此,在当前目录下生成了demoCA的目录,CA的证书就在该目录下,文件名为cacert.pem<br><br>生成服务器的证书请求<br><br># ./CA -newreq<br><br>屏幕上出现如下的提示:<br><br>Generating a 1024 bit RSA private key<br>.....................................................++++++<br>.....++++++<br>writing new private key to 'newreq.pem'<br>Enter PEM pass phrase:<br>Verifying password - Enter PEM pass phrase:<br><br>此时要求输入和验证服务器的私钥口令、国家代码（中国是CN）、省份、城市或地区、组织或企业名称、部门名称、CA的名称或服务器的主机名称、管理员电子邮件地址。<br><br>Please enter the following 'extra' attributes<br><br>to be sent with your certificaterequest<br><br>A challenge password []:<br><br>An optional company name []:<br><br>.Request (and private key) is in newreq.pem<br><br>这是要求输入服务器的相关信息。<br><br>此时,在当前目录下生成了一个名为newreq.pem的文件,包含了要生成服务器数字证书的请求。<br><br>签署证书<br><br># ./CA -sign<br><br>屏幕上出现如下的提示:<br><br>Using configuration from /usr/share/ssl/openssl.cnf<br><br>Enter PEM pass phrase:<br><br>此时一样需要输入CA的私钥口令、国家代码（中国是CN）、省份、城市或地区、组织或企业名称、部门名称、CA的名称或服务器的主机名称、管理员电子邮件地址。<br><br>Certificate is to be certified until Nov 19 13:46:19 2002 GMT (365 days)<br><br>Sign the certificate? [y/n]:y<br><br>这时显示证书请求文件中的各项信息,并询问是否要签署证书，回答y，进行签署。<br><br>1 out of 1 certificate requests certified, commit? [y/n]y<br><br>回答y,会显示已经签署的证书的信息,并在当前目录下生成服务器的证书文件newcert.pem。<br><br># mkdir /usr/local/apache2/conf/ssl.crt/<br># mkdir /usr/local/apache2/conf/ssl.key/<br># cp newcert.pem /usr/local/apache2/conf/ssl.crt/server.pem<br># cp newreq.pem /usr/local/apache2/conf/ssl.key/server.pem<br><br><br>更改服务器的证书文件的相关配置<br># vi /usr/local/apache2/conf/extra/httpd-ssl.conf<br><br>查找并修改<br><br># Server Certificate:<br># Point SSLCertificateFile at a PEM encoded certificate. If<br># the certificate is encrypted, then you will be prompted for a<br># pass phrase. Note that a kill -HUP will prompt again. Keep<br># in mind that if you have both an RSA and a DSA certificate you<br># can configure both in parallel (to also allow the use of DSA<br># ciphers, etc.)<br>SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.pem<br>#SSLCertificateFile /usr/local/apache2/conf/server-dsa.crt<br><br># Server Private Key:<br># If the key is not combined with the certificate, use this<br># directive to point at the key file. Keep in mind that if<br># you've both a RSA and a DSA private key you can configure<br># both in parallel (to also allow the use of DSA ciphers, etc.)<br>SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.pem<br>#SSLCertificateKeyFile /usr/local/apache2/conf/server-dsa.key<br><br><br>示例文件<br><br>在SSL的根目录中生成一个index.html,它是如下所示:<br><br>＜html＞<br><br>这是SSL示例!<br><br>＜/html＞<br><br>测试<br><br>假如Web服务器的DNS名称是<a href="http://www.cnprint.org/" target=_blank>www.cnprint.org</a>.<br><br>在浏览器的URL地址栏里输入 <a href="http://www.cnprint.org/%EF%BC%8C%E6%B5%8F%E8%A7%88%E5%99%A8%E4%BE%BF%E4%BC%9A%E6%98%BE%E7%A4%BAAPACHE%E5%AE%89%E8%A3%85%E6%97%B6%E7%A1%AE%E7%9C%81%E7%9A%84Test" target=_blank>http://www.cnprint.org/，浏览器便会显示APACHE安装时确省的Test</a> Page.<br><br>在浏览器的URL地址栏里输入 <a href="https://www.cnprint.org/%EF%BC%8C%E6%B3%A8%E6%84%8F:%E6%98%AF" target=_blank>https://www.cnprint.org/，注意:是</a> https 而不是http !<br><br>浏览器会提示站点已经采用了SSL进行数据的加密传输.由于我们的CA证书不是浏览器缺省的信任的根证书,所以,浏览器会说无法确认服务器的证书可信。暂时不管,一直NEXT,最后,浏览器会显示:这是SSL示例!<br><br>可以把CA的证书放在非SSL的站点上,让浏览器下载并安装CA证书,并将其设置成可信任的根证书,便可解决上面的问题.8 解除HTTPD起动时的口令输入。<br><br>由于安全的原因,Web服务器的私钥是口令加密了的，每次重新起动HTTPD或Linux时,都会要求输入Web服务器的私钥的口令。<br><br>如果要解除HTTPD起动时的口令输入,可以这样:<br><br># cd /usr/local/apache2/conf/ssl.key/<br># cp server.pem server.pem.org<br># openssl rsa -in server.pem.org -out server.pem<br># chmod 400 server.pem<br><br>另外在网上看到一个方法，我没有试。有兴趣的可以试下。<br><br>创建SSL密码自动应答文件，否则每次Apache启动的时候，都会要求你输入SSL的密码.<br>创建 /usr/local/apache2/conf/ssl.key/sendsslpwd ,内容如下.<br>#!/bin/bash<br>SSLpasswd="YOUR PASSPHRASE"<br>echo $SSLpasswd<br>chmod 755 /usr/local/apache2/conf/ssl.key/sendsslpwd<br><br><br>此时，Web服务器的私钥已经没有口令加密,一定要确保server.pem文件除root外,任何用户均无权读取它。<br><br><br>13、安装 Zend Optimizer<br># cd /usr/local/src<br># wget <a href="http://downloads.zend.com/optimizer/3.3.0/ZendOptimizer-3.3.0-linux-glibc21-i386.tar.gz" target=_blank>http://downloads.zend.com/optimi ... glibc21-i386.tar.gz</a><br># tar xzvf ZendOptimizer-3.3.0-linux-glibc21-i386.tar.gz<br># ./ZendOptimizer-3.3.0-linux-glibc21-i386/install.sh<br>按照它的提示一步步进行就行了。<br>总之一句话。如果你的服务器环境不需要ZendOptimizer，那么能不安就不安装这个。避免和eaccelerator冲突。<br><br>14、安装eaccelerator // eaccelerator是php的加速软件，使用后php的执行效率会有较大幅度的提升。目前eaccelerator 0.9.5.2已经和ZendOptimizer-3.3.0能够基本上兼容啦。不过我个人觉得，ZendOptimizer-3.3.0没有加速的功能，反而使php运行变慢，只是起到了运行zend加密文件的作用而已。闲话不多说了，大家有兴趣的，可以去google下。<br><br># cd /usr/local/src<br># wget <a href="http://bart.eaccelerator.net/source/0.9.5.2/eaccelerator-0.9.5.2.tar.bz2" target=_blank>http://bart.eaccelerator.net/sou ... tor-0.9.5.2.tar.bz2</a><br># tar -jxvf eaccelerator-0.9.5.2.tar.bz2<br># cd eaccelerator-0.9.5.2<br><br>export PHP_PREFIX="/usr/local/php"<br>$PHP_PREFIX/bin/phpize //指定一下php的目录<br><br># ./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config // 设置<br><br># make &amp; make install<br><br><strong><font color=#ff0000>编译安装</font></strong>后我们会看到屏幕提示的eaccelerator.so所在的目录，比如我得到的是/usr/local/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so，记住这个路径，待会要用到。<br><br>修改php.ini（安装完zend之后，php.ini存放于/usr/local/Zend/etc）<br>在文件最后，zend之前，注意，这部分内容务必放在zend之前，不然可能会出现不可预期的服务器问题。添加下列信息：<br><br>[eaccelerator]<br>extension="/usr/local/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so"<br>eaccelerator.shm_size="32"<br>eaccelerator.cache_dir="/tmp/eaccelerator"<br>eaccelerator.enable="1"<br>eaccelerator.optimizer="1"<br>eaccelerator.check_mtime="1"<br>eaccelerator.debug="0"<br>eaccelerator.filter=""<br>eaccelerator.shm_max="0"<br>eaccelerator.shm_ttl="0"<br>eaccelerator.shm_prune_period="0"<br>eaccelerator.shm_only="0"<br>eaccelerator.compress="1"<br>eaccelerator.compress_level="9"<br><br>解释:<br>zend_extension 是安装完程序自动指示给我们的<br>eaccelerator.shm_size="32" 缓存大小单位MB<br>eaccelerator.cache_dir="/tmp/eaccelerator" 缓存路径<br><br># mkdir /tmp/eaccelerator // 建立目录<br># chmod 0777 /tmp/eaccelerator // 修改目录属性<br><br>最后重新启动apachectl<br><br>重启apache，phpinfo显示：<br>This program makes use of the Zend Scripting Language Engine:<br>Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies<br>with eAccelerator v0.9.5.2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator<br>with Zend Extension Manager v1.0.11, Copyright (c) 2003-2006, by Zend Technologies<br>with Zend Optimizer v3.3.0, Copyright (c) 1998-2006, by Zend Technologies<br><br>也会有eAccelerator的具体信息。<br><br>15、安装phpmyadmin，管理mysql数据库<br><br># cd /usr/local/apache2/htdocs/<br># wget <a href="http://nchc.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-2.11.1-all-languages-utf-8-only.tar.gz" target=_blank>http://nchc.dl.sourceforge.net/s ... s-utf-8-only.tar.gz</a><br><br># tar zxvf phpMyAdmin-2.11.1-all-languages-utf-8-only.tar.gz<br># mv phpMyAdmin-2.11.1-all-languages-utf-8-only phpmyadmin<br><br># cd phpmyadmin/libraries<br><br>修改配置文件<br># vi config.default.php<br><br>找到这几行进行修改：<br>$cfg['Servers'][$i]['auth_type'] = 'http'; // Authentication method (valid choices: config, http, HTTP, signon or cookie)<br>$cfg['Servers'][$i]['user'] = 'root'; // MySQL user<br>$cfg['Servers'][$i]['password'] = 'PASSWORD'; // MySQL password (only needed<br><br>经过这几个步骤，我们一个比较安全的LAMP服务器就环境基本建立成功啦。感觉上也不是很难，是吧？</div>
<img src ="http://www.phpweblog.net/killjin/aggbug/2169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2007-11-04 18:37 <a href="http://www.phpweblog.net/killjin/archive/2007/11/04/2169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>