|
最近更新日期:2003年10月02日
原理 :什么是 WWW 与网址( URL ) :Client 如何向 Server 要求资料 :有哪些类型的 WWW 网站?什么是 LAMP :SSL 与 CA 的认证机制 套件安装 :RPM 安装 LAMP 方式 :Tarball 安装 LAMP 方式 ( Apache 2.xx 2003年09月10日 前 ) :升级与安装方式的选择建议 主机设定 :LAMP 的套件结构与主机规划 :基本要求 :最简易 Apache 设定(含关于中文显示之设定) :启动 httpd (如何关闭 https ) :测试结果 :用户的个人网页启动 进阶安全设定 :1. CGI ( Perl 档案 ) 之执行、Index 显示、查无网页显示之设定 :2. 抵挡 IP 与限制使用者动作的设定(allow, deny, limit) :3. 主机状态说明网页设定 :4. 关于权限的意义说明与设定 :5. 设定认证网页 :6. .htaccess 档案与 AllowOverride 的用途 :7. 防火墙 登录档分析与其重要性: :1. syslog 与 logrotate :2. Web Analyser 虚拟主机架设: 客户端的文字接口 Web 功能: 增强 PHP 程序代码执行速度的模块: :MM Cache :Apache 的效能测试 砍站软件与 Nimda 病毒的抵挡 scripts: 安装 phpBB2 讨论板: 问题讨论: :1. 关于显示中文的额外说明: :2. 关于无法执行 PHP 的说明: :3. 关于 MySQL 的问题说明: :4. 关于启动 httpd 时出现的 perl 问题: 课后练习: 大标题的图示原理:什么是 WWW 与网址
如果你常上网浏览的话 ( 不论是使用 Mosilla 、IE 或是 Netscape ),你应该会知道,台湾有个蛮有名气的入口网站:奇摩雅虎站 ( tw.yahoo.com ),所以你只要在网址列上面输入『 http://tw.yahoo.com 』就可以浏览到奇摩雅虎的网页信息啰!这个『 http://tw.yahoo.com 』就是所谓的 URL ( Uniform Resource Locator ) ,其中 tw.yahoo.com 就是所谓的主机名,亦即是我们前面刚刚提过的 DNS 里头的 FQDN ( Fully Qualified Domain Name ) ,即是主机名加上领域名所得的一个独一无二的 Internet 上面之名字啦!由于计算机在网络里面仅认识 IP 而已,所以,奇摩雅虎站的真实 IP 就是透过 DNS 解析 tw.yahoo.com 而找到这部计算机,然后经过 WWW 的协议功能将数据传到你的眼前来!那么有哪些格式的 URL 呢?呵呵!整个来说,网址列可以输入这些咚咚: <协定>://<主机地址>[:port]/<目录资源> 举个例子来说,我们通常去到中山大学的 FTP 网站都是以 Web 接口进入的,因为可以直接以浏览与搜寻的功能去捉取数据,因此,这个时候我们可以在网址列输入:『 http://ftp.nsysu.edu.tw 』以进入 WWW 界面的 FTP 网站!请注意,是 WWW 界面喔!那么如果我想要直接以 FTP 的模式来进行数据的浏览与传输呢?呵呵!直接在网址列输入以 ftp 为方法的网址:『 ftp://ftp.nsysu.edu.tw 』呵呵!是否发现两者显示的咚咚不太相同?!没错啦!那就是因为我们所连接的主机的协议不一样的缘故,所以主机响应的数据当然就不同啦!请特别留意这种网址列的格式喔! Client 如何向 Server 要求数据: 那么 WWW 是透过什么样的协议来传达数据的呢?呵呵!没有看到网址列的 http 吗?对啦! WWW 就是使用所谓的 http 这个协议来传送数据的,HTTP 即是 HyperText Transfer Protocol 的简写,亦即是目前 WWW 的数据传递主流协议啦!而在网站上面供人浏览的网页,则大部分需要符合 HyperText Markup Language (HTML) 的语法啰!也就是说,当我们在网址列输入主机的网址之后: 这就是主要的流程啦,不过,Client 传到到 WWW 主机,与 WWW 主机响应的讯息里面,可包含有哪些可能的动作呢? 大致上就有这些功能,当然啦,最主要的就是 GET 这个功能啦!毕竟我们连上 WWW 主机就是为了要取得他的数据嘛! ^_^。要记住的是,因为未来我们可能会去分析网站上的数据,所以,你必需要了解一下什么是 GET 或 HEAD 等等的意思!不然很多东西很难理解喔! ^_^ 有哪些类型的 WWW 网站?什么是 LAMP? 刚刚前头我们提到的都是关于 Client 端相对于 Server 端求取数据方面的问题,那么再来要谈的,是『咦!到底有哪些主要的 WWW 主机操作系统与软件之搭配呢?』呵呵!问的好!在回答这样的问题之前,我们先来讨论一下, WWW 主机的主要类型好了。基本的类型我们可以分为两种: 呵呵!这么看起来的话,似乎动态网页比较精彩喔!因为他可以跟使用者互动,也就更增加 WWW 主机的可变性与灵活运用之性质!所以啰,有办法的话,当然是选择动态网站的 WWW 主机架设比较好啰!那么动态网页的 WWW 主机需要些什么呢?就如同刚刚我们提到的,最重要的是那个可以随时更新资料的『数据库软件』所提供的信息,来与用户互动,因此,一定要有数据库软件喔!再来,只有数据库,没有存取接口来沟通 Server 与 Client 端的数据传递当然还是无法直接在 Web 接口上面存取数据库的内容啦!因此,我们还需要一个『网页程序语言』来进行这个接口的编写哩!当然啦,最主要的还有就是需要 WWW 运作的软件啦!所以你需要: 那目前有哪些主流的个人动态 WWW 主机系统呢?大致上可以分为两种:一种是 Windows 系统的 IIS + MS 的 SQL + ASP WWW服务器,这种 WWW 主机架设上蛮容易的,不过由于 Windows 的某些特性,所以很容易被 Cracker 所破坏;另外一种则是 Linux 系统上面的 Apache + MySQL + PHP 的 WWW 服务器 ( 简称 LAMP ) ,这种服务器架设上有一定程度的困难度,尤其在升级与维护的方面,但是运作妥当的话,他的硬件要求、性能、安全性等方面,则相对的较佳喔!我们这里本来就是练习 Linux 的嘛!因此底下鸟哥将针对 Linux 系统上面的动态 WWW 主机进行介绍,当然啦,主角是 WWW 套件的 Apache 啦!至于需要了解的是: PHP 与 MySQL 分别是两个独立于 Apache 的套件,因此要让 Apache 这个 WWW 软件能够启用 PHP 与 MySQL 的功能,就必需要启动 Apache 里面的 PHP 与 MySQL 的模块啦!首先,未能免俗的,我们还是得分别介绍一下 LAMP 里面各个小东西的说明: SSL 与 CA 的认证机制: 我们在前头有提过关于 HTTP 使用在传输上面的协议仍然是以 TCP/IP 为准,他传输的时候是使用明码来传送的,也就是说,在 Internet 上面流窜的 WWW 数据,基本上,都是以没有加密过的形式在传送数据!那么,当有些有心人士,利用 TCP Listen 的功能,即可将 Internet 上面的数据封包捉下来进行解析,并可能进一步取得该数据封包内的信息!『嗄!这有什么了不起,不过就是 WWW 信息而已,又不像 SSH 这种远程联机服务器的重要!』 嘿嘿!这您可就有所不知了。要晓得的是,我们的网站并不涉及金流及物流的信息,所以当然没有什么『隐密性』可言,但是,如果今天换成是一个交易网站呢?例 如网络书店的信用卡交易,例如一些金融公司提供的网络交易行为!这些讯息当中,很多都是含有相当重要的私人讯息ㄋㄟ〜例如信用卡、身份证等代表个人的证 号。万一被人撷取,呵呵!那可不是闹着玩的!所以啰,这个时候就需要有『数据加密』的动作了!目前用在 WWW 上面的主要加密功能,有 Secure Socket Layer ( SSL ) 及 Certificate Authorities ( CA )两个主要的模式。 Secure Socket Layer ( SSL ) 不晓得您是否还记得我们在 远程联机服务器 里面提到的关于 SSH 这个服务器的联机过程!?也就是利用 Server 提供的 Public Key 并配合 Client 端随机产生的 Private Key 来组成一组加密( Public Key )与解密( Private Key )的方法!呵呵!这个方法同样的也被运用于 WWW 主机的设定啦!而支援这个 WWW 主机进行 Public 与 Private 加密的套件,就是很多时候都被拿出来使用的 OpenSSL 这个好家伙了!所以啰,要让你的 WWW 具有 SSL 加密的功能,就必需要安装 OpenSSL 这个套件才成吶!基本上,当 Client 端要向 Server 端求取数据的时候,则利用 Server 端本身提供的 Public Key 及 Client 端随机产生的 Private Key 组成一组可供利用的密码组合!则资料由 Server 传送到 Client 端之前,会先经由 Server 的 Public Key 将数据封包加密,而到了 Client 之后,才经由 Private Key 将数据解密!所以,当数据在 Internet 上面跑时,他是加密过的数据封包喔!即使被人劫取下来,他不晓得 Public 与 Private ,那么要解密可能也得费上几天几夜,甚至是好几年的功夫ㄋㄟ!因此,数据就会比较安全啦!当然啦,以我们这种主要以分享为主的网站,自然不需要使用这种技术!反正数据本来就是 Open 的! ^_^ Cerificate Authorities ( CA ) CA 这个方法同样也是使用 Public 与 Private Key 的方式, ( 呵呵!我们可以说,目前加密与解密的行为大部分都是使用这种类似的观念来进行的啦! ) 由于 SSL 使用的 Public 是 WWW Server 自行建立与产生的,所以具不具有公信力我们还不是很清楚!万一你连上去的 WWW 网站是个骗人的集团建立的,那么有没有加密对你而言,不都是粉危险的吗?咦!那么是否可以透过第三公证人来查验这个 Server 的 Public Key 呢?呵呵! CA 这个方法就是要达成这个目的啦!基本上, CA 是一个公认的合法组织,他可以用来查验 WWW Server 提供的 Public Key 是否合法!以保障 Client 者的权益。因此, CA 是要钱的喔! 我们这里对于 SSL 及 CA 这两个咚咚仅提及他的概念,底下的文章并没有提到要怎么制作!有兴趣的朋友得自行到相关的网站去查询喔: 大标题的图示套件安装
RPM 安装 LAMP 方式:以 Mandrake 9.0 与 Red Hat 9.0 为例 既然要安装 LAMP 自然需要 Linux 系统,以及 Apache, MySQL 及 PHP 啰!我们以 Mandrake 9.0 提供的操作系统,及默认的相关档案来安装起所需要的套件!需要的套件至少有: 档案可不少哪!所以需要好好的选择来安装才行!『请依照上面的顺序一个一个的安装下去吧!』当然,这么安装会疯掉的吶!所以我们建议使用 urpmi 来安装您的 Mandrake 的 LAMP 主机喔!请回到『网络升级套件』那一章节去查阅如何使用喔! 好了,那么如果是 Red Hat 9 呢?他需要的套件至少也需要底下这些咚咚吶: 当然还有很套件没有列出来咯,您可以使用 apt 去安装这些套件,以克服属性相依的问题呢!重点在 httpd, mysql-serve, php 以及 php-mysql 这几个套件说!挺重要的喔!赶快去安装吧! 鸟哥的特别告知:特别注意到,这里是以 Mandrake 9.0 与 Red Hat 9 做为介绍的,如果您不是以这个版本来安装你的 Linux 系统的话,而且您所在的环境并没有连上 Internet 时,那么在档案的名称上面可能会有一点点的不同!不过不要紧啦!因为你可以使用: 这里不谈完全的安装,我们仅安装可以让 Apache 跑 MySQL 及 PHP 等基本的套件,不玩 LDAP 及其他的咚咚!等到您对于 Apache 有一定的概念之后,自然就可以针对你希望的模块来加以设计了! ^_^其中,最重要的是 mod_php (Mandrake 9.0) 或者是 libphp4.so (Red Hat 9)喔!如果你没有安装下去的话,那么很可能会造成 apache 无法执行 PHP 的困扰喔!OK!这样就安装完毕了!如果你不想要使用 Tarball 安装的话,可以跳到后续的 主机设定 去瞧一瞧设定的步骤啰! Tarball 安装 LAMP 方式 ( Apache 2.xx 2003年09月10日 前 ) Tarball 的安装方式方面,我们选择最新的套件来安装,如果您想要安装旧版的 1.3.xx 的 Apache 时,请参考 LAMP 的安装方法(http://linux.vbird.org/linux_server0360apache-1.php) 一文。 下载各个套件: 要架设这样的一个主机需要哪些套件呢?不就是: Apache、MySQL及 PHP 啰!要从何处下载呢?你可以到中山大学的 FTP 站去搜寻,因为他提供的接口鸟哥真是蛮喜欢的,而且也真的很实用喔!寻找档案快又正确! 当然,你也可以到各个套件的发展处去下载: 也就是说,我们需要的档案有三个,分别是: 依序安装: 还记得我们在 Tarball 与 RPM 一文里面提到的 Tarball 的安装方法吗?没错!基本上,就是几个步骤而已: 大致上只有这样而已ㄋㄟ!简单吧!但是 Apache 的安装方法却不太简单! Why ??这是因为他还需要支持 PHP 这个玩意儿!所以就显的特别的麻烦〜不过,现在有比较简单的方式了!呵呵!就是使用 Dynamic library 的方式 ( 动态函式库 ) 来安装 PHP ,哈哈!那么就不需要将他 compile 到 apache 里面去,而可以将他视作一个独立的模块!如此一来, PHP 的升级与安装就显的很简单啰!不过,由于动态函式库的安装虽然有好处,然而缺点就是....你的模块路径不能够随便乱摆!好在我们很少将编译好的模块随便移动的〜呵呵!所以请注意:底下我们将 PHP 以『动态函式库』的形式来安装。 为什么说 MySQL 最简单呢?这是因为在 官方网站 上面提到了一个问题,也就是使用 source code ( Tarball ) 的方式来编译时,如果您的 compiler ( GCC ) 版本高于 2.96 时,那么您所编译出来的 MySQL 程序,『有可能』会有数据库突然死掉的情况发生!因此, MySQL 的官方网站上面『建议』在目前的版本当中,最好直接以他们编译好的 MySQL 的 binary 版本来进行安装的动作!因为他已经帮你编译好了啊!所以,我们就不需要 make 啰!因此就变的很简单啦!此外,如果你的 Linux 版本中,你的 GCC 大于 2.96 时,且你使用的就是该 Linux 版本提供的 MySQL 时,官方网站上面,亦建议你直接将该 MySQL 移除,然后以他们的版本来安装,会比较没有问题啦!看来我们可能也需要升级一下 MySQL 啦!( 无论如何, MySQL 仅是提出『有网友回报出有这个问题』,所以,如果您的 MySQL 向来就没有问题,那么就不用理会这个困扰了!) 另外,我怎么知道我目前的 GCC 版本呢?可以这样做: 1. 查询可以使用:
[root@test root]# rpm -qa | grep gcc libgcc1-3.2-1mdk gcc-cpp-3.2-1mdk gcc-3.2-1mdk gcc-c++-3.2-1mdk 2. 移除 MySQL
可以使用:
如果还不会使用 RPM ,那么就不要玩架站吧!说过好多次啰! ^_^!上面的结果就显示我的 gcc 是 3.2 版,哇!太新了!比 2.96 版要更新的多!那么照 MySQL 官方网站的建议,还是置换成旧版本会比较好ㄋㄟ!如果要移除的话,那么就使用 -e 的参数来移除 MySQL 吧!( 注:还是那句老话,请特别留意你的每个动作代表的意义,尤其是如果您的 MySQL 已经运作了一段时间了,请将 /var/lib/mysql 这个目录内的所有数据备份下来! ) 好了!假设我已经将 mysql-3.23.57-pc-linux-i686.tar.gz 这个档案捉下来了,那么要如何安装呢?假设该档案在 /root 底下时: 0. 查询是否已经有
mysql 的账号:
[root@test root]# grep mysql /etc/passwd # 如果没有 mysql 出现的话,那么请建立一个名为 mysql 的账号! # 这个是要给 MySQL 的 Process 使用的!为了安全性,请务必建立! # 如果之前已经建立过了,那么底下这一步建置的工作就可以跳过, # 直接到 1. 解压缩与建立连结 去安装啰! [root@test root]# groupadd -g 315 mysql # 因为我刚好没有 315 这个 GID ,而 mysql 是系统使用的账号,我希望他在 500 以内, # 因此就选择 315 做为 mysql 的 gid 啰!你当然可以变更这个数字, # 使用小于 500 的 GID 做为系统的账号之用只是惯用的习惯而已啦! ^_^ [root@test root]# useradd -u 315 -g mysql -d /usr/local/mysql/data -M mysql # 我使用 315 做为 mysql 这个账号(与群组同名!)的 UID 啦! # 并且建立他的家目录在 /usr/local/mysql/data 里面! 1. 解压缩与建立连结: [root@test root]# cd /usr/local <==因为已经是 binary 的套件,不用 make ! [root@test local]# tar -zxvf /root/mysql-3.23.57-pc-linux-i686.tar.gz ...(讯息略过).... # 最后会产生一个目录: mysql-3.23.57-pc-linux-i686 [root@test local]# ln -s mysql-3.23.57-pc-linux-i686 mysql # 通常习惯将 MySQL 安装在 /usr/local/mysql 当中!但为了未来升级版本的确认, # 官方网站上面建议使用连结的方式来进行 MySQL 的使用! 3. 档案权限修正: [root@test local]# mkdir -p /var/lib/mysql [root@test local]# chown -R mysql:mysql /var/lib/mysql [root@test local]# chown -R root:mysql /usr/local/mysql-3.23* [root@test local]# chown -R mysql:mysql /usr/local/mysql/data # 修改成较为安全,且数据库所属人为 mysql 喔!特别留意啦! 4. 建立数据库: [root@test local]# cd mysql [root@test mysql]# ./scripts/mysql_install_db [root@test mysql]# chown -R mysql:mysql /var/lib/mysql [root@test mysql]# chown -R mysql:mysql /usr/local/mysql/data # 这个步骤会在 /usr/local/mysql/data 里面建立好 MySQL 的数据库! # 由于 /usr/local/mysql/data 是 MySQL 的数据库目录,所以很重要喔!请多加备份! # 不过,在新版的 3.23.57 这个版本当中,数据库竟然移到 /var/lib/mysql 去了! # 还真是有点奇怪吶!另外,根据诸多网友的回报,发现在建立数据库之后, # 还需要重新设定一下数据库的所属群组与拥有者喔! 5. 启动测试: [root@test mysql]# /usr/local/mysql/bin/safe_mysqld --user=mysql & Starting mysqld daemon with databases from /usr/local/mysql/data # 注意:这个时候 mysql 会建立一个 socket file 在 /var/lib/mysql/mysql.sock 喔! # 未来我们在使用 MySQL 的各种指令功能时,都需要使用到这个 socket file, # 但是 MySQL 偏偏预设的 socket file 是在 /tmp 底下,怎么办?!真讨厌, # 我们可以透过这个简单的动作来欺骗我们的 MySQL 喔! [root@test mysql]# ln -s /var/lib/mysql/mysql.sock /tmp/ # 如果还是找不到 mysql.sock 时,请使用 find / -name mysql.sock # 来找出这个档案的绝对路径吧! [root@test mysql]# netstat -tl | grep mysql tcp 0 0 *:mysql *:* LISTEN [root@test mysql]# ps -aux | grep mysql mysql 6394 0.0 1.5 10528 992 pts/3 S 16:16 0:00 /usr/local/mysql/ mysql 6395 0.0 1.5 10528 992 pts/3 S 16:16 0:00 /usr/local/mysql/ mysql 6396 0.0 1.5 10528 992 pts/3 S 16:16 0:00 /usr/local/mysql/ root 6422 0.0 1.1 2408 732 pts/3 S 16:20 0:00 grep mysql # 呵呵!这样就应该是搞定了! MySQL 已经在监听要求啰!而且所有人为 mysql ! 6. 开机后立即启动! [root@test mysql]# vi /etc/rc.d/rc.local # 将底下这一行加入这个档案的最后面一行喔! cd /usr/local/mysql; /usr/local/mysql/bin/safe_mysqld --user=mysql & # 这样一来,每次开机就可以自动的启动 MySQL 啰! # 注:由于很多网友回复之问题中发现,如果没有加上 cd /usr/local/mysql 时, # 会导致无法自动于开机的时候启动,因此,请大家记得加上这个动作呢! 7. 进阶设定内容: # 由于我们 MySQL 放置的地点在 /usr/local/mysql 内,这个目录并不在 PATH 当中! # 且 man page 亦不在 MANPATH 里面,所以,我们要手动的帮他加入啰! [root@test mysql]# vi /etc/profile # 大约在 33 行的地方,而且每个 distribution 设定的地方都不太相同! # 请找到 export PATH ... 那一行,以 Mandrake 9.0 来说,大概在 33 行左右, # 新加入一行: PATH="$PATH":/usr/local/mysql/bin export PATH ....(略).... [root@test mysql]# vi /etc/man.config( 有的 distribution 为 /etc/man.conf ) # 可以在这个档案的任何地方加入底下这一行: MANPATH /usr/local/mysql/man # 就可以具有 man page 的能力了! 8. 建立 MySQL 的 root 账号密码! [root@test mysql]# /usr/local/mysql/bin/mysqladmin -u root password 'your.password' # 请建立密码!为了安全起见!否则你的 MySQL 数据库,将默认所有人都可以登入喔! # 注意,如果执行上面的指令时,竟然出现如下的错误: ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111) # 这表示 mysql 找不到 mysql.sock 这个档案!我们上面不是提到 mysql.sock 的 # 绝对路径吗?假设是 /var/lib/mysql/mysql.sock 好了,那么我们可以: [root@test mysql]# /usr/local/mysql/bin/mysqladmin -u root \ > -S /var/lib/mysql/mysql.sock password 'your.passwd' # 当然也可以进行档案的连结阿! ln -s /var/lib/mysql/mysql.sock /tmp [root@test mysql]# /usr/local/mysql/bin/mysql -u root -p \ > [-S /var/lib/mysql/mysql.sock] # 后面 [] 的内容不一定需要!且 [] 不要打! Enter password: <==这里输入你刚刚建立的那个密码喔! Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 to server version: 3.23.57 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> exit
# 这样就是可以确认已经可以连接到你的
MySQL 数据库了!请特别留意,有的朋友没有移除
有这几个步骤就 OK 啦!您的 MySQL 已经建立了,而且管理者的账号 root 也已经建立的密码啦!请特别留意的是,这个 root 是 MySQL 的账号,与 Linux 在 /etc/passwd 里面的 root 是完全没有关系的喔!因为 MySQL 只是 Linux 里面的一个软件,任何 Linux 里面的用户,只要知道 MySQL 的 root 密码,就可以使用 MySQL 的 root 功能! 此外,特别需要留意的还有,由于我们使用的是 Tarball 的方式来安装的 MySQL ,所以我们的 data directory 会是摆在 /usr/local/mysql/data 当中!因此,有必要针对这个目录进行『备份』的工作!(注:还是得视您的 MySQL 版本来设定的!以 3.23.54a 版本来说,他确实是在 /usr/local/mysql/data ,不过 3.23.57 则改换到了 /var/lib/mysql 去了!真是伤脑筋吶!)千万不要大意备份的举动喔! 因为目前有所谓的这个动态函式库,因此,我们在安装 Apache 的时候,请特别要『向 Apache 宣告 PHP 模块使用动态函式库的模式』来进行 PHP 的执行!这个时候,你可以这样的来安装你的 Apache 喔! 0. 解压缩:
[root@test root]# cd /usr/local/src [root@test src]# tar -zxvf /root/httpd-2.0.47.tar.gz # .....(讯息略).... # 最后会产生一个 /usr/local/src/httpd-2.0.47 的目录 1. 搜寻设定内容: [root@test src]# cd httpd-2.0.47 [root@test httpd-2.0.47]# ./configure --prefix=/usr/local/apache2 \ > --enable-so --enable-rewrite # 上面请特别注意到: --prefix=/安装的路径:这个项目在设定未来你的 Apache 安装在那个目录当中?! --enable-so :这个项目则是在宣告使用动态函式库啦!特别重要! --enable-rewrite :这个项目只是预防用的!可以先设定,不过不一定会用到! # 其他的额外项目请使用 ./configure --help 来察看吧! # 按下 Enter 之后,会开始侦测你的主机内容!如果发生找不到 gcc 或 cc , # 那么肯定就是没有安装 make 或一些编译软件!请自行再加以安装吧! 2. 开始编译与安装: [root@test httpd-2.0.47]# make; make install # 如果没有错误的话,那么在 /usr/local/apache2 这个目录当中就已经将你的 Apache 安装了 [root@test httpd-2.0.47]# cd /usr/local/apache2 [root@test apache2]# ls -l bin/ :预设的 Apache 所有执行档案的放置目录 build/ :一些编译过程中安装好的咚咚 cgi-bin/ :预设的可以执行 CGI 的目录!!粉重要! conf/ :预设的 Apache 的参数文件放置的目录!!粉重要!! error/ :当使用者连上 server 有问题时,显示的错误网页在这里提供! htdocs/ :这个就是默认的主机的主页!!粉重要! icons/ :默认的一些小图示 ( icon ) 放置的目录 include/ :其他一些 Apache 相关的函式库放置的目录 lib/ :其他函式库放置的目录 logs/ :登录讯息档案放置的目录喔! man/ :这个就是 man page 放置的目录 manual/ :使用说明喔! modules/ :其他 Apache 使用的模块放置的目录! 3. 做个简易的修改: # 奇怪的很,在 httpd.conf 这个 Apache 的配置文件当中,竟然启用的 User # 与 Group 有点怪怪的,所以这个时候我们必须要修正一下这个项目啦! [root@test apache2]# vi /usr/local/apache2/conf/httpd.conf # 找到底下这两行: User nobody Group #-1 # 粉奇怪吧!竟然是 #-1 那!而且 nobody 也不见得每部机器上面都有这个 # 系统账号,请查出您的 /etc/passwd 里面,是否有 nobody 这个账号,如果 # 没有 nobody 这个账号,可以使用 useradd -r nobody 来新增系统账号。同时, # 查看一下您的 /etc/group 里面是否有 nobody 或者是 nogroup 的存在? # 通常 Mandrake 会存在 nogroup 这个群组,至于 Red Hat 则会有 nobody 这个群组, # 所以将上面两的项目改成底下的模样吧! User nobody Group nobody # 然后储存后离开! 4. 确定启动状态: [root@test apache2]# /usr/local/apache2/bin/apachectl start [root@test apache2]# netstat -utl tcp 0 0 *:http *:* LISTEN # 呵呵!看到上面这行就表示您的 Apache 已经启动啰!当然啦! # 有的人会看到的是: tcp 0 0 *:www *:* LISTEN # daemon 的名字会依照 /etc/services 而变呢! # 而那个 apachectl 档案,就是启动的 scripts 啦!若要开机时启动 apache , # 那么将 /usr/local/apache2/bin/apachectl start 放在 /etc/rc.d/rc.local 内吧! 5. 进阶设定: [root@test apache2]# vi /etc/profile # 将刚刚我们上面 MySQL 时新增的一行,重新再改为如下所示: PATH="$PATH":/usr/local/mysql/bin:/usr/local/apache2/bin [root@test apache2]# vi /etc/man.config # 再新加一行! MANPATH /usr/local/apache2/man 6. 使用文字接口浏览器测试: [root@test apache2]# lynx http://localhost Test Page for Apache Installation If you can see this, it means that the installation of the Apache web server software on this system was successful. You may now add content to this directory and replace this page. ___________________________________ Seeing this instead of the website you expected?
This page is here because the site
administrator has changed the
The Apache documentation has been included with this distribution.
You are free to use the image below on an Apache-powered
web server.
为什么一定要在 /usr/local/src 底下进行 Tarball 呢?这仅是约定俗成的啦!因为如此一来,大家都安装在这个地方,以后主机的维护与移交都很简易!并且,对于您未来在主机上面的『升级』与『版本判别』都有很好的帮助呢!基本上,如果上面的过程都没有错误发生,那么恭喜您,已经可以顺利的来启动你的 Apache 了!并且应该有第一个主机网页产生啦!呵呵!真是快乐喔!但是如果有问题呢?通常最大的问题排除打字的错误之外,应该就是来自于我们在 Tarball 与 RPM 一文当中提到的,忘记安装那个 make, gcc 等套件!这个时候,请拿出您的光盘,一个一个的将套件安装上去吧!粉麻烦的啦!好了!接着下来看看怎么安装 PHP 咯!而这个方式安装下来的 Apache 首页就在 /usr/local/apache2/htdocs 这里啦![ 注意:在这个安装的方法之后,很奇怪的是,并没有将中文的首页设定正确!你可以到 /usr/local/apache2/htdocs 里头,下达 cp index.html.zh index.html.tw.Big5 即可! ] 没有 PHP 时,您的网页将变的很单调ㄟ〜而且粉多的 PHP 论坛都没能架设,很可惜!所以底下我们来谈谈怎么让你的 LAMP 正确的支持 PHP 啰! 0. 解压缩:
[root@test root]# cd /usr/local/src [root@test src]# tar -zxvf /root/php-4.3.3.tar.gz # .....(讯息略).... # 最后会产生一个 /usr/local/src/php-4.3.3 的目录 1. 搜寻设定内容: [root@test src]# cd php-4.3.3 [root@test php-4.3.3]# ./configure --prefix=/usr/local/php4 \ >--with-apxs2=/usr/local/apache2/bin/apxs \ >--with-mysql=/usr/local/mysql \ >--with-config-file-path=/usr/local/php4 # 上面请特别注意到: --prefix=/安装的路径:这个项目在设定未来你的 Apache 安装在那个目录当中?! --with-apxs2 :这个则是 Apache2 专用的选项喔!请针对您的主机情况设定! --with-mysql :这个则是针对 MySQL 啦!当然啦,就写我刚刚搞定的咚咚! --with-config-file-path:这个又是什么?呵呵!是 php 的配置文件 php.ini 放置的目录啦! # 其他的额外项目请使用 ./configure --help 来察看吧! 2. 开始编译与安装: [root test php-4.3.3]# make; make install # 如果没有错误的话,那么在 /usr/local/php4 这个目录当中就已经将你的 php 安装好了! 3. 转存 PHP 基本组态档案: [root@test php-4.3.3]# cp php.ini-dist /usr/local/php4/php.ini # 这个路径与你刚刚在 ./configure 当中那个 --with-config-file-path 设定有关! 4. 启动 Apache 当中的 PHP 选项: [root@test php-4.3.3]# vi /usr/local/apache2/conf/httpd.conf # 找到底下两行: LoadModule php4_module modules/libphp4.so <==大约在 231 行处 AddType application/x-httpd-php .php <==这一行可以在 847 行处自行增加! 5. 重新启动 Apache : [root@test php-4.3.3]# /usr/local/apache2/bin/apachectl stop [root@test php-4.3.3]# /usr/local/apache2/bin/apachectl start 6. 测试 PHP 是否是正常工作的: [root@test php-4.3.3]# cd /usr/local/apache2/htdocs [root@test htdocs]# vi test.php <?php phpinfo( ); ?> # 以我的测试主机为例,我的测试主机 IP 为 192.168.1.2 ,所以随便以一部可以联机的PC, # 在网址列输入 http://192.168.1.2/test.php # 或者直接在本机的 X-Window 上面输入 http://localhost/test.php 亦可! 在上面的最后一个步骤中,如果你的浏览器有出现类似底下的画面,那么就是编译成功啦! ^_^,而且,主要的 PHP 组态档案会是在 /usr/local/php4/php.ini 这个档案喔! 哈哈!费了九牛二虎之力,终于将 LAMP 以 Tarball 安装完毕,并且也测试 OK 啰! 升级与安装方式的选择建议: 推荐使用 RPM 的原因: 一般而言,如果没有特别的需求的话,那么使用 RPM 通常已经可以满足大家的需求了!并且在安装上面确实比较容易!此外,未来在升级方面,可以由各家的 Linux distributions 来提供适当的升级版套件,因此,升级上面也是绝对没有问题的!所以这里特别推荐使用 RPM 的方式来进行您的 LAMP 的架设!不但方便简单,而且基础功能都已经含有了!不需要再考虑有的没的咚咚! 有些时候, Tarball 也是不得已的: 不过,有些时候也是不得不升级的吶!或许是因为 distribution 厂商提供的版本速度更新太慢,或者是网络上的 Bug 问题太多,或者是你需要新版本的某些功能时,那么您只好自行以 Tarball 的方式来安装了!而这里需要特别强调的是,如果您使用 Tarball 来安装 LAMP 时,需要整体考虑喔!因为 PHP 有使用到 Apache 2.xx 版本的某些功能,所以重新编译 Apache 时,需不需要重新编译 PHP 呢?绝大部分的情况之下,由于 Apache 支持动态函式库,因此或许不需要重新的编译 PHP ,不过,还是需要注意的!并且,使用 Tarball 的时候,最好全部这三个咚咚都使用 Tarball ,不要一个 RPM 一些 Tarball 的,容易错乱啦! 大标题的图示主机设定:
LAMP 的套件结构与主机规划 因为 LAMP 主要有三个基本套件,分别是 Apache/MySQL/PHP,那么这三个套件的配置文件与主要执行档在哪里呢? 关于 Apache 的路径问题: 我们在浏览网站的时候,总会进入该网站的『首页』吧,那个首页放置的目录就是所谓的『主网页目录』了。主网页目录我们可以在 httpd.conf 里面来设定,不过还是有套件的默认值的啦!底下我们就来谈一谈吧! ^_^ 关于 MySQL 的路径问题: MySQL 是数据库软件呀!所以最重要的当然就是他的数据库放置的目录啰!呵呵!答对了!那么这个数据库放在哪里呢?预设是在/var/lib/mysql 里面的!所以如果你有使用 MySQL 做为你的网页或者是论坛的话,那么请将这个目录的咚咚备份下来吧!很重要的喔! 关于 PHP 的模块问题: 一般而言,我们大多以『动态函式库』的方式来进行 PHP 的模块编译的!最大的优点就是可以在升级的时候,只要直接升级 PHP 即可!与 Apache 的相关性就比较小一点,因此,在升级某个套件的时候,不需要全部的套件都一起升级的啦!这样真的是比较简单喔! 好了,那么如何规划我们的 Apache 主机呢?如果您的主机想要提供用户来设计个人的首页,那么自然就得开放用户具有家目录啰!而为了安全起见,当然家目录 (/home) 独立一个 partition 是比较好的!并且,由于未来可能会针对不同的用户进行磁盘配额 (quota) 的限制,所以, /home 真的可以考虑独立一个 partition 的啦!此外,如果您的 apache 未来连接的 Client 数量挺大的时候,呵呵!硬盘与内存需要大而且速度快一点的才好喔! 基本要求: 要让您的 Apache 就是 WWW 能够在 Internet 上面被搜寻到,您的主机最好要有个 domain name ,亦即是有个独一无二的名字啦!如此一来,在 Internet 上面,大家比较容易找的到您的主机!并且,如果您主机的内容已经大致上完备的话,那么可以到各大搜索引擎去注册(免费)一下,例如奇摩雅虎、地瓜藤、新浪网等等去注册一下!这样就可以让大家搜寻到你的网站啰!所以,你需要: 好了!不啰唆,立刻来实作看看先! 最简易 Apache 设定 为什么挂了个『最简易』呢?呵呵!因为那就是没有任何麻烦的设定嘛!基本上,如果你按照鸟哥上面 Tarball 的方法安装好之后,其实立刻就有主机的首页了!当然,使用 RPM 也有首页啦!因此,用最原始的设定其实就可以进行主机的首页浏览了!需要特别注意的是,第一次进入到 Apache 之后,你会发现有个 documentation ,在那个超链接当中,对于 Apache 有『相当完整的介绍!』如果有任何问题,可以到该连结里面去搜寻!绝对可以找到您要的信息喔!底下我们就以 Apache 2.xx 版本的配置文件案来介绍,如果您是 1.3.xx 版本,请自行参考底下的设定来解决您的 httpd.conf !设定方面差不多啦! ^_^ 此外,需要注意的是基本的环境设定方法为:
...... ...... </设定项目> 例如:
Options Indexs </Directory> 几乎都是这样的设定方式喔!请注意一下即可!特别留意的是,如果你有额外的设定时,不能随便在 httpd.conf 里头找地方写入!否则如果刚好写在 <Directory>...</Directory> 里面,呼呼!那么就会发生错误啦!需要前前后后的找一找喔! [root@test
root]# cd /usr/local/apache2/conf
[root@test root]# vi httpd.conf ServerRoot "/usr/local/apache2"
PidFile logs/httpd.pid
Timeout 300
KeepAlive On
MaxKeepAliveRequests
100
KeepAliveTimeout
15
<IfModule
prefork.c>
Listen 80
User nobody
ServerAdmin
root@localhost
#ServerName
new.host.name:80
UseCanonicalName
Off
AddDefaultCharset
ISO-8859-1
HostnameLookups
Off
[root@test
root]# cd /usr/local/apache2/conf
[root@test root]# vi httpd.conf DocumentRoot
"/usr/local/apache2/htdocs"
<Directory
/>
<Directory
"/usr/local/apache2/htdocs">
UserDir public_html
DirectoryIndex
index.html index.html.var
Alias /icons/
"/usr/local/apache2/icons/"
Alias /manual
"/usr/local/apache2/manual"
ScriptAlias
/cgi-bin/ "/usr/local/apache2/cgi-bin/"
[root@test
root]# cd /usr/local/apache2/conf
[root@test root]# vi httpd.conf LoadModule php4_module
modules/libphp4.so
ErrorLog logs/error_log
启动 httpd (如何关闭 https ) 要启动 WWW 实在是太简单啦!直接给他启动即可!如果是以 RPM 安装的,那么启动档案预设在 /etc/rc.d/init.d/httpd 这个档案,所以,你可以这样启动: [root@test
root]# /etc/rc.d/init.d/httpd start
(启动)
[root@test root]# /etc/rc.d/init.d/httpd stop (关闭) 至于 Tarball 则是以 apachectl 来作的: [root@test
root]# /usr/local/apache2/bin/apachectl start
(启动)
[root@test root]# /usr/local/apache2/bin/apachectl stop (关闭) 无论如何,启动之后请立即察看一下 port 是否已经开启了?! [root@test
root]# netstat -tuln | grep ':80'
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 并且需要在登录档当中发现底下这一行才算成功喔! [root@test
root]# vi /var/log/httpd/error_log
[Thu Dec 26 20:16:53 2002] [notice] Apache/2.0.43 (Unix) PHP/4.2.3 configured -- resuming normal operations 如何关闭 https : 此外,如果您比较细心留意的话,会发现 Red Hat 9 的 httpd.conf 里面有这一行:『Include conf.d/*.conf』(大约在 162 行的地方),这表示:『 Apache 在启动的时候,除了读取原来的 httpd.conf 这个配置文件之外,也会读取 /etc/httpd/conf.d/*.conf 的所有档案来规范 Apache 的启动状态。』这样的设定无疑是比较灵活的,可惜的是,对于一些初接触 Apache 的朋友来说,可能会觉得有点怕怕的〜 好了,那么我们来看一下, Red Hat 9 里面的 /etc/httpd/conf.d/ 有什么数据呢? [root@test
root]# ll /etc/httpd/conf.d/*.conf
-rw-r--r-- 1 root root 814 Feb 10 2003 /etc/httpd/conf.d/perl.conf -rw-r--r-- 1 root root 459 Jun 30 04:35 /etc/httpd/conf.d/php.conf -rw-r--r-- 1 root root 1276 Feb 20 2003 /etc/httpd/conf.d/python.conf -rw-r--r-- 1 root root 11140 Jul 31 23:40 /etc/httpd/conf.d/ssl.conf 在上面的档案当中,较为有趣的是 ssl.conf 那个档案,那个咚咚就是我们前面提到的以 SSL 加密的设定值!这个设定值会让我们的系统多了一个 https (port 443) 在监听网络服务呢!有需要这东西吗?当然不需要了!因为我们又不需要使用信用卡数据说〜好了,那么如何将 Red Hat 9 的 https 取消呢?呵呵!将 ssl.conf 更改檔名即可!不要使用 .conf 的附檔名就行了!例如底下的方式: [root@test
root]# cd /etc/httpd/conf.d
[root@test conf.d]# mv ssl.conf ssl.conf.bak [root@test conf.d]# /etc/rc.d/init.d/httpd restart 这样就可以关闭 https 啰! 测试结果:
用户的个人网页启动 呵呵!再来则是个人用户啦!如果是个人用户要自己的首页时,要怎么办呢?刚刚我们不是提到了 httpd.conf 中有一项关于个人首页的设定,通常如果你不另行修改 httpd.conf 档案的话,他的默认值都是『 public_html 』这个设定,好了,那要如何设定个人网页呢?假设以 test 这个账号为例,我们可以这样进行: [test@test
test]$ cd
# 回到自己的家目录
[test@test test]$ mkdir public_html [test@test test]$ chmod 755 public_html [test@test test]$ chmod 755 /home/test # 在你的客户端家目录中建立了一个 public_html 的目录, # 并将此目录的权限改成可以让其他人观看,注意喔, apache # 预设是 public_html ,但是如果你在 httpd.conf 这个档案中 # 改变了目录名称,则必须作适当的修正喔! 然后在你的目录中,亦即 /home/test/public_html 当中,建立一个档名为 index.html 的 HTML 档案,然后在 IE 的网址列打入
这是最简单的方法啦,还记得我们的主页有 Options FollowSymLinks 吧?!呵呵!所以利用 ln 就可以达到我们的需求了!首先,需要找到首页,然后在首页底下输入连结的方法: [root@test
root]# cd /usr/local/apache2/htdocs
这样立刻生效啦!不需要重新修改喔!厉害吧!! ^_^
[root@test htdocs]# ln -s /home/test/public_html test 另一种方是就是使用我们刚刚提到的那个 Alias 功能啦!也是粉简单的ㄋㄟ: [root@test
root]# vi /usr/local/apache2/conf/httpd.conf
请注意:
Alias /test/ "/home/test/public_html/" <Directory "/home/test/public_html"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> [root@test root]#
/usr/local/apache2/bin/apachectl
stop
好啦!这样你的用户之个人网页就 OK 啰! ^_^ 大标题的图示进阶安全设定:
CGI 之执行、Index 显示、查无网页显示之设定: CGI 之执行: 首先要来提到的是 CGI 的执行问题,这也是很多朋友想要提出的问题啦!到底要怎么设定才可以在某些路径里面执行 CGI 的程序呢?而不是使用纯文本将他 show 出来?!难道要执行 CGI 就非得在 /usr/local/apache2/cgi-bin 这个目录下不可吗?当然不是!有很多的方法可以来设定的!举个例子来说,假设今天有个一般身份的使用者 test ,他想要可以执行 CGI ,那么他的家目录在 /home/test/public_html 底下,而他的程序是放在 /home/test/public_html/cgi 这个目录中,那我可以怎么作呢?同样有两种作法: 你可以在 httpd.conf 这个档案中,找个地方加入底下的文字: [root@test
root]# vi /usr/local/apache2/conf/httpd.conf
呵呵!这样该目录立刻就可以执行 CGI 的程序啦!当然啦,那个
cgi 的档案,权限当中也必须要有『可执行, x 』的权限喔!而,如果你要执行某个
cgi 程序,例如 index.cgi 好了,那么就需要填入:http://your.server.name/~test/cgi/index.cgi
啰!
方法一:
# 再加入底下几行:
方法二:
[root@test root]#
/usr/local/apache2/bin/apachectl
stop
还有另外一个功能也可以达到同样的效果,那就是使用 ScriptAlias 喔!你可以在 httpd.conf 这个档案中,找个地方加入底下的文字: [root@test
root]# vi /usr/local/apache2/conf/httpd.conf
呵呵!这样也是可以啦!假设你要执行的档案仍然是 index.cgi ,那么,你的执行网址会变成:
http://your.server.name/testcgi/index.cgi
!就是这点不同啰!其他的都一样啦!
# 先确认在 httpd.conf
当中,底下这一行已经将批注拿掉了!
# 再加入底下这一行:
[root@test root]#
/usr/local/apache2/bin/apachectl
stop
刚刚我们前面不是提到 Options 关于 Indexes 的说明吗?对啦!由于 Indexes 加入的时候,找不到 index.html 时,会将该目录下的所有档案以类似 FTP 的画面秀出来,所以很危险,因此,可以的话,尽量不要在 Options 后面加 Indexes 喔!记得将他拿掉!会比较稍微安全一些!
那么好啦,既然不要秀出没有 Index.html 的目录下的所有档案,有没有什么替代的方法,可以让用户知道该目录下没有这个档案,并提供他另一个网页的连结呢?再举个另外的例子,如果你的网页经过了 大量的改版,所以某些原来的档案已经不见了!但是你有很多的老网友,那么他们连过来的时候,将会发生很多的错误,怎么办? 没关系,还记得当你查不到网页的时候, IE 或者是其他的搜索引擎,会自动的跑出一个窗口,警告说,查无该网页,并提供另一个可能的连结给您是吧?!同样的,我们也可以利用这样的机制,自己建立一个 额外的链接数据来给大家使用!如此一来,嘿嘿!找不到网页也没关系,我们已经提供了其他的连结,这样就可以很轻易的引导用户到适当的目录去浏览啦 又要设定这个 httpd.conf 档案啦!找到底下的地方,并且将他开启吧: [root@test
root]# vi /usr/local/apache2/conf/httpd.conf
# 大概在 880
行左右,可以找到下面这一行:
[root@test root]#
/usr/local/apache2/bin/apachectl
stop
再来则是要编辑这个档案啰!因为只要没有找到对应的网页时,这个网页就会被显示在 Client 端的浏览器上面,喝!你可以这样编啦: [root@test
root]# vi /usr/local/apache2/htdocs/missing.html
打上面那个 192.168.1.2 改成你的 IP ,这样就可以啦!注:这个版本很是奇怪!同样的方法,我在其他的所有
distribution 上面都可以成功,唯独以 Mandrake 9.0 即使用 Tarball 方式安装的此一方法,却无法成功!然而若使用
Apache 所默认提供的功能,那么就又可以成功!还真的是很奇怪.....
<html> <center> Missing HTML Web Page<br><br> I can't find any web page for you, <br> Please contact with me root@localhost, <br> or press <a href="http://192.168.1.2/manual/">here</a> to see the manual of Apache 2.xx </center> </html> 抵挡 IP 与限制使用者动作的设定(allow, deny, limit) 任何的 Service 都一样,应该都会有『限制联机登入者』的功能!当然, Apache 也不例外!他提供了抵挡 IP 或者是限制使用者进行某些工作的方法!那就是 Allow 与 Deny 的功能,另外,亦有 Limit 的功能可以来使用! 很多时候我们发现有某些来源的使用者似乎没有很遵守我们网站的约定,可能会砍站啦,或者是可能从事一些让管理员很生气的勾当!当然,你可以使用 iptables 等之类的防火墙功能来挡掉他,不过,我们也可以额外的再以 Apache 来挡他喔!还记得我们在前面的 <Directory> 里面的设定时,常常会看到 order allow,deny 那一行吧!呵呵!那就是我们可以针对的某些设定啦!举例来说,假如你知道 192.168.1.100 这个 IP 的使用者不乖以及 testing.idv.tw 这个 domain 的来源不被信任,你就不让他进入某个目录内,例如 /home/test/public_html/cgi,那么你可以这样做: [root @test
root]# vi /usr/local/apache2/conf/httpd.conf
如此一来,嘿嘿!那个 192.168.1.100 及所有来自 testing.idv.tw 这个领域的主机就无法进入你的
/home/test/public_html/cgi 这个目录啰!不过,其他的目录还是可以进入喔!请留意这个现象!所以,如果要将他全部的权限都关闭的话,或许
iptables 还是比较好的选择,不过,如果只是在乎某些目录而已,那么这个选项就不错用了!
# 额外再新增几行吧! <Directory "/home/test/public_html/cgi"> Options ExecCGI SetHandler cgi-script order allow,deny deny from 192.168.1.100 deny from testing.idv.tw </Directory> 一般来说, Client 端有哪些功能可以动作呢?大概有:GET, POST, OPTIONS, DELETE 等等,由于 POST 与 DELETE 算是比较高权限的功能,如果今天您有一个目录,在这个目录中对于 192.168.1.50 这个 IP 来源你只许他观看,而不许他贴上数据,那么你要怎样设定呢?我们继续以上面的例子来进行说明好了,在 /home/test/public_html/cgi 这个目录中,你要限制让 192.168.100.0/24 这个网段不能『浏览』,至于张贴文章方面,则仅有 192.168.1.50 这个 IP 可以具有这样的的功能,那么你可以这样修改: [root@test
root]# vi /usr/local/apache2/conf/httpd.conf
嘿嘿!如此一来,就可以将我们的网页数据搞的更安全啦!! ^_^
# 额外再新增几行吧! <Directory "/home/test/public_html/cgi"> Options ExecCGI SetHandler cgi-script <Limit GET> order allow,deny deny from 192.168.100 allow from all </Limit> <Limit POST> order allow,deny allow from 192.168.1.50 deny from all </Limit> order allow,deny deny from 192.168.1.100 allow from all </Directory> 主机状态说明网页设定 既然已经安装好了 WWW 主机,除了提供服务之外,重要的是要如何维护啰!嘿嘿!那么是否一定要额外安装其他的套件才能知道目前的主机状态呢?当然不需要啦!我们可以透过 Apache 提供的特别功能来查询主机目前的状态!那就是 mod_status 这个模块啰!如何使用呢?由于 mod_status 是默认一定会安装的模块,所以根本不需要担心加载与否的问题,唯一要担心的,则是需要启动这个模块的相关设定而已!同样的,也是编辑 httpd.conf 这个档案即可,可以这样做: [root@test
root]# vi /usr/local/apache2/conf/httpd.conf
# 找到底下这几行,并且将他修改一下: <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 192.168.1.11 </Location> [root@test root]#
/usr/local/apache2/bin/apachectl
stop
在上面的设定中,必须要特别留意那个 Deny 与 Allow 的设定,说明的是,要察看这个讯息的,只有 192.168.1.11 这个 IP 来的要求才提供!否则一切则予以禁止。当然啦,主机的安全是需要维护与保密的,当然不让人家知道是比较好的呢!然后直接在网址上面输入: http://your.server.name/server-status 这样就可以看到你的主机的一些状态啰!有点像底下的样子: Apache Server Status for 192.168.1.2
Server Version: Apache/2.0.43 (Unix) PHP/4.2.3 Server Built: Dec 26 2002 01:59:03 ------------------------------------------------------------------------------ Current Time: Monday, 30-Dec-2002 01:31:28 CST
Scoreboard Key:
PID Key:
31027 in state: W , 31028
in state: _ , 31029 in state: _
------------------------------------------------------------------------------
Apache/2.0.43 Server at 192.168.1.2 Port 80 上面说明的,除了显示出主机目前的 IP 与 时间 之外,亦列出 Linux Server 上面,关于 Apache 的使用程序状态!虽然很简单且阳春,不过该有的还都是有了!蛮不错的ㄋㄟ〜有空的时候,可以多多的察看一下 Apache 的状态!不过,特别需要注意一下能够使用这个路径的,最好局限在少数人会较为安全喔! 关于权限的意义说明与设定 在网络的服务当中,最麻烦的地方可以说是『权限』的问题了!怎么说呢?刚刚上面提到了提到了 httpd.conf 当中有设定 User 与 Group 这几个咚咚,而这两个属性是针对 Process 来设定的,也就是说,当你启动了 apache 之后,就会有 httpd 这个服务的 Process 在你的 Linux 系统(内存当中)的背景中执行了,而且这个 httpd 属于刚刚我们设定的 nobody 使用者与 nobody 群组(注:刚好 User 与 Group 的名称都叫做 nobody 啦!^_^)!所以啰,当使用 httpd 这个 Process 来进行 Linux 数据的存取时,那么如何设定 Linux 底下最重要的『权限』问题呢?还记得我们在 Linux 主机之资源管理 里面提到的,所谓的 PID 就是 Process 的 ID,当我们触发一个事件时,Linux 就会给这个事件一个 ID 当作执行时候的标识符,例如当 test 这个人下达『 vi /etc/fstab 』的时候,主机就会给这个事件一个 ID ,此外,这个 PID 还会记录其他的权限喔!例如,因为启动 vi 这个事件的使用者是 test ,所以这个 PID 当然就属于 test 啰!所以当 vi 执行期间所开启的所有档案,都需要针对 test 来察看他是否可以具有读、写、执行的权限呢! 这样说您应该有点了解了吧?是的,你在 Client 是否能浏览 Server 所提供的数据,是跟 Server 内的『权限』设定有关吶!举个例子来说,还记得刚刚我们有将 /home/test/public_html 这个目录设定成可浏览吧!而这个目录属于谁呢?没有错,是属于 test 这个人的!那么我们的 apache 所启动的 process 属于谁呢?以上面的例子为例,那就是 nobody 这个人的!那么万一 /home/test 的属性是『drwx------』,请问你,Client 端的用户能否浏览这个目录呢?呵呵!由于 Apache 的 nobody 在 /home/test 的权限当中要寻找的是 others 的属性,嗄!怎么是『 --- 』,自然就是『不行浏览!』无论你的 /home/test/public_html 权限开放的有多大!这样可以了解吗?也就是说,万一上层目录就不许进入了,那么底下的目录当然也就无法被登入啰! 一般而言,使用者容易在个人首页发现『Permission deny』的字眼,最常见的问题就是『Linux 权限设定错误』了!只要针对你的权限去修订,那么差不多就可以解决绝大部分的 Apache 权限问题喔!另外,需要特别留意的是,使用者能否进入一个目录,主要是与可执行与否的权限(也就是 x )有关,因此,如果您要开放静态网页的浏览,那么至少应该要将 /home/test 设定成 drwxr-xr-x ,亦即是 755 才行,不过,如果您要执行的是 PHP 之类的网页程序语言,呵呵!那么您只要设定 drwx--x--x 就可以啰!也就是 711 啦!因为毕竟 Client 只要能够执行 PHP 程序即可,因为结果的显示是在 Client 端吶!与是否能在 Server 端浏览是没有关系的ㄋㄟ〜 设定认证网页 是不是有过进入某个网站之后,按下某些连结,竟然出现一个对话框框,告诉你要登入该目录,需要输入账号与密码才能登入?呵呵!那就是所谓的『认证网页』啰!这种认证的模式最起码可以达到最小的保护作用,使你的数据比较保险啦!咦!那么使用 Limit 不就好了?但是 Limit 的规定较为严格,若是改天你去外头的网咖店,然后想要联机进入你的主机作一些事情,如果你设定除了内部 IP 之外,外部就无法以 Web 接口连进来的话,那么不就糗了吗?呵呵!这个时候认证网页可就是你的好帮手啰!另外,目前很多学校老师也会将自己的讲义放在网站上,然后以认证网页的方式提供自己的学生下载使用!所以说,这个也是蛮不错的一个变通方式哩! 那么认证网页怎么搞呀!?说来还真的是很容易ㄋㄟ! 好了,那么我们来作个例子吧!假设,我要在 http://localhost/protect/ 这个目录下作一个认证数据,在这个目录当中仅有 test.html 这个档案,此外,我要让 test 这个 ID ,密码为 testing 及 qqq 这个账号,密码为 qqqpass 做为登入的账号,那么我该如何设定我的数据呢?一样的,一步一步来进行吧! 第一步骤当然是制作保护目录啰!既然这个目录在 http://localhost/protect/ 底下,那么有哪些方式可以达成呢? [root@test
root]# mkdir -p /usr/local/apache2/htdocs/protect
上面我加一个 -p 的参数可以帮我递归的一直建立好这个目录喔!然后立刻就又做好一个档案ㄋㄟ〜
[root@test root]# cd /usr/local/apache2/htdocs/protect [root@test root]# echo "This is a protect page" > test.html 制作密码文件只要使用 htpasswd 这个命令就可以啦!他的语法是这样的: htpasswd
没错!这样就 OK 啦!你已经有两个账号( test 与 qqq )在 /usr/local/apache2/apache.passwd
这个档案中啰!不过,这里请注意,由于你的密码文件可以存放在任何地方,但是毕竟这里面有你的重要信息,所以,请特别留意的是,『不要将这个档案放置在浏览器可以浏览到的目录!』举个例子来说,放在
/usr/local/apache2/htdocs 就不是一个明智的选择!因为很可能会被别人浏览到这个档案而失去『认证密码』了,那么岂不是很危险!?所以,尽量给他放在浏览器无法浏览到的地方,例如我们提到的
/usr/local/apache2 这个目录就是一个还不错的目录!
语法: [root@test root]# htpasswd [-c] password_file_name User_name 说明: -c :当后面的 password_file_name 这个密码文件不存在时,那么就建立该档案 范例一:
范例二:
[root@test apache2]#
more
apache.passwd
当然接下来我们要针对那个受保护的目录进行设定啦!就是要又开始搞配置文件啰!怎么搞?!就是要加入信息吶!加入哪些信息呢?这当中当然就包含了『密码文件的完整目录与文件名、认证的类型、提示的字符、与允许登入的使用者』如果你看到认证网页的登入窗口时,通常就会看到两个输入 ID 与密码的格子,所以自然要设定密码文件的档案,而你也会看到该窗口上面有一些提示字符告诉你这个网页是干嘛用的!另外,像我们刚刚制作了两个账号,那万一你只允许一个账号登入,另一个账号不许登入,那要如何搞呢?可以这样搞喔: [root@test
root]# vi /usr/local/apache2/conf/httpd.conf
真的很简单啦!就只要上面的四行设定内容就够了! AuthName 就是在出现要你输入ID与密码的那个提示字符啦!至于谁可以登入呢?以上面的说明为例,当设定为
valid-user 时,表示任何在认证档案中出现的使用者都接受登入,至于如果是 require
user test 那一行,则表示可以登入者仅有 test ,如果有两个以上呢?可以写成『
require user test qqq 』的样式喔!
在这个档案的设定中,请特别留意设定的地方,不要设定错误地方, 一般而言,新的咚咚可以加在最后面一行开始,比较不会搞错地方! 加入底下这几行: <Directory "/usr/local/apache2/htdocs/protect"> AuthName "Protected Directory" #这个是显示在窗口上面的提示字符 AuthType Basic #这个则是认证的类型!就选Basic即可,Apache的默认功能 AuthUserFile /usr/local/apache2/apache.passwd #密码文件放置的地方啦!完整的目录与文件名 require valid-user #允许的使用者,valid-user为任何一个在认证档案当中的账号皆可 #require user test #若将 # 移除,则表示只有 test 才是可以登入的账号! </Directory> 这个不用再讲了吧?!: [root@test
root]# /usr/local/apache2/bin/apachectl stop
测试怎么测试?直接连上网页吶!在网址列输入:『http://your.host.name.or.IP/protect/test.html』然后应该就会出现:
[root@test root]# /usr/local/apache2/bin/apachectl start 看到那个 Protected Directory 的字眼了吧!那就是 AuthName 啰!然后用户名称与密码即是我们刚刚建立的密码文件之内容啦!认证网页设定成功!恭喜喔! .htaccess 档案与 AllowOverride 设定的用途: 从头到现在有的学的吧? ^_^ 粉累喔!呵呵!尤其最累的是,如果万一你真的设定好了一个 Apache ,而且也真的很高兴的对外开放了!那么你是否会注意到一件事情,那就是,万一你有 20 的使用者,每个使用者都要求由他设定自己风格的家目录,亦即他们想要自己设定自己的认证网页,想要自行管理自己的 Apache 底下的其他功能,怎么办?由于有关 Apache 的设定就一定需要: 如此一来的话,难道: 这不是很累吗?呵呵!这个时候, .htaccess 的档案就『英雄有用武之地』咯!这个档案的最大功能就是『可以取代 httpd.conf 里面,对于这个 .htacces 所在目录的设定内容!』也就是说,如此一来,每个目录下的 .htaccess 可以让该目录拥有相关的权限、风格等等的设定!如此一来, root 也就不会这么累了,并且,修改完这个档案之后,也不需要重新启动ㄋㄟ!棒吧! ^_^,不过,到底 .htaccess 这个档案可以工作的内容有哪些呢?呵呵!这个时候,可就需要 AllowOverride 在 httpd.conf 里面的设定来规定啰!所谓的 AllowOverride 说的是『允许取代某些设定内容』的意思,而这个 AllowOverride 可以取代的数据有: 如果你想让 .htaccess 这个档案有最大的取代内容时,可以选择 AllowOverride All,若仅想让这个档案具有取代网页认证的功能,那么就可以使用 AllowOverride AuthConfig 即可! 举个例子来说,刚刚我们设定 /usr/local/apache2/htdocs/protect 为保护目录,需要做的事情最重要的为设定 httpd.conf 这个档案,并且需要设定有的没的一大堆,好了,现在假如我想让所有的 user 都能自行在自己的家目录内进行?怎么利用 .htaccess 这个风格档案呢?这其中当然涉及了(1)root 对于 httpd.conf 的设定以及(2)一般身份用户对于自己家目录下的设定!好了,现在我们分别以两种身份来设定自己家目录下的咚咚,以 test 这个使用者为例好了,来看看怎么使用认证网页在一般用户家目录下! 关于
root 的设定项目:
0. 先确认底下这些信息可以在您的
httpd.conf 里面发现:
1. 建立让每个用户家目录下都能自行设定
AuthConfig 的规则!
关于 一般身份使用者 (test 为例) 的设定项目: 0. 以一般身份使用者登入,或者使用
su 转换 test 的身份
1. 建立保护目录与网页内容
2. 建立 test
自己的密码文件
3. 建立 .htaccess
档案的内容!
赶快去测试看看吧!这样对于 Root 来说,是比较轻松一点,对于使用者来说,可以使用的规范也比较多样化!但是,衍生出来的安全问题,可能就需要大家共同的维护了!当然啦,你也可以使用 AllowOverride 来设定更多 .htaccess 可以规范的项目呢! 防火墙 一句老话啦!就是『如果你的 Server 不能动,但是确定设定都没有问题,那么除了持续查询 log file 之外,最大的可能就是防火墙挡住了!』这句话应该没有什么太大的疑问才对〜所以呢,万一你的 Apache 不能动,那么请看看你的防火墙设定规则吧!因为防火墙我们已经提过了,请参考『简易防火墙设定』一文,这里不再赘述! 大标题的图示登录档分析与其重要性
而至于其他相关的档案,嘿嘿!那个 /var/log/httpd/access_log 档案也需要注意一下,因为他记录了所有来自 Client 端的 IP 以及其他相关的读取数据之讯息!这个档案对于未来分析你的 Apache ( WWW )被读取网页的所有纪录喔!相当的重要的啦! syslog 与 logrotate: 首先针对 Apache 的配置文件当中,要注意的就是那个 syslog 与 logrotate 啰!详细的信息可以参考一下『鸟哥的 Linux 私房菜 -- 基础学习篇』之认识登录档。好了,那么你的 syslog 应该要怎么设定呢?因为我们毕竟是使用 tarball 安装的,所以根本就没有所谓的 syslog 的设定,不过,这个不需要担心,这是因为 Apache 里面本来就有 syslog 的设定存在了!所以,这点我们不需要重新来设定啦!只要记得你的登录文件目录是在哪里就可以啦!目前我的登录档与 pid file 是在: 然后,我的 logrotate 的纪录目录在 /etc/logrotate.d 里面,因此,我就在里面新增一个档案,称做是 apache,你可以这样做: [root@test
root]# cd /etc/logrotate.d
[root@test logrotate.d]# vi apache # 新加入这几行 /var/log/httpd/access_log /var/log/httpd/error_log { rotate 4 missingok sharedscripts postrotate /bin/kill -HUP `cat /var/log/httpd/httpd.pid 2>/dev/null` 2> /dev/null || true endscript compress } 如果不知道上面的每个数据代表的意义,还是请前往 认识登录档 一文喔!然后赶快试看看是否可以执行 logrotate 呢? logrotate -f /etc/logrotagte.conf呵呵!这样就对啦!那么为什么要加入这个 logrotate 呢?这是因为,未来,如果你的 WWW 服务器越来越大时,那么应该 access_log 档案会『很可怕的大!』例如目前本小站的流量每周可以造成我的登录档长大到 400MB 以上〜如果不将他 rotate 的话,哈哈!不出几个星期,我的硬盘就爆了〜所以, logrotate 是很重要的喔! Web Analyser 如果我想要知道最近有谁曾经来我的网页上面逛过,以及该使用者使用的是什么样的操作系统呢?该怎么看?!很简单吶!直接跑到 /var/log/httpd/access_log 这个档案里头去瞧一瞧就知道啦!里面的纪录有点像这样: 192.168.1.11
- - [27/Dec/2002:00:20:24 +0800] "GET /manual/ HTTP/1.1" 200 7340
来源 IP 日期与时间 动作与网页 动作代码 立刻可以知道在何时,那个 IP 对于本机的动作是什么,以及是否有成功?很清楚对吧!所以我们可以藉由这个档案知道我们的主机被利用的状态!但是,如果像我的主机一样,一下子就有 400 多 MB 的档案,您要怎么分析?看都看不完ㄋㄟ〜呵呵这个时候,就需要使用 Shell scripts 的帮助啦!你可以自行写一个适合您自己的分析工作,来进行解析的行为!不过,由于目前网络上已经有很多的好用的 Web 分析的工具啦!所以呢,我们只要进行他的安装即可喔!很方便吧!底下我们介绍几个好用的 Web 分析工具来给大家瞧一瞧! Webalizer 网页分析工具 这个是很不错,也且功能也都很完备的一个网页分析软件!不论是在安装与设定上面,都是粉简单的ㄋㄟ〜所以才说他是极适合新手来安装的一个软件吶!此外,由于他是 GPL 授权码的软件,所以呢,嘿嘿!很快乐的下载吧!请赶快到官方网站下载一下啰! 整个安装流程上面很简单,最重要的地方只有在设定的一些小步骤需要留意而已,好了,废话不多说,我们直接来安装与测试一下,就知道他是怎么回事啦!不过,在安装与设定之前,你必须要先知道你系统里面的 log file 在哪里,以及未来要安装在何处?!我的规划是这样的: 好了,开始来下载、安装与设定吧!你可以依照底下的网站来下载,不过不保证该档案会继续存在〜你也可以到『http://linux.vbird.org/download/index.php#webalizer』来下载文件! 0. 确认一些必须要的绘图相关
RPM 已经安装!
# 因为这个套件需要 gd, zlib 与 png 才行,所以,你需要安装这三个咚咚! # 在 Mandrake 9.0 当中,你所需要的套件在光盘中的名称为: libpng3-devel-1.2.4-3mdk libpng3-1.2.4-3mdk zlib1-1.1.4-3mdk zlib1-devel-1.1.4-3mdk libgd1-1.8.4-6mdk libgd1-devel-1.8.4-6mdk # 至于在 Red Hat 7.2 当中,你要的套件名称为: zlib-1.1.3-25.7 zlib-devel-1.1.3-25.7 libpng-devel-1.0.14-0.7x.3 libpng-1.0.14-0.7x.3 gd-1.8.4-4 gd-devel-1.8.4-4 # 请一定要安装喔!不然肯定无法安装这套软件的! 1. 下载软件:可以直接到官方网站,或者到我们网站上下载:
2. 安装软件,同样的,到
/usr/local/src 下面解压缩喔!
3. 配置文件编修:
4. 测试 Run
的结果
[root@test etc]#
vi
/etc/crontab
接下来要测试啦,直接给他 http://your.host.name/webalizer 这个目录的最后面那个 webalizer 跟上面你设定的 Output 的目录有关,请依照你的主机刚刚的设定去规定他吧!结果呢?呵呵!你可以到我们的流量统计单去观察一下就知道啦!画面也是很不错的啰! 如此一来,你就可以很轻松的观察你的主机的任何信息啰!包括来自于其他地方的 IP ,网页浏览数等等的!很棒吧! awstats 网页分析利器: 这套软件相当的不错!很棒,他提供了 CGI 程序执行与指令列模式执行,不过,我个人不太喜欢使用 CGI 的模式,所以我是使用指令列模式来进行这个程序的图形制作的!如果你是由官方网站下载新的版本来安装的话,那么底下的流程可能不是很适合你,目前我已经将一些需要修正的项目变更过,并且摆在我的网页上面,如果有需要的话,可以到『http://linux.vbird.org/download/index.php#awsats』来下载喔! 1. 下载软件:可以直接到官方网站,或者到我们网站上下载:
http://linux.vbird.org/download/index.php#awsats # 使用浏览器将网站上面提供的数据拿回去!当然,你也可以直接到官方网站上面去下载最新的版本! # 假设你已经将数据捉回去,并且放置在 /root 这个目录当中了,文件名为: awstats.tar.gz 2. 安装软件:
3. 配置文件编修:
4. 修改一下
httpd.conf 的设定内容:
5. 测试 Run
的结果
6. 设定每日执行!
这样也就修改妥当啰!详细的图形示意图可以参考: http://awstats.sourceforge.net/cgi-bin/awstats.pl 相当的不赖吧!赶快试看看! 大标题的图示虚拟主机架设:
咦!虚拟主机是什么东西吶!怎么说的好像很神奇的样子呢?他有什么功能?为什么大家都想要玩一下虚拟主机吶?呵呵!所谓的虚拟主机,基本上,就是『让你的一部主机上面,有好多个"主网页"存在,也就是说,硬件实际上只有一部主机,但是由网站网址上来看,则似乎有多部主机存在的样子!』,举个例子来说好了,你可以由我的网页上面知道一件事情,那就是我的 WWW 主机其实只有一部,那就是 pc510.ev.ncku.edu.tw 。不过,我这部主机其实有很多个 Domain name 存在,例如 linux.vbird.idv.tw 与 phorum.vbird.idv.tw 这两个网址。不过,上面这两个网址其实也同时指到 pc510.ev.ncku.edu.tw 这部机器上面,亦即是 pc510.ev.ncku.edu.tw, linux.vbird.idv.tw, phorum.vbird.idv.tw 这三个不同的主机名,其实都是指向同一部计算机主机!你可以在你的 Linux 机器上面以 nslookup 的指令搜寻一下这三个主机名,你就晓得为什么了!但是,当你在浏览器上面输入: 怪了!怎么会显示不同的网页内容呢?好像是存在三部主机对吧!呵呵!这就是所谓的虚拟主机啦!让你的一部机器上面,搞的好像好多部同的主机一样的一个简易的功能啦! ^_^ 那么要架设虚拟主机需要什么咚咚呢?呵呵!以刚刚我的网站的结果为例,我要架设三个主网页,也就是必须要有多个 domain name 啰!对啦!这就是虚拟主机的大前提啦!『你必须要有多个主机名,亦即是需要多个 domain name, FQDN 』,例如上面我就具有三个 domain name 啰!在需要多个 domain name 的情况下,你可以做的方式就是: 没错,就是这几个方法,因此,请确定你的主机名已经搞定了!不然的话,怎么架设虚拟主机呢?您说是吧! ^_^ 好了!又要来搞设定啦!又是 httpd.conf 这个档案啦!反正几乎只要跟 Apache 有关的,就是动这个档案就对啦!这里先来说一下我的大前提设定啰! 至于这个设定嘛!真的是很简单耶!只要几行就搞定了,设定完成之后还会让你偷笑ㄋㄟ〜呵呵!看看实例吧! 大标题的图示客户端的文字接口 Web 功能: 什么!?客户端竟然也有文字接口的浏览器?!哈哈!当然是有啦!不然这里干嘛要介绍?!那就是鼎鼎大名的 lynx 以及 wget 啰!请注意的是,这两个套件并不一定会在安装的时候就已经安装在你的系统中,所以请先使用 RPM 查询一下他是否存在于你的系统当中,然后才能执行喔!他的用途是: 这两个指令之前已经介绍过了!请自行前往观察一下啰!加油啦! 大标题的图示增强 PHP 程序代码执行速度的模块:
MM Cache 增强速度模块: 我们上面的介绍都是在于安装与架设 LAMP 服务器(Linux + Apache + MySQL + PHP ),不过,如果您曾经浏览过 PHP 的网页时,或许会发现:『咦!怎么 PHP 的速度慢慢的.....』,这是怎么一回事啊!?PHP 不是号称速度上面的反应是很快速的吗?怎么会慢慢的呢? 虽然 PHP 的程序已经很快了,但是因为计算机仅认识 0 与 1 的 binary file 来执行, 而由于 PHP 程序不需要编译即可透过 PHP 核心与其相关函式库来执行, 不过,如此一来还是多了一道手续,导致执行效能还是不比传统的经过编译的程序语言来的快(例如C程序语言之类的!)。 那怎么办?有办法加快 PHP 程序的速度吗?嗯!让我们先换个角度想,如果我们可以将 PHP 程序预先转换成为可直接执行的 binary file ,那么不就可以直接读取,进而加快速度吗? 没错!是这样〜这东西称为预编器〜 其中, MM Cache 就是一个很不错的 PHP 预编器。 MM Cache 可以将您的 PHP 程序与 PHP 核心及相关函式库预先编译后暂存下来,以提供未来使用时,可以直接执行, 加上他可以优化您的 PHP 程序,因此,可以让您的 PHP 网页速度增快不少喔! MM Cache 啰!他的官方网站在:http://turck-mmcache.sourceforge.net/index_old.html。目前 MM Cache 已经出到了2.3.9 ( 2003年04月10日 释出),不过,他仅在 PHP 4.1 以上版本以及 Apache 1.3 与 2.xx 版本测试过,如果你的 Apache 与 PHP 不是这些版本,那就抱歉啦!不一定可以使用的!不过,呵呵!我们上面提供的 Tarball 的安装方法本来就是这样的版本,所以您可以轻易的安装好 MM Cache 喔!废话不多说,赶紧来安装吧! 你可以在官方网站下载最新的版本(http://turck-mmcache.sourceforge.net/index_old.html),也可以在我们网站下载鸟哥试过的版本: http://linux.vbird.org/download/index.php#www_mmcache 安装 MM Cache 真的是很简单喔!赶紧来安装吧! [root@test
root]# cd /usr/local/src
[root@test src]# tar -zxvf /完整路径/turck-mmcache-2.3.9.tar.gz # 会产生一个名为 turck-mmcache-2.3.9 的目录 [root@test src]# cd turck-mmcache-2.3.9 [root@test turck-mmcache-2.3.9]# phpize # 这个指令是 PHP 套件所提供的!可以建置好你的 mmcache 原始码 [root@test turck-mmcache-2.3.9]# ./configure --enable-mmcache=shared [root@test turck-mmcache-2.3.9]# make && make install # 这个动作会编译一个名为 mmcache.so 的动态函式库模块, # 并且会主动的将他安装在 /usr/lib/php4 这个目录当中! # 这样就安装完毕了!很简单吧! 在 MM Cache 的设定方面需要更动两个地方,第一个是动态函式库加载的设定,第二个则是 PHP 的设定! 1. 设定主动加载动态函式库模块:
这样一个简单的小步骤,嘿嘿!您的 PHP 程序代码的反应性〜啊〜增快很多很多喔!
^_^[root@test root]# vi /etc/ld.so.conf # 在这个档案内加入底下这一行: /usr/lib/php4 [root@test root]# ldconfig # 上面这两个步骤比较有趣一点,在 ldconfig 这个指令的功能是: # 『加载动态函式库到内存当中做为快取』之用,至于加载的动态函式库则是 # 根据 /etc/ld.so.conf 这个档案的设定为准!这的动作只要第一次设定时进行 # 即可,未来在开机完成之后,系统会主动的加载动态函式库的! # 另外请注意, ld.so.conf 里面只要写『目录』即可! 2. 修改 php.ini # 请注意,由于每个人的 php.ini 都不相同,例如使用 RPM 安装者,应该是 # /etc/php.ini ,但是我上面的安装设定却是 /usr/local/php4/php.ini # 请依照您的主机来设定喔! [root@test root]# vi /完整路径/php.ini # 在这个档案的最后一行加入底下这几行: ;;;;;;;;;;;; ; MM Cache ; ;;;;;;;;;;;; extension="mmcache.so" mmcache.shm_size="16" mmcache.cache_dir="/tmp/mmcache" mmcache.enable="1" mmcache.optimizer="1" mmcache.check_mtime="1" mmcache.debug="0" mmcache.filter="" ; end of mmcache 3. 建立快取目录: [root@test root]# mkdir /tmp/mmcache [root@test root]# chmod 0777 /tmp/mmcache 4.重新启动 Apache [root@test root]# /etc/rc.d/init.d/httpd restart # 或 [root@test root]# /usr/local/apache2/bin/apachectl restart Apache 的效能测试 事实上,安装 Apache 的时候,Apache 就已经提供了一个效能测试 ( benchmark ) 的软件了!那就是 ab 这个程序!怎么用呢?就直接用啊! [root@test
root]# /usr/sbin/ab [-dSk] [-c number] [-n
number] 网页.php
参数说明: -d :不要显示 saved table 的百分比资料;通常不要那个数据,所以会加 -d -k :还记得上面的 KeepAlive 吧!加入 -k 才会以这样的功能测试; -S :不显示长讯息,仅显示类似 min/avg/max 的简短易懂讯息! -c :同时有多少个『同时联机』的设定(可想成同时联机的 IP ) -n :同一个联机建立几个要求通道!(可想成同一个 IP 要求的几条联机) 更多的讯息请自行 man ab 喔! 范例: [root@test root]# /usr/sbin/ab -dSk -c100 -n100 \ > http://linux.vbird.org/home.php This is ApacheBench, Version 1.3d <$Revision: 1.67 $> apache-1.3 Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/ Benchmarking
linux.vbird.org (be patient).....done
Document Path:
/home.php
Concurrency
Level: 100
Connnection
Times (ms)
这样就能够了解您的 Apache 效能了!因为我是在本机上面测试的,所以速度上面当然是很快啰!建议可以到远程同样使用 ab 来测试一下你的 Apache 效能,尤其是加上了 mm cache 之后,看看能不能增快速度呢? ( 注:这个 ab 程序对于读取 MySQL 之类的网页似乎没有办法成功的完成测试的样子,所以请不要使用 phpBB2 的网页来测试喔!尽量直接以 PHP 的网页来测试! ) 嘿嘿! 大标题的图示砍站软件与 Nimda 病毒的抵挡 scripts: 几个比较知名的网站管理员大概都有这样的困扰,那就是网站常被砍站软件所强力下载,结果造成主机的 CPU loading 过重,最后竟然会导致死掉〜唉!真是的〜人怕出名猪怕肥吶!先来解释一下什么是砍站吧!所谓的『砍站』,就是以类似多点联机下载的持续性讯息传递软件进行网站数据的下载,而且,一启用该软件,该软件就将『整个网站』的内容都给他 download 下来,很厉害吧!没错!是很厉害,但是却也害死人了〜怎么说呢?因为这种软件常常会为了加快 download 的速度,所以采用多点联机的方式,也就是会持续不断的向 Server 发出要求封包,而由于这些封包并不见得能够成功的让 Server 把数据传导给 Client 端,常常会无法投递就是啦!这样的结果就是.....造成 Server 要一直不断的响应,又无法正确的响应出去,此外,要求太过频繁,结果主机应接不暇,最后....就当机了...真的是林老师ㄌㄟ〜我们这个小站的主机古早以前,就是因为这样的原因,导致服务常常断断续续的,并且,由于 CPU loading 太高,结果让正常联机进来看数据的网友没有足够的资源,因此网页开启的速度就变的很慢〜唉〜这些砍站的人,也太不道德啦! 大标题的图示安装 phpBB2 讨论板: 上面这样一路走来,哈哈!终于我们的 LAMP 服务器就已经大致上搞定啦!那么接下来你可以利用这个 WWW 主机帮你做什么事呢?嗄!能作的事情可多啰!目前很多支持 PHP 的架站软件已经被很完整的开发了,例如 PHPNuke 以及鸟哥很喜欢的 phpBB 呢!这些架站软件都是建构在 LAMP 上面的,而既然我们的 LAMP 已经搞定了,那么其他的架站软件的安装就真的是相当的快速呢!底下介绍 phpBB 的安装!你可以到底下的连结去看看喔: 大标题的图示问题讨论:
AddDefaultCharset Big5 LanguagePriority tw en da nl et fr de el it ja ko no pl pt pt-br ltz ca es sv 答:
答:
<?
改成
phpinfo( ); ?> <?php
就可以啦!
phpinfo( ); ?>
ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111) 答:
[root@test
root]# /etc/rc.d/init.d/httpd restart
虽然对于我的 Apache 不会产生什么不良的影响,但是总觉得不太舒服,要如何克服呢?
Stopping httpd: [ OK ] Starting httpd: perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = "en", LC_ALL = "en", LANG = "en" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). 答:
[root@test
root]# vi /etc/sysconfig/i18n
这样应该就不会出现问题了吧?!LANG="en_US" LANGUAGE="en_US" LC_ALL="en_US"; export LC_ALL SUPPORTED="zh_TW.Big5:zh_TW:zh:en_US.UTF-8:en_US:en" SYSFONT="latarcyrheb-sun16" 大标题的图示课后练习
前往参考用解答 2003年01月14日:第一次完成 2003年01月18日:新增问题讨论:关于中文的说明 2003年01月21日:新增问题讨论:关于 PHP 无法使用的问题说明 2003年04月28日:加入砍站软件的程序说明 2003年04月29日:加入 PHP 原始码程序优化模块 MM Cache 说明。 2003年05月07日:加入 ab 这个效能测试的说明! 2003年05月30日:使用 Tarball 安装时常常发生一些困扰,加入 User/Group 的设定说明! 2003年09月10日:将原本在 2002/12 安装 Tarball 的套件更新为目前 2003/09 最新的版本来安装喔! 2003年10月02日:加入一些问题的克服之道喔! 2004年03月25日:修订 MySQL 安装的流程!第四步骤加入权限的修订! 2004年09月03日:修改了 MMCache 的主网页。 |
|
本网页主要以Firefox配合解析度 1024x768 作为设计依据 鸟哥自由软件整合应用研究室