PHP与MySQL权威指南(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-21 16:34:10

点击下载

作者:吴津津,田睿,李云,刘昊

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

PHP与MySQL权威指南

PHP与MySQL权威指南试读:

前言

从1994年诞生到至今,PHP已经有17个年头,一开始并不被大家熟知,现在已成为最热门的Web开发技术之一。它因为具有简单高效、开源免费、跨平台等特性而受到广大Web开发人员的欢迎,被近4000万个网站所采用,其中不乏Yahoo!、Google、百度、新浪、腾讯、阿里巴巴等国内外知名的互联网企业。PHP成功入选全球5大最受欢迎的编程语言,并且是入选的唯一脚本语言。国内80%以上的动态网站都在使用PHP进行相关开发,Alexa TOP500中国网站的排名中有394家使用了PHP技术,比例为78.8%。PHP至今仍然位居互联网应用之首,涉及互联网的各个应用领域,包括社区BBS、SNS、CMS、电子商城、团购,以及现在非常火热的微博应用平台等,它的身影无处不在。

互联网具有发展快、不断创新的特点,这决定了只有以尽可能快的开发速度和尽可能低的成本才能取胜。与其他同类编程语言相比较,PHP具有开发速度快、运行效率高、安全性好、可扩展性强、开源等特点。随着Web 2.0的进一步发展和SNS的兴起,以及云计算和物联网等新技术的出现,将不断催生出新的产业和服务来。支撑这些新型产业和服务的技术体系非PHP莫属。随着3G和移动互联网技术的兴起,越来越多的Web应用也选择了PHP作为主流的技术方案。PHP现在可与Java等主流编程语言相抗衡,越来越多的公司在为站点提供更加强大的功能时都采用了PHP。PHP的语法独特,混合了C、Java、Perl的语法特性,同时还有自创的新语法,它可以比CGI或Perl更快速地执行动态网页。在未来3年内,据预测,PHP的从业人数将增加42%,远超Java的13%和.NET的24%,PHP开发人员的待遇也“水涨船高”。写作本书的目的

一本好的程序设计类图书应该不只是纯粹地讲述理论,而应该注重实践。在写书的过程中,我们一直都以实用性为目标,努力让所写的内容落到实处。以本书的篇幅来看,很明显,我们在竭尽所能地展现这种实用性。因此,如果你希望获得PHP语言和MySQL数据库的实践经验,对它们有全面的了解,并且想知道如何结合这些卓越的技术创建数据库驱动的动态Web应用,那么本书正是你所需要的。

目前互联网领域的主要应用有社区BBS、SNS社交网络、网上商城、CMS内容管理系统等,针对这些应用,国内已经发布了许多相关的PHP产品,例如:在社区BBS领域中,康盛创想旗下的Discuz!是全球范围内用户量最大、覆盖面最广的社区软件平台,拥有超过140万家的网站用户,是中小网站首选的社区与网站建设平台;在SNS社交网络领域中,UCHome自问世以来就备受瞩目,其在SNS建站平台领域中也是市场份额最大的产品;在网上商城领域,ShopNC是国内网上商城的代表产品,包括单用户和多用户两个版本;在CMS内容管理系统领域,PHPCMS得到了近10万网站的认可,且在大中型商业网站中应用得越来越多。正是由于这些产品被大家广泛使用,为了解决广大建站者在使用过程中的疑惑,避免产生“闭门造车”的困局,所以我们决定出一本介绍这些产品的功能和结构及如何在它们的基础上进行二次开发的书籍。本书的内容及特色

全书一共25章和5个附录,一共分为五大部分:准备篇详细介绍了Apache的使用方法和基本原理,以及PHP与MySQL开发环境的搭建;PHP篇全面讲解了PHP的语法知识和工作原理;MySQL篇系统地讲解了MySQL数据库的基本操作,以及开发与管理的方法;二次开发实战篇以实战案例的方式详细讲解了UCenter、Discuz!、UCHome、ShopNC、PHPCMS等各种产品的使用方法及其二次开发技术;附录是UCenter、Discuz!、UCHome、ShopNC、PHPCMS等产品的数据字典,可供开发者查阅。与市场上已经有的所有同类书相比较,本书的内容可能是最全面的,几乎应有尽有。

前三部分的内容能帮助完全没有开发经验的读者完全掌握PHP开发的必备知识,进入PHP开发的世界,第四部分则能帮助有经验的读者解决他们在进行二次开发时遇到的各种难题。大家知道,对编程而言,最重要的既不是代码,也不是功能,而是编程思想,本书不仅仅是一本讲解PHP技术的图书,更是一本鼓励和引导读者超越代码层面,对整个站点的“设计”进行思考的书。本书面向的读者

本书适合的读者对象如下:

❑中初级的PHP开发工程师

❑对UCenter、Discuz!、UCHome、ShopNC、PHPCMS等产品进行二次开发的高级PHP开发工程师

❑PHP网站的设计、制作及维护人员

❑大中专院校的在校学生以及社会培训班的学员如何阅读本书

如果你是初学PHP,完全没有PHP基础或没有系统掌握PHP的基础知识,强烈建议你从第1章开始阅读,按照本书的内容安排循序渐进地进行学习,这对系统掌握PHP技术十分有好处。如果你已经有一定的PHP基础和开发经验,但是MySQL还不曾系统地学习过,那么建议直接学习本书第三部分关于MySQL的内容;如果你已经有比较好的PHP技术基础,想从事目前互联网领域的各个主流开源产品的二次开发,可以仔细阅读本书第四部分。总之,我们根据不同水平层次的读者对本书的内容进行了合理地划分,以便能让各种读者的需求都能得到满足,有针对性地阅读自己需要或感兴趣的内容。

最后,真诚地期望大家通过本书来探索PHP。无论是刚入门的PHP新手,还是有多年开发经验的专家,相信你们在看完本书之后都会有所收获。当然,一个真正的程序员,他的思想必须是超越具体语言和工具的,期待有一天,大家可以在了解书中这些知识的基础上,总结出属于自己的更加优秀的开发框架,甚至是设计思想,开发出广受用户欢迎的优秀站点。补充参考资料

网上有许多关于PHP开源产品的参考信息,以下这些网站有丰富的相关资源:

❑PHPChina开源社区:http://www.phpchina.com/

❑Zend官网:http://www.zend.com/

❑康盛官网:http://www.comsenz.com/

❑ShopNC官网:http://www.shopnc.net/

❑PHPCMS官网:http://www.phpcms.com/致谢

本书由PHPChina开源社区的资深会员共同编写,其中PHP基础与商城部分主要由ShopNC创始人吴津津编写;Discuz!、UCenter部分主要由田睿编写;UCHome部分主要由李云编写;Zend产品部分主要由刘昊编写;其他参与编写的有王参加、侯宝剑等。此外,本书在编写过程中还参阅了大量国内外的文献和资料。

首先要特别感谢康盛新创CEO戴志康(大C)先生,以及Discuz!团队和PHPCMS团队的大力支持!在编写过程中,PHPChina技术部和该领域的一些专家都给予了非常好的指导意见,在此表示感谢。此外,还要感谢活跃在PHP开源社区PHPChina论坛上的会员和PHP爱好者们。由于作者水平有限,编写时间也很仓促,书中难免会有一些疏漏或错误,恳请大家批评指正。如果大家有任何问题、意见或建议,可在PHPChina官方论坛(http://bbs.phpchina.com/)本书的专属版块中与作者交流。

PHPChina开源社区(www.phpchina.com)2011年8月第一部分 准备篇

第1章 Apache基础

第2章 PHP与MySQL开发环境的搭建第1章Apache基础1.1 Apache介绍

随着网络技术的普及和不断发展,以及Web技术的不断完善,Web服务已经成为互联网上最重要的服务形式之一。原有的C/S模式正逐渐被B/S模式所取代。Apache是一种开源的HTTP服务器软件,可以在大多数主流的计算机操作系统中运行(包括UNIX、Linux及Windows),再加上其支持多平台且具有良好的安全性被广泛使用。1.1.1 Apache工作原理

Web系统由客户端(浏览器)和服务器端两部分组成。Web系统架构也被称为B/S架构。最常见的Web服务器有Apache、IIS、Tomcat等,常用的浏览器有IE、Firefox、Maxthon等。当你想访问一个网页时,需要在浏览器的地址栏中输入该网页的URL(Uniform Resource Locator,简称为URL)地址,或者是通过超链接链接到该网页。浏览器会向该网页所在的服务器发送一个HTTP请求,服务器会对接收到的请求信息进行处理,然后将处理的结果返回给浏览器,最终将浏览器处理后的结果呈现给用户。

作为世界上最流行的Web服务器,Apache遵循的同样是HTTP协议,默认端口号为80,客户端和服务器端的通信步骤如下:(1)客户端(浏览器)和Web服务器建立TCP连接,连接建立以后,向Web服务器发出访问请求(如get)。根据HTTP协议,该请求中包含了客户端的IP地址、浏览器的类型和请求的URL等一系列信息。(2)服务器处理接收到的请求信息并将处理后的结果返回给客户端。(3)客户端断开与服务器的连接。1.1.2 Apache的特点

因为Apache是开源的,所以得到了开源社区的大力支持,吸引了众多优秀的开发人员参与其中,他们不断开发出各种新的功能特性,并对存在的缺陷进行修复。经过多年的不断完善,如今的Apache已经是最流行的Web服务器端软件之一。Apache的特点是简单、快速、高效和稳定。Apache服务器拥有以下特性:

❑支持最新的HTTP/1.1通信协议。Apache是最先使用HTTP/1.1协议的Web服务器之一,它完全兼容HTTP/1.1协议并与HTTP/1.0协议向后兼容。Apache已为新协议所提供的全部内容做好了必要的准备。

❑支持多计算机平台。Apache几乎可以在所有的计算机操作系统上运行,包括主流的UNIX、Linux及Windows操作系统。

❑配置文件简单,易操作。用户可以通过直接修改Apache的配置文件信息来修改Apache,操作起来十分方便。

❑支持实时监视服务器状态和定制服务器日志。Apache在记录日志和监视服务器自身运行状态方面提供了很大的灵活性,可以通过Web浏览器来监视服务器的状态,也可以根据自己的需要来定制日志。

❑支持多种方式的HTTP认证。

❑支持Web目录修改。用户可以使用特定的目录作为Web目录。

❑支持CGI脚本,如Perl、PHP等。

❑支持服务器端包含指令(SSI)。

❑支持安全Socket层(SSL)。

❑支持FastCGI。

❑支持虚拟主机。即通过在一台服务器上使用不同的主机名来提供多个HTTP服务。Apache支持基于IP、主机名和端口号三种类型的虚拟主机服务。

❑跟踪用户会话。当用户浏览基于Apache的Web站点时,可以通过Apache的mod_usertrack模块对其进行跟踪。

❑支持动态共享对象。Apache的模块可在运行时动态加载,这就意味着这些模块可以被装入服务器进程空间,从而减少系统的内存开销。

❑支持多进程。当负载增加时,服务器会快速生成子进程来处理,从而提高系统的响应能力。

❑支持第三方软件开发商提供的功能模块。比如Apache加载mod_jserv模块后可以支持Java Servlet,这样就可以运行Java应用程序了。

❑支持多线程和多进程混合模型的MPM。当MPM类型指定为worker时,由于是使用线程来处理,所以可以处理海量的请求,而系统资源的开销要小于基于进程的服务器。1.2 Windows下Apache的部署1.2.1 Windows下Apache的安装和配置

本节主要介绍在Windows操作系统中如何安装和配置Apache服务器。首先应该到Apache官方网站(http://httpd.apache.org/download.cgi)下载安装程序。当前的最新版本是2.3.5-alpha,这里我们以安装Apache2.2.15为例进行介绍。安装步骤如下:(1)下载Apache的安装包httpd-2.2.15-win32-x86-no_ssl.msi,双击进入安装窗口,显示当前Apache的版本信息,如图1-1所示。图 1-1 Apache HTTP Server的安装界面(2)点击"Next"按钮,进入Apache许可协议窗口,请仔细阅读协议内容,如果同意此协议,则选中"I accept the terms in the license agreement"单选按钮,如图1-2所示。图 1-2 Apache HTTP Server许可协议(3)点击"Next"按钮,进入Apache HTTP服务器介绍窗口,如图1-3所示。这里主要介绍Apache是什么、最新的版本信息,以及配置文件更改等,建议不太了解的读者仔细阅读。图 1-3 Apache HTTP Server介绍(4)点击"Next"按钮,进入服务器的相关信息设置页面,如图1-4所示。图 1-4 设置Apache HTTP Server信息

相关设置选项的解释如下:

❑Network Domain指已经或者将要注册的DNS域名。例如,如果你的DNS全称是www.shopnc.net,一般可以省略域名前的www,只输入shopnc.net部分。本地安装可以默认输入"localhost"字符串,或者127.0.0.1。

❑Server Name是服务器DNS域名的全称,例如www.phpchina.com。

❑Administrator's Email Address是服务器管理员的邮箱,它会在默认的错误提示页面上显示给用户。

注意 这里所输入的信息只是对Apache的一些基本配置,可以在安装完成后通过编辑配置文件进一步配置。

❑"for All Users,on Port 80,as a Service-Recommended"为默认选项,Apache默认任何人都可以访问和监听端口号为80的服务器。

注意 如果机器中的80端口被占用(IIS和Resin的默认端口号都是80),在安装Apache之前需要先把它们的默认端口号改为非80,否则会因为端口号冲突而导致Apache无法正常启动。

❑"only for the Current User,on Port 8080,when started Manually"只允许当前用户使用Apache,并且监听端口号为8080的服务器,使用时需要手动启动服务。(5)点击"Next"按钮,选择安装类型,如图1-5所示。如果选择Typical(典型安装),则安装除开发模块需要的源码和库以外的所有内容;如果选择Custom(自定义安装),则可以自己选择要安装的内容。这里我们选择自定义安装。图 1-5 选择安装类型(6)点击"Next"按钮,选择要安装的模块,如图1-6所示。点击文字前面的图标选择是否安装此模块,如果没有特殊要求,按默认设置安装即可。Apache的默认安装目录是C:\Program Files\Apache Software Foundation\Apache2.2\,点击"Change"按钮自定义安装目录。图 1-6 选择安装模块和自定义安装目录(7)点击"Next"按钮,进入安装确认页面,如图1-7所示。如果想修改之前的信息,则可以点击"Back"按钮返回前面的步骤进行修改。图 1-7 安装确认页面

后面的步骤非常简单,按照提示进行操作即可完成安装。安装完成后我们可以测试一下Apache是否安装成功。首先看一下系统托盘中是否出现了监视Apache服务的图标,并且服务器是启动状态;然后打开浏览器,在地址栏输入"http://localhost/"或http://127.0.0.1,如果显示如图1-8所示的页面,说明Apache服务器已经安装成功了。图 1-8 Apache服务器安装成功

Apache服务器安装成功后,如果想对Apache进行配置,需要编辑安装目录下的conf子目录下的httpd.conf文件。该文件是Apache服务器的配置文件,编辑完成后一定要重新启动Apache服务器,这样才会生效。

上面详细地演示了Apache在Windows下安装和配置的完整过程,非常简单。Apache在Linux平台上的安装和配置的过程与此类似,限于篇幅,这里就不再重复演示。1.2.2 启动、停止和重新启动Apache服务

在Windows操作系统中,Apache一般以服务的方式运行。在安装Apache时,如果你选择了"for all users",Apache就会自动安装为一个服务。如果选择的是"only for the Current User",可以在安装后手动将Apache注册为服务。注意,只有Administrators组的成员才能成功注册服务。

使用Apache Service Monitor工具可以查看和管理你所在网络上的所有机器上安装的Apache服务的状态,如图1-9所示。为了使用Apache Service Monitor管理Apache服务,首先必须自动或手动安装Apache服务。图 1-9 用Apache Service Monitor管理Apache服务的状态

可以在Apache安装目录的bin子目录下使用如下命令安装一个Apache服务。如果没有指定服务名称和配置文件,则在安装时使用默认服务名称Apache 2.2,默认配置文件conf/httpd.conf。

C:\Apache2.2\bin>httpd -k install

当在同一台机器上装有多个Apache服务时,必须为它们指定不同的名称,这样方便管理。可以使用下面的命令来指定服务的名称,其中"ApacheShop"为指定的服务名称。

C:\Apache2.2\bin>httpd -k install -n ApacheShop

如果想为不同的服务指定不同的配置文件,可以在安装时使用如下的命令来指定:

C:\Apache2.2\bin>httpd -k install -n ApacheShop -f "C:/Apache2.2/conf/my.conf"

如果想移除一个Apache服务,可以使用如下的命令,默认移除的是名为Apache2.2的服务。

C:\Apache2.2\bin>httpd -k uninstall

也可以移除指定名称的服务,如下所示:

C:\Apache2.2\bin>httpd -k uninstall -n ApacheShop

启动、停止和重新启动Apache服务的方法通常是使用Apache Service Monitor工具,另外也可以使用控制台命令:NET START Apache2.2和NET STOP Apache2.2,或者使用Windows控制面板下的服务。

在启动Apache服务之前,可以使用下面的命令来检查配置文件的正确性。

C:\Apache2.2\bin>httpd -n Apache2.2-t

还可以通过命令行控制Apache服务。启动一个已安装的服务:

C:\Apache2.2\bin>httpd -k start

停止一个已安装的服务:

C:\Apache2.2\bin>httpd -k stop

C:\Apache2.2\bin>httpd -k shutdown

重新启动一个运行中的服务,可以使用下面的命令强制其重新加载配置文件:

C:\Apache2.2\bin>httpd -k restart

httpd命令非常重要,详细介绍如下。

httpd [-D name] [-d directory] [-f file]

[-C"directive"] [-c"directive"]

[-w] [-k start|restart|stop|shutdown]

[-k install|config|uninstall] [-n service_name]

[-v] [-V] [-h] [-l] [-L] [-t] [-S]

各参数选项的说明如下:

❑-D parameter 设置参数parameter,它配合配置文件中的<IfDefine>字段,用于在服务器启动和重新启动时有条件地跳过或处理某些命令。

❑-d serverroot 将ServerRoot指令的初始值设置为serverroot,它可以被配置文件中的ServerRoot指令覆盖。

❑-f config 在启动中使用config作为配置文件。如果config不以“/”开头,则它是相对于ServerRoot的路径,其默认值是conf/httpd.conf。

❑-k start|restart|graceful|stop|graceful-stop 发送信号使httpd启动、重新启动或停止。

❑-C directive 在读取配置文件之前,先处理directive的配置指令。

❑-c directive 在读取配置文件之后,再处理directive的配置指令。

❑-e level 在服务器启动时,设置LogLevel为level。用于在启动时,临时增加出错信息的详细程度,以帮助排错。

❑-E file 将服务器启动过程中的出错信息发送到文件file。

❑-R directory 当在服务器编译中使用SHARED_CORE规则时,它指定共享目标文件的目录为directory。

❑-h 输出一个可用的命令行选项的简要说明。

❑-l 输出一个静态编译在服务器中的模块的列表。它不会列出使用LoadModule指令动态加载的模块。

❑-L 输出一个指令的列表,其中包含了各指令的有效参数和使用区域。

❑-M 输出一个已经启用的模块列表,包括静态编译在服务器中的模块和作为DSO动态加载的模块。

❑-S 显示从配置文件中读取并解析的配置结果(目前仅显示虚拟主机的配置)。

❑-t 仅对配置文件执行语法检查。程序在语法解析检查结束后立即退出,或者返回“0”(OK),或者返回非0值(Error)。如果还指定了"-D DUMP_VHOSTS",则会显示虚拟主机的详细配置信息。

❑-v 显示httpd的版本,然后退出。

❑-V 显示httpd和APR/APR-Util的版本和编译参数,然后退出。

❑-X 以调试模式运行httpd。仅启动一个工作进程,并且服务器不与控制台脱离。

下列参数仅用于Windows平台:

❑-k install|config|uninstall 安装Apache为一个Windows NT的服务;改变Apache服务的启动方式;删除Apache服务。

❑-n name 指定Apache服务的名称为name。

❑-w 保持控制台窗口的打开状态,使得可以阅读出错信息。1.2.3 Apache支持PHP语言

我们先从PHP的官方网站http://php.net/downloads.php下载PHP的安装包(切记一定要下载编译过的安装包),这里我们以php-5.2.13-Win32版本为例进行讲解。

下载完成后解压安装包,把解压后的文件改名为"php5"并将其复制到C盘的根目录下,然后进入php5的目录,将文件php.ini-dist复制一份并改名为"php.ini"。在php.ini中需要修改以下几个地方:

❑设置扩展文件所在的目录:在文件中找到extension_dir="./",将其更改为extension_dir="C:/php5/ext/"。

❑开启常用的扩展。

■;extension=php_gd2.dll

■;extension=php_mbstring.dll

■;extension=php_mcrypt.dll

■;extension=php_mysql.dll

■;extension=php_mysqli.dll

在httpd.conf配置文件中,分号(;)表示注释该行内容。因此在需要开启某项扩展功能时,只要删除其前面的分号(;)即可。关于php.ini的详细介绍请参考本书的第二部分。接下来编辑Apache的配置文件httpd.conf,主要修改以下几个地方:(1)加载用于处理PHP的模块。找到#LoadModule vhost_alias_module modules/mod_vhost_alias.so代码行,在下面添加以下代码:

LoadModule php5_module"C:/php5/php5apache2_2.dll" ##加载php处理模块(2)在Apache中添加可识别PHP的MIME类型。找到AddType application/x-gzip.gz.tgz代码行,在下面添加以下代码:

AddType application/x-httpd-php.php ##php文件的MIME类型

AddType application/x-httpd-source.phps ##phps文件的MIME类型(3)加载libmcrypt.dll和libmysql.dll类库文件。在httpd.conf文件后面添加如下的加载文件代码:

LoadFile C:\php5\libmcrypt.dll ##支持php_mcrypt.dll的类库

LoadFile C:\php5\libmysql.dll ##支持php_mysql.dll的类库

或者直接将C:\php5目录下的libmcrypt.dll和libmysql.dll复制到C:\WINDOWS\system32目录下。(4)设置PHP的配置文件目录。在httpd.conf文件的最后添加下面的代码:

PHPIniDir"C:/php5" ##指定php.ini目录

也可以把修改好的php.ini文件复制到C:/WINDOWS/目录下。修改完成后保存文件,必须重启Apache服务,以重新加载配置文件。接下来测试一下我们的配置是否成功,进入Apache的Web根目录,新建一个名为"phpinfo.php"的文件,内容如下:

<?php

phpinfo();//显示服务器的配置信息

?>

打开浏览器,在地址栏中输入http://localhost/phpinfo.php或http://127.0.0.1/phpinfo.php,如果出现如图1-10的界面,则说明PHP环境已经搭建好了。图 1-10 phpinfo()的显示界面1.3 httpd.conf深入剖析

Apache服务器的配置文件位于C:\Program Files\Apache Software Foundation\Apache2.2\conf\目录下,一般会使用httpd.conf、access.conf和srm.conf三个配置文件来配置Apache服务器的行为。

httpd.conf提供了最基本的服务器配置,是对守护程序httpd如何运行的技术描述;srm.conf是服务器的资源映射文件,它告诉服务器各种文件的MIME类型,以及如何支持这些文件;access.conf用于配置服务器的访问权限,控制不同用户和计算机的访问限制;这三个配置文件控制着服务器各个方面的特性,因此为了服务器的正常运行需要设置好这三个文件。

实际上,目前常用的Apache版本已经将原来的httpd.conf、srm.conf与access.conf中的所有配置参数均放在了配置文件httpd.conf中,只是为了兼容老版本(使用这三个配置文件的方式来源于NCSA-httpd)才使用了三个配置文件,而所提供的access.conf和srm.conf文件中没有具体的配置。由于在新版本的Apache中,所有的设置都被放在了httpd.conf中,因此只需要调整这个文件中的配置即可。下面使用默认提供的httpd.conf为例,解释Apache服务器的各个配置选项。不必因为它提供的配置参数太多而烦恼,基本上这些参数都很直观,也可以在不加改动的情况下运行Apache服务器。但是,如果需要调整Apache服务器的性能,以及增加对某种特性的支持,就需要了解这些配置参数的含义。本节将对httpd.conf文件进行详细的讲解。1.3.1 站点的基本配置

本节将重点介绍Apache对主站点进行配置的一些基本配置选项,如下所示。

❑ServerRoot"/mnt/software/apache2":Apache软件安装的位置。其他指定的目录如果没有指定绝对路径,则目录是相对路径。

❑PidFile logs/httpd.pid:第一个httpd进程(所有其他进程的父进程)的进程号文件位置。

❑Listen 80:服务器监听的端口号。

❑ServerName www.clusting.com:80:主站点的名称(网站的主机名)。

❑ServerAdmin admin@clusting.com:管理员的邮件地址。

❑DocumentRoot"/mnt/web/clusting":主站点的网页存储位置。

❑DirectoryIndex index.html index.htm index.php:主页文件的设置(本例将主页文件设置为index.html、index.htm和index.php)。1.3.2 服务器优化配置

Apache的主要优势就是能更好地支持多处理器,在编译时通过使用--with-mpm选项来决定Apache的工作模式。如果知道当前的Apache使用的工作机制,则可以通过httpd -l命令列出Apache的所有模块,从而就可以知道其工作方式。(1)prefork。如果httpd -l列出了prefork.c,则需要对下面的这段参数进行配置:

StartServers 5 #启动Apache时启动的httpd进程个数

MinSpareServers 5 #服务器保持的最小空闲进程数

MaxSpareServers 10 #服务器保持的最大空闲进程数

MaxClients 150 #最大并发连接数

MaxRequestsPerChild 1000 #每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为1000

在该工作模式下,服务器启动后将启动5个httpd进程(如果加上父进程,一共6个,通过ps -ax|grephttpd命令可以看到)。当有用户请求连接时,Apache会使用一个空闲进程为该连接服务,同时父进程会fork一个子进程。直到内存中的空闲进程达到MaxSpareServers。该模式是为了兼容一些旧版本的程序。(2)worker。如果httpd -l列出worker.c,则需要对下面的内容进行配置:

StartServers 2 #启动Apache时启动的httpd进程个数

MaxClients 150 #最大并发连接数

MinSpareThreads 25 #服务器保持的最小空闲线程数

MaxSpareThreads 75 #服务器保持的最大空闲线程数

ThreadsPerChild 25 #每个子进程产生的线程数

MaxRequestsPerChild 0 #每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为1000

该模式由线程来监听客户的连接。当有新客户连接时,由其中的一个空闲线程接受连接。服务器在启动后会启动两个进程,每个进程产生的线程数是固定的(由ThreadsPerChild决定),因此启动时有50个线程。当50个线程不够用时,服务器自动fork一个进程,再产生25个线程。(3)perchild。如果httpd -l列出perchild.c,则需要对下面的内容进行配置:

NumServers 5 #服务器启动时启动的子进程数

StartThreads 5 #每个子进程启动时启动的线程数

MinSpareThreads 5 #内存中的最小空闲线程数

MaxSpareThreads 10 #内存中的最大空闲线程数

MaxThreadsPerChild 2000 #每个线程最多被请求多少次后退出。0表示不受限制

MaxRequestsPerChild 10000 #每个子进程服务多少次后被重新fork,0表示不受限制

该模式下,子进程的数量是固定的,线程数不受限制。当客户端连接到服务器时,由空闲的线程提供服务。如果空闲的线程数不够,子进程就会自动产生线程来为新的连接服务。该模式用于多站点服务器。1.3.3 HTTP响应头的信息配置

默认情况下,Apache安装时会显示版本号及操作系统的版本,甚至会显示服务器上安装了哪些Apache模块。这些信息可能会被黑客利用,并且黑客还可以从中得知你所配置的服务器上的很多设置都是默认状态。我们可以通过修改ServerTokens模块对所显示的内容进行设置。

ServerTokens用来设置http头部返回的Apache版本信息。一般会带有如下几个参数,这些参数的含义和作用说明如下。

❑Prod:仅软件名称,例如apache。

❑Major:包括主版本号,例如apache/2。

❑Minor:包括次版本号,例如apache/2.0。

❑Min:仅Apache的完整版本号,例如apache/2.0.54。

❑OS:包括操作系统类型,例如apache/2.0.54(Unix)。

❑Full:包括Apache支持的模块及模块版本号,例如Apache/2.0.54(Unix)mod_ssl/2.0.54 OpenSSL/0.9.7g。1.3.4 持久性连接配置

在Apache的httpd.conf中,KeepAlive表示保持连接活跃,类似于MySQL的永久连接。换句话说,如果将KeepAlive设置为On,那么来自同一客户端的请求就不需要再连接一次,避免每次请求都要新建一个连接而加重服务器的负担。

KeepAlive的连接活跃时间当然是受KeepAliveTimeOut限制的。如果第二次请求和第一次请求之间超过了KeepAliveTimeOut的时间,第一次连接就会中断,再新建第二个连接。所以,一般情况下,图片较多的网站应该把KeepAlive设为On。但是KeepAliveTimeOut应该设置为多少秒就是一个值得讨论的问题了。如果KeepAliveTimeOut设置的时间过短,例如设置为1秒,那么Apache就会频繁地建立新连接,当然会耗费不少的资源;反过来,如果KeepAliveTimeOut设置的时间过长,例如设置为300秒,那么Apache中肯定有很多无用的连接会占用服务器的资源,也不是一件好事。所以,到底要把KeepAliveTimeOut设置为多少,则要根据网站的流量和服务器的配置而定。相关配置说明如下:

❑KeepAlive On:开启持久性连接功能。即当客户端连接到服务器时,下载完数据后仍然保持连接状态。

❑MaxKeepAliveRequests 100:一个连接服务的最多请求次数。

❑KeepAliveTimeout 30:测试一次连接中的多次请求传输之间的时间,如果服务器已经完成了一次请求,但一直没有接收到客户程序的下一次请求,在间隔超过了这个参数设置的值之后,服务器就断开连接。默认值是15秒。1.4 日志记录

要有效地管理Web服务器,反馈服务器的活动、性能及出现的问题就很有必要。Apache HTTP服务器提供了非常全面而灵活的日志记录功能。1.4.1 日志的配置

Apache为管理员提供了很全面的日志管理工具来对服务器的活动进行事后分析。Apache提供了多种不同的记录日志,但是对安全专业人士来说最重要的是访问日志。这个灵活的工具还具有相当多的自定义功能,可以按照你的需要很方便地记录尽可能多或少的日志,以保证有效的分析。(1)ErrorLog file-path|syslog [:facility]

指定了当服务器遇到错误时记录错误日志的文件。如果file-path不是一个以斜杠(/)开头的绝对路径,那么它会被认为是一个相对于ServerRoot的相对路径。我们来看下面的示例:

ErrorLog "logs/error.log"

LogFormat format|nickname [nickname]

本指令的功能是定义访问日志的记录格式。例如:

LogFormat "%h%l%u%t\" %r\ "%>s%b" common

日志记录中还包含将被原样写入日志的文本字符串及C风格的控制字符"\n"和"\t",以实现换行与制表。文本中的引号和反斜杠应通过“\”来转义。日志文件的具体格式如表1-1所示。(2)LogLevel

LogLevel用于调整记录在错误日志中的信息的详细程度。可以选择表1-2所示的level,依照重要性降序排列。(3)CustomLog file|pipe format|nickname [env=[!]environment-variable]

CustomLog指令用来对服务器的请求进行日志记录。可以指定日志的格式,也可以使用环境变量根据请求的特征来自由地组织日志。1.4.2 错误日志

错误日志是最重要的日志文件,其存放位置取决于ErrorLog指令。如果服务器在启动时或在运行中有问题,首先就应该查看错误日志。错误日志通常被写入error.log文件中。错误日志的格式相对灵活,并且可以附加文字来描述。例如:

[Fri Mar 12 23:04:19 2010] [error] [client 127.0.0.1]script 'E:/www/test.php' not found or unable to stat

各个参数的说明如下:

❑[Fri Mar 12 23:04:19 2010]:错误发生的日期和时间。

❑[error]:错误的级别,只有高于LogLevel指令指定级别的错误才会被记录。

❑[client 127.0.0.1]:是导致错误的IP地址。

❑script'E:/www/test.php'not found or unable to stat:错误的原因。

此例中,客户访问了一个不存在的文件,导致服务器产生了一个错误。服务器在记录被访问的文件时,用的是文件系统路径,而不是Web路径。

用户可以增加或删除错误日志的项,但是对于某些特殊请求,在访问日志(access log)中也会有相应的记录。例如,上述例子在访问日志中也会有相应的记录,其状态码是404。因为访问日志也可以定制,所以可以从访问日志中得到错误事件的更多信息。1.4.3 访问日志

访问日志会记录对Web服务器的所有请求,其存放文件和记录的格式取决于CustomLog指令,LogFormat指令可以定义日志的内容格式。对于日志管理,首先必须产生访问日志,然后才能分析日志,从而得到有用的统计信息。下面介绍如何配置服务器的访问日志。

访问日志的记录格式非常灵活,使用风格很像C语言中的printf()函数的格式。可以通过下面介绍的几种日志格式查看用于mod_log_config模块的格式字符串。(1)通用日志格式(Common Log Format)

LogFormat "%h%l%u%t\" %r\ "%>s%b" common

CustomLog "logs/access.log" common

各参数的说明如下:

1)LogFormat定义了一种特定的记录格式的字符串,并给它取了个别名叫common,其中的“%”表示服务器用某种信息替换,其他字符则不作替换。引号(")必须加反斜杠转义,以避免被解释为字符串的结束符。格式字符串还可以包含特殊的控制符,如换行符"\n"和制表符"\t"。

2)CustomLog定义了一个使用指定别名的日志文件,除非其文件名是以斜杠开头的绝对路径,否则其路径就是相对于ServerRoot的相对路径。

通用日志格式(CLF)的记录格式被许多不同的Web服务器所采用,并被许多日志分析工具所识别,它产生的记录字符串如下所示:

127.0.0.1--[12/Mar/2010:23:04:19+0800] "GET/test.php HTTP/1.1" 404 206

各参数的说明如下:

1)127.0.0.1:发送请求到服务器的客户端IP地址。如果HostnameLookups设为On,则服务器会尝试解析这个IP地址的主机名并替换此处的IP地址,但是不推荐这样做,因为它会明显地拖慢服务器,最好是用一个日志后续处理程序来判断主机名,比如logresolve(logresolve是一个解析Apache访问日志中IP地址的后处理程序,为了使对名称服务器的影响降到最低,它拥有极为自主的内部散列表缓存,使每个IP值仅仅在第一次从日志文件中读出时才被解析一次)。如果客户端和服务器之间存在代理,那么记录中的这个IP地址就是那个代理的IP地址,而不是客户端的真实IP地址。

2)第一个"-":由客户端identd进程判断的RFC1413身份(identity),输出中的符号"-"表示此处的信息无效。此信息通常很不可靠,不应该被使用,除非在严格控制的内部网络中。只有将IdentityCheck指令设为On,Apache才会试图获取这项信息。

3)第二个"-":HTTP认证系统得到的访问该网页的客户端标识(userid),环境变量REMOTE_USER会被设为该值并提供给CGI脚本。如果状态码是401,则表示客户端未通过认证,此值没有意义。如果网页没有设置密码保护,则此项将是"-"。

4)[12/Mar/2010:23:04:19+0800]:服务器完成请求处理时的时间,其格式是[日/月/年:时:分:秒时区]。可以在格式字符串中使用%{format}t来改变时间的输出形式,其中的format与C语言标准库中的strftime()用法相同。

5)"GET/test.php HTTP/1.1":客户端发出的包含许多有用信息的请求行。可以看出,该客户端的动作是GET,请求的资源是/test.php,使用的协议是HTTP/1.1。另外,还可以记录其他信息,如格式字符串"%m%U%q%H"会记录动作、路径、查询字符串及协议等。

6)404:服务器返回给客户端的状态码。该信息非常有价值,因为它指示了请求的结果:成功响应(以2开头),被重定向(以3开头)、出错(以4开头),或产生了服务器端错误(以5开头)。

7)206:返回给客户端的不包括响应头的字节数。如果没有信息返回,则此项应该是"-",如果希望记录为"0"的形式,则应该用%B。(2)组合日志格式(Combined Log Format)

另一种常用的记录格式是组合日志格式,形式如下:

LogFormat"%h%l%u%t\"%r\"%>s%b\"%{Referer}i\"\"%{User-agent}i\""combined

CustomLog"logs/access.log"combined

这种格式与通用日志格式类似,但是多了两个%{header}i项,其中的header可以是任何请求头。这种格式的记录如下:

127.0.0.1--[13/Mar/2010:00:38:38+0800]"GET/test.php HTTP/1.1"404 206"-"

"Mozilla/4.0(compatible;MSIE 7.0;Windows NT 6.1;Trident/4.0;QQPinyinSetup 620;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;Media Center PC 6.0;InfoPath.2)"

其中,多出来的项是"-",它是"Referer"请求头。此项指明了该请求是从哪个网页提交过来的,如果内容为空,则此项显示"-"。"Mozilla/4.0(compatible;MSIE 7.0;Windows NT 6.1;Trident/4.0;QQPinyinSetup 620;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;Media Center PC 6.0;InfoPath.2)"是"User-Agent"请求头,此项是客户端提供的浏览器识别信息。1.5 虚拟主机

所谓虚拟主机是指在一台机器上虚拟出多台Web服务器。举个简单的例子,一家公司有多个不同域名的网站,它只需要购买一台物理服务器,通过配置虚拟主机实现为多个站点提供Web服务,而访问者通过输入不同的域名来获取想要的Web信息。

在Apache的配置文件中,通过<VirtualHost>区块指令来识别不同的身份,也就是我们通常说的虚拟主机。Apache设置虚拟主机一般采用两种方案:基于主机名的虚拟主机和基于IP地址的虚拟主机。这两种方案可以单独来使用,也可以混合使用,你可以根据实际工作需要来选择一种适合自己的方案。1.5.1 基于主机名的虚拟主机

要想在只有一个IP地址的服务器上支持多个网站,我们可以通过设置虚拟主机的主机名来进行区分。这样就可以达到多个虚拟主机共享同一个IP地址的目的,同时也可以缓解IP地址不足的压力。

基于主机名的虚拟主机的配置相对比较简单,因为只需要配置DNS服务器,将每个主机名映射到正确的IP地址,然后配置Apache服务器,使其能辨识不同的主机名即可。

注意 在Apache服务器配置中创建一个虚拟主机并不会自动在你的DNS中对主机名进行相应的更新,你必须自己在DNS中添加域名

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载