WWW 服务器
目前在Linux系统中的WWW服务器主要就是通过Apache 这个服务器软件来达成的,而为了动态网站,于是 LAMP (Linux + Apache+ MySQL + PHP) 就这么产生了)
因特网 (TCP/IP) 会这么热门,主要是80年代的email以及90年代之后的WWW服务所造成的,尤其是WWW这个玩意,与其他的服务器类似,你要连结上WWW网站时,该网站
必须要提供一些数据,而你的客户端则必须要使用可以解析这些数据的软件来处理,那就是浏览器。
WWW 服务器不但需要一个可让客户端浏览的平台,还需要提供客户端一些数据才行,服务器所提供的最主要数据就是超文件卷标语言 (Hyper Text MarkupLanguage, HTML)、
多媒体档案 (图片、影像、声音、文字等,都属于多媒体或称为超媒体)。HTML 只是一些纯文本数据,透过所谓的卷标 (<tag>标签) 来规范所要显示的数据格式; 在客户端,
透过浏览器的对 HTML 以及多媒体的解析,最后呈现在用户的屏幕上。
服务器端的软件:Apache在 1996 年以后便成为 WWW 服务器上市占率最高的软件了
浏览器 (browser) 大战与支持的标准,客户端没有浏览器的话那么他们当然无法浏览WWW服务器所提供的数据,微软将 IE 浏览器内建在 Windows 操作系统内,
后来网景公司在 1998 年左右将浏览器的原始码部分开放成为自由软件,采用 Mozilla 通用授权 (MPL), 由于 IE 是整合在 Windows 操作系统核心内, 加上改版的幅度太慢
甚至 IE 使用的 HTML 标准语法解析行为都是微软自定义的标准, 并不全然符合因特网上的标准规范(W3C, http://www.w3.org/), 导致服务器端所提供的数据并无法在所有的浏览器
上都显示出相同的样式,而且客户端也容易受到网络攻击,而firefox的发展标榜小而美,因此程序相当的小,所以执行效能上面非常的快速,此外,对于超文件的解析上面, firefox 主要
依据 w3c 所制订的标准来发展的,所以任何以 w3c 的标准开发的网站,在 firefox 上面就能够得到设计者所希望的样式!目前 firefox 已经针对市面上最常见到的Windows/Linux/Unix
等操作系统来进行支持,大家可以多多使用,除了上面两种浏览器,Google 自己也推出一个浏览器,称为 chrome 浏览器,由上面的介绍我们可以稍微归纳一下:
www是HTTP这个协议而来的,分为服务器端和客户端,Apache是一个服务器端的软件,主要依据NCSA的HTTPd服务器发展而来的,为自由软件,Mozilla 是一个自由软件的开
发计划,其中firefox浏览器是相当成功的作品,在撰写自己的网页数据时,尽量使用W3C所发布的标准,这样在所有的浏览器上才能显示你想要的样子
CentOS 预设的 /var/www/html是存放整个网站的网页数据的目录,在现今浏览器功能实在很多,他不只是可以连上WWW,还可以连上类似FTP之类的网络协议,所以你得要在
网址列输入正确的网址,这个网址包括这样:<协定>://<主机地址或主机名>[:port]/<目录资源>
网址列的意义 协定:浏览器比较常支持的协议有http,https,ftp,telnet等等,还有类似news,gopher等,这个协议在告知浏览器『请你利用此一协议连接到服务器端』的意
思,例如http://ftp.ksu.edu.tw 这表示浏览器要连结到 昆山科大的 http (亦即 port 80) 的意思,如果是 ftp://ftp.ksu.edu.tw 则代表连结到 ftp (port 21),因为使用的协议不同,所以
当然响应的数据也不相同,不过,万一对方服务器的端口在非正规的端口号,例如http启动在port81,那此时就要这样写: http://hostname:81/ ,主机地址或主机名:就是服务器
在因特网所在的IP位置,如果是主机名的话,当然得要透过名称解析器,一般来说,虽然使用IP就能够架设WWW网站,不过建议你还是申请一个好记合法的主机名比较好
目录资源:www数据放置在我主机的/var/www/html当中,所以说:http://linux.vbird.org/linux_basic/index.php -->/var/www/html/linux_basic/index.php,通常www服务器会主动
的以该目录下的index.php【首页】来显示的,所以啦,我们的服务器会由于浏览器传来的要求协议不同而给予不一样的响应数据
WWW server/client 间数据传输的方式
如果浏览器是以 http://hostname 的型态来向服务器要数据时,那么浏览器与服务器是如何传递数据的呢?基本上有着几种方法:
GET 就是浏览器直接向www服务器要求网址列上面的资源,使用GET的方式可以直接在网址列输入变量,例如t = 96
POST 也是客户端想服务器端提出的要求,只是这个要求里面含有比较多的数据就是了,数据会被浏览器包起来传送至www服务器了,POST与GET不相同,GET可以在网址列
取得客户端所需要的变量,不过POST就不是使用网址列的功能了
HEAD 服务器端响应给 Client 端的一些数据文件头而已;
OPTIONS 服务器端响应给 Client 端的一些允许的功能与方法;
DELETE 删除某些资源的举动。
WWW 服务器的类型: 系统、平台、数据库与程序 (LAMP):目前市场占有率较高的www服务器软件应该是Apache与llS这两个玩意,Apache是自由软件,可以在任何操作系统
上面安装的,至于llS则是Windows 家族开发出来的,仅能在Windows操作系统上面安装与执行,由于操作系统平台不一样,所以安装的软件当然就不相同
仅提供用户浏览的单向静态网页:这种类型的网站大多是提供『单向静态』的网页,或许有提供一些动画图示,但基本上仅止于此,因为单纯是由服务器单向提供数据给客户端
,Server不需要与Client端有互动,所以你可以到该网站上浏览,但无法进行数据的上传,目前主要的免费虚拟主机大多是这种类型。所以,你只要依照 HTML 的语法写好你的
网页,并且上传到该网站空间上,那么你的数据就可以让大家浏览了
提供用户互动接口的动态网站
这种类型的网站可以让服务器与使用者互动,常见的例如讨论区论坛与留言版,他是藉由网页程序语言来达成与使用者互动的行为,常见的例如PHP网页程序语言,配合MySQL
数据库系统进行数据的读写
另外一种交互式的动态网页主要是在客户端达成的,例如我们可以利用java scripts语法,将执行的代码传送到客户端,客户端的浏览器如果有提供java script的功能,那么该程序
可以在客户端的计算机上面运作了,由于程序是在客户端计算机上才执行,因此如果服务器端所制作的程序是恶意的,那么客户端的计算机就可能会遭到破坏,这也是为啥很多
浏览器已经将一些危险的java script关闭的原因
另外一种可在客户端执行的就是 flash 动画格式,在这种动画格式内还可以进行程序设计, 因此客户端只要拥有可以执行 flash 动画的软件,那就可以利用这个软件来达到交互
式的对谈。 这些都算是动态网站所提供的功能。
我们也知道要做成这样的动态网站你必需要有:1.支持的操作系统:让所需要的软件都能够安装执行,2.可运作www服务器:例如Apache与llS等www服务器平台软件;
3. 网页程序语言:包括perl,PHP,JSP, CGI, ASP等等都是,4. 数据存储之数据库系统:包括MySQL,MSSQL,PostgreSQL,以及甲骨文Oracle等等
LAMP 平台的说明:一个是 Linux 操作系统上面,搭配 Apache + MySQL + PHP 等而达成,这个系统被称为 LAMP,在 LAMP 里面除了 Linux 之外,其他三个小东西先来谈谈
1. Apache (http://www.apache.org) 2. MySQL (http://www.mysql.org/) 3. PHP (http://www.php.net/) PHP是一种程序语言,这种程序语言可以直接在网页当中编写,不需要经过编
译即可进行程序的执行,由于具有:自由软件、跨平台、容易学习及执行效能高等优点, 目前是很热门的一个设计网页的咚咚。
https: 加密的网页数据 (SSL) 及第三方公正单位:HTTP这个传输协议当中,你需要知道的是:这个传输协议传输数据是以明码传送的,所以你的任何数据封包只要被监听窃取
的话,那么该数据就等于是别人的,那万一在网上输入了信用卡的卡号与相关的数据就能够进行交易,而你的数据在Internet上面跑的是明码,那信用卡不就随时可能会被盗用啊
这个时候就有需要用到 https://hostname 这种联机的方式啦!这种方式是透过 SSL 加密的机制,Secure Socket Layer (SSL)就是利用公私钥非对称的key来组成密钥,然后透过
公钥加密后传输,传输到目标主机后要以私钥解密,如此一来数据在 Internet上面跑就以加密方式,想当然尔,这些数据就比较安全,SSL就是在www传输上面加密方式之一
当浏览器端与 WWW 服务器端同时支持 SSL 的传输协议时,在联机阶段浏览器与服务器就会产生那把重要的密钥! 产生密钥后就能够利用浏览器来传送与接收加密过的重要数
据,要达成这样的机制, 你的 WWW 服务器必需要启动 https 这个重要的传输协议,而浏览器则必需要在网址列输入 https:// 开头的网址,那两者才能够进行沟通与联机
Certificate Authorities (CA) 想一想 SSL 这个机制有什么问题?他的问题就是:『那把 Public key 是服务器产生且任何人都能取得的』!这是什么问题?因为 public key 可让任何
人取得,若被钓鱼网站取得并且制作一个很类似你网络银行的网站,并且骗你输入账密,你不知道该网站是诈骗集团制作的,以为https就是安全的,如此一来,即使你的数据
有加密,但结果,在钓鱼网站服务器端还是能够取得你输入的账号啊,这个时候就需要第三方公正单位来帮忙,所谓的 CA 就是一个公认的公正单位,你可以自行产生一把密钥
且制作出必要的凭证数据并向 CA 单位注册(讲到注册你就要知道...这东西是要钱的意思!),那么当客户端的浏览器在浏览时,该浏览器会主动的向 CA 单位确认该凭证是否为合
法注册过的,如果是的话,那么该次联机才会建立,如果不是呢?那么浏览器就会发出警告讯息, 告知用户应避免建立联机啊。所以说,如此一来 WWW 服务器不但有公正单
位的背书,用户在建立联机时也比较有保障
更多关于 SSL 以及 CA 的介绍,可以约略参考一下:Apache 的 SSL: http://www.modssl.org/ CA 组织之一: https://digitalid.verisign.com/server/apacheNotice.htm
客户端常见的浏览器,www服务器是Server/Client 的架构,而客户端使用的软件就是浏览器,目前比较知名的自由软件浏览器主要有两款是firefox以及google推出的chrome,
至于市占率较高的还有 windows的 IE,由于浏览器可以连结到因特网上,所以浏览器也有可能被攻击! 其中由于 IE 直接内嵌至 Windows 的核心当中,所以如果 IE 有漏洞时,
对于系统的损害是很大的!因此无论如何,请记得『务必要随时更新到最新版本的浏览器』才行。建议你可以使用firefox 或 chrome 这些小巧玲珑的浏览器
除了窗口接口的浏览器软件之外,其实还有几个可以在文字接口底下进行浏览与网页下载的程序,分别是:links 与 lynx:文字接口的浏览器;wget:文字接口下使用来撷取档案
WWW (LAMP) 服务器基本设定
Apache 仅能提供最基本的静态网站数据而已,想要达成动态网站的话,那么最好还是需要 PHP 与 MySQL 的支持才好。所以底下我们将会以 LAMP 作为安装与设定的介绍
CentOS 本身提供的 Apache,PHP, MySQL,不建议你自行利用tarball安装你的LAMP服务器,因为自行安装不但手续麻烦,而且不见得比系统默认的软件稳定,除非你有特殊的
需求(例如你的某些 Apache 插件需要较高的版本,或者是 PHP, MysQL 有特殊版本的需求), 否则请使用 yum 来进行软件的安装即可。PHP 是挂在 Apache 底下执行的一个模
块,PHP 程序控制 MySQL 时,你的 PHP 就得要支持MySQL 的模块才行,所以你至少需要底下几个软件:httpd (提供 Apache 主程序) mysql (MySQL 客户端程序)
mysql-server (MySQL 服务器程序) php (PHP 主程序含给 apache 使用的模块) php-devel (PHP 的发展工具,这个与 PHP 外挂的加速软件有关) php-mysql (提供给 PHP 程序读取
MySQL 数据库的模块)
CentOS 6.x 则是提供 Apache 2.2.x 这个版本,直接使用 yum 或者是原本光盘来安装先:yum install httpd mysql mysql-server php php-mysql
/etc/httpd/conf/httpd.conf (主要配置文件) 其实Apache也不过就是这个配置文件,有时候有的distribution会将他拆分成数个小档案分别管理不同的参数
/etc/httpd/conf.d/*.conf (很多的额外参数档,扩展名是 .conf) 如果你不想要修改原始配置文件 httpd.conf 的话,那么可以将你自己的额外参数档独立出来,例如你可以将额外的
设定值写入/etc/httpd/conf.d/vbird.conf (注意,扩展名一定是 .conf 才行) 而启动Apache 时,这个档案就会被读入主要配置文件当中了,好处就是当你的系统升级时候,你几乎不
需要更动原本的配置文件,只要将你自己的额外参数档复制到正确的地点即可,维护方便
/usr/lib64/httpd/modules/, /etc/httpd/modules/ Apache 支持很多的外挂模块,例如 php 以及 ssl 都是 apache 外挂的一种,将你想要使用的模块档案默认是放置在这个目录当中
/var/www/html/ 这就是我们 CentOS 默认的 apache 『首页』所在目录
/var/www/error/ 如果因为服务器设定错误,或者是浏览器端要求的数据错误时,在浏览器上出现的错误讯息就以这个目录的默认讯息为主
/var/www/icons/ 这个目录提供 Apache 默认给予的一些小图示,你可以随意使用,当你输入『http://localhost/icons/』 时所显示的数据所在。
/var/www/cgi-bin/ 默认给一些可执行的 CGI (网页程序) 程序放置的目录;当你输入『http://localhost/cgi-bin/』 时所显示的数据所在。
/var/log/httpd/ 预设的Apache登录档都会放在这里,对于流量比较大的网站来说,这个目录要很小心,一个星期这个登录文件数据可以达到1GBytes 左右
所以你务必要修改一下你的 logrotate 让登录档被压缩
/usr/sbin/apachectl 这个就是Apache的主要执行档,这个执行档其实是shell script而已,他可以主动的侦测系统上面的一些设定值,好让你启动Apache时更简单
/usr/sbin/httpd 这个才是主要的 Apache 二进制执行文件
/usr/bin/htpasswd (Apache 密码保护) 当某些网页想要登入时需要输入账号密码,那Apache本身就提供一个最基本的密码保护方式,该密码的产生就是透过这个指令来达成的
至于 MySQL 方面,你需要知道的几个重要目录与档案有:
/etc/my.cnf 这个是 MySQL 的配置文件,包括你想要进行 MySQL 数据库的优化,或者是针对MySQL 进行一些额外的参数指定, 都可以在这个档案里面达成的
/var/lib/mysql/ MySQL 数据库档案放置的所在处!当你有启动任何 MySQL 的服务时, 请务必记得在备份时,这个目录也要完整的备份下来才行
另外,在 PHP 方面呢,你应该也要知道几个档案喔:
/etc/httpd/conf.d/php.conf 那你要不要手动将模块写入httpd.conf当中,不需要,因为系统主动将PHP设定参数写入这个档案中了,而这个档案会在 Apache 重新启动时被读入
/etc/php.ini PHP 的主要配置文件,包括你的 PHP 能不能允许使用者上传档案?能不能允许某些低安全性的标志等等, 都在这个配置文件当中设定的
/usr/lib64/httpd/modules/libphp5.so PHP 这个软件提供给 Apache 使用的模块!这也是我们能否在 Apache 网页上面设计 PHP 程序语言的最重要的咚咚
/etc/php.d/mysql.ini, /usr/lib64/php/modules/mysql.so 你的 PHP 是否可以支持 MySQL 接口就要看这两个东西,这两个东西是由php-mysql 软件提供的
/usr/bin/phpize, /usr/include/php/ 安装类似 PHP 加速器让浏览速度加快,那么这个档案与目录就要存在, 否则加速器软件无法编译成功,这两个数据也是php-devel 软件所提供
基本上我们所需要的几个软件他的结构就是这样,上面提到的是Red Hat系统(RHEL, CentOS, FC) 所需的数据,如果是SuSE或其他版本,请依照(rpm 或 dpkg) 去查询一下,就
能够知道各个重要数据文件放置在哪里!这些数据很重要,你必需要对放置的地点有点概念才行
Apache 的基本设定:虽然可以利用IP来架设www服务器,不过建议你还是申请一个合法的主机名比较好,如果是暂时测试用的,那么确定测试用主机名为localhost且在你的
/etc/hosts 内需要有一行:127.0.0.1 localhost.localdomain localhost,这样在启动你的 Apache 时不会发生找不到完整主机名 (FQDN) 的错误讯息,要设计网站就需要了解HTML
和CSS,设定 Apache 这个 httpd.conf 配置文件,由于每个distribution 的这个档案内容都不很相同,所以你必须要自行找出相关的配置文件才行,httpd.conf设定格式是这样的:
<设定项目> 此设定项目内的相关参数 </设定项目> 举例来说,如果你想要针对我们的首页 /var/www/html/ 这个目录提供一些额外的功能,那么:<Directory "/var/www/html">
Options Indexes </Directory> 几乎都是这样的设定方式,如果你有额外的设定时,不能随便在httpd.conf 里头找地方写入,否则如果刚好写在 <Directory>...</Directory> 里面,
那么就会发生错误,需要前前后后的找一找,或者是在档案的最后面加入也行,Apache 2.2 核心文件: http://httpd.apache.org/docs/2.2/mod/core.html(参考资料)
针对服务器环境的设定项目:包括响应给客户端的服务器软件版本,主机名,服务器配置文件顶层目录等等
vim /etc/httpd/conf/httpd.conf
ServerTokens OS # 这个项目在仅告知客户端我们服务器版本与操作系统,不需要更动,# 如果不在乎你系统的信息被远程的用户查询到,则可以将这个项目批注掉即可(不建议)
ServerRoot "/etc/httpd" # 服务器设定的最顶层目录,有点类似 chroot 那种感觉。包括 logs,modules等等的数据都应该要放置到此目录底下(若未宣告成绝对路径时)
PidFile run/httpd.pid # 放置 PID 的档案,可方便 Apache 软件的管理啦!只有相对路径吧!考虑 ServerRoot 设定值,所以档案在 /etc/httpd/run/httpd.pid
Timeout 60 # 不论接收或传送,当持续联机等待超过 60 秒则该次联机就中断。一般来说,此数值在 300 秒左右即可,不需要修改这个原始值
KeepAlive On <==最好将预设的 Off 改为 On ,表示是否允许持续性的联机,亦即一个TCP联机可以具有多个档案资料传送的要求,例如,如果你的网页有很多图片,那么这一
次联机就会将所有的数据送完,而不必每个图档都需要进行一次TCP联机,预设Off请改为On较佳
MaxKeepAliveRequests 500 <==可以将原本的 100 改为 500 或更高,# 与上个设定值 KeepAlive 有关,当 KeepAlive 设定为 On 时,则这个数值可决定该次联机能够传输的最大
传输数量,为了增进效能则可以改大一点!0 代表不限制
KeepAliveTimeout 15 # 在允许 KeepAlive 的条件下,则该次联机在最后一次传输后等待延迟的秒数,当超过上述秒数则该联机将中断,设定15差不多,如果设定太高(等待时间
较长),在较忙碌的系统上面将会有较多的Apache程序占用资源,可能有效能方面的困扰。
<IfModule prefork.c> <==底下两个 perfork, worker 与内存管理有关!
StartServers 8 <==启动 httpd 时,唤醒几个 PID 来处理服务的意思
MinSpareServers 5 <==最小的预备使用的 PID 数量
MaxSpareServers 20 <==最大的预备使用的 PID 数量
ServerLimit 256 <==服务器的限制
MaxClients 256 <==最多可以容许多少个客户端同时联机到 httpd的意思
MaxRequestsPerChild 4000
</IfModule>
<IfModule worker.c>
StartServers 4 MaxClients 300 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0
</IfModule>
上面的 prefork 及 worker 其实是两个与服务器联机资源有关的设定项目,默认的项目对于小型网站来说已经够用了,不过如果你的网站流量比较大,或许可以修订一下里面的数值
这两个模块都是用在提供使用者联机的资源,设定的数量越大代表系统会启动比较多的程序来提供Apache的服务,反应速度就比较快,简单的说,这两个模块的功能分类为:
针对模块的功能分类来说:worker 模块占用的内存较小,对于流量较大的网站来说,是一个比较好的选择。prefork 虽然占用较大的内存,不过速度与 worker 差异不大,并且
prefork 内存使用设计较为优秀,可以在很多无法提供 debug 的平台上面进行自我除错,所以,默认的模块就是 prefork 这一个。
细部设定的内容方面:(以 Prefork 为例, worker 意义相同)
StartServers:代表启动 Apache 时就启动的 process 数量,所以apache 会用到不止一支程序
MinSpareServers, MaxSpareServers:代表最大与最小的备用程序数量。
MaxClients:最大的同时联机数量,也就是 process 不会超过此一数量。现在假设有 10 个人连上来,加上前面的 MinSpareServer=5,MaxSpareServers=20,则 apache 此时的程
序数应有 15-30 个之意。而这个最终程序数不可超过 256 个 (依上述设定值)!
MaxRequestsPerChild:每个程序能够提供的最大传输次数要求。 例如有个使用者连上服务器后(一个process),却要求数百个网页,当他的要求数量超过此数值,则该程序会
被丢弃,另外切换一个新程序,这个设定可以有效的控管每个process在系统上的【存活时间】。因为根据观察所得,新程序的效能较佳
MaxClients这个程序模块的参数值,可以控制【同时连上www服务器的总联机要求】数量,亦即想成最高实时在线人数,不过你要注意的是,MaxClients的数量不是越高越好,
因为它会消耗物理内存(与process有关),所以如果设定太高导致超出物理内存能够允许的范围,那么效能返回会降低,(因为系统会使用速度较慢的 swap 啊),此外,
MaxClients 也在 Apache 编译时就指定最大值了,所以你也无法超出系统最大值, 除非...你重新编译 Apache,如果你的内存不够大的话,那么MaxClients反而要调小一点,
否则效能不佳,那apache到底是使用哪个模块,事实上 CentOS 将这两个模块分别放到不同的执行档当中,分别是:
/usr/sbin/httpd:使用 prefork 模块; /usr/sbin/httpd.worker:使用 worker 模块。
你可以去查阅一下 /etc/sysconfig/httpd ,就能够知道系统默认提供 prefork 模块,但你可以透过修改 /etc/sysconfig/httpd来使用 worker 模块的
Listen 80 与监听接口有关,默认开放在所有的网络接口啊!也可修改埠口,如 8080
LoadModule auth_basic_module modules/mod_auth_basic.so等等就是加载模块的设定项目,Apache提供很多有用的模块(就是外挂)给我们使用了
Include conf.d/*.conf # 因为这一行,所以放置到 /etc/httpd/conf.d/*.conf 的设定都会被读入
User apache
Group apache
# 前面提到的 prework, worker 等模块所启动的 process 之拥有者与群组设定。未来你提供的网页档案能不能被浏览都与这个身份有关
ServerAdmin vbird@www.centos.vbird <==改成你自己的 email,# 系统管理员的 email,当网站出现问题时,错误讯息会显示的联络信箱(错误回报)
ServerName www.centos.vbird <==自行设定好自己的主机名较佳!设定主机名,这个值没有指定的话,预设会以hostname的输出为依据,千万记得你填入的这个主机名要找的
到对应的IP!(DNS 或 /etc/hosts)
UseCanonicalName Off # 是否使用标准主机名?如果你的主机有多个主机名,若这个设定为 On,那么Apache只接受servername指定的主机联机而已,请使用off
上面提到的内容中,比较重要的是可以在特殊的服务器环境中,可以启动多个不同的Apache,或者是port已经被使用掉了,那么可以将自己的Listen设定值来修改端口,
此外,你也可以将自己的额外设定指定到/etc/httpd/conf.d/*.conf 内,尤其是虚拟主机很常使用这样的设定,在移机时会很方便的
针对语系编码的设定参数修改:目前因特网传输数据编码多是UTF-8为主,vim /etc/httpd/conf/httpd.conf 找到AddDefaultCharset UTF-8就是这行值起到的作用,当修改这个值后
客户端需要清除快取(cache),否则不能看到变化的,在网页HTML里面也有宣告语系的问题<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" >
网页首页及目录相关之权限设定 (DocumentRoot 与 Directory)
www预设首页放置在/var/www/html这个目录,因为DocumentRoot这个设定值的关系,此外,由于Apache允许Internet对我们的数据进行浏览,所以当然要针对可被浏览的目录
进行权限的相关设定,那就是<Directory> 这个设定值的重要特色
vim /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html" <==可以改成你放置首页的目录!这个设定值规范了www服务器主网所放置的【目录】,虽然设定值内容可以变更,但是必须要留意这个设定目
录的权限以及SELinux的相关规则与类型(type)
<Directory /> Options FollowSymLinks AllowOverride None </Directory>
上面的设定值是针对www服务器的【预设环境】而来的,因为针对【/】的设定啊,建议保留上述的默认值(上面数据已经很严格的限制)
<Directory "/var/www/html"> <==针对特定目录的限制!
Options Indexes FollowSymLinks ==.>建议拿掉Indexes比较妥当 AllowOverride None Order allow,deny Allow from all
</Directory> 这个地方则是针对 /var/www/html 这个目录来设定权限,就是首页所在目录的权限,主要的几个设定项目的意义是这样的:
Options(目录参数):表示在这个目录内能够让Apache进行的动作,亦即是针对apache的程序的权限设定,主要的参数值:
Indexes:如果在此目录下找不到『首页档案 (预设为 index.html) 』时,就显示整个目录下的文件名,至于『首页档案档名』则与DirectoryIndex 设定值有关
FollowSymLinks:这是 Follow Symbolic Links 的缩写,意思是让连结档可以生效的意思,我们知道首页目录在 /var/www/html,既然是 WWW 的根目录,理论上就像被 chroot
一般,一般来说被 chroot 的程序将无法离开其目录,也就是说默认的情况下,你在 /var/www/html 底下的连结档只要链接到非此目录的其他地方,则该连结档预设是失效的,
但使用此设定即可让连结档有效的离开本目录。
ExecCGI:让此目录具有执行CGI程序的权限,例如,之前热门的OpenWebMail使用了很多的perl的程序,你要让OpenWebMail可以执行,就得要在该程序所在目录拥有ExecCGI
的权限才行,不要让所有目录均可使用ExecCGI
Includes:让一些 Server-Side Include 程序可以运作。建议可以加上去
MultiViews:这玩意儿有点像是多国语言的支持,与语系数据(LanguagePriority) 有关,最常见在错误讯息的回报内容,在一部主机中,可以根据不同客户端的语系而给予不同的
语言显示,默认在错误回报讯息当中存在,你可以检查一下 /var/www/error/ 目录下的数据
AllowOverride (允许的覆写参数功能):表示是否允许额外配置文件 .htaccess 的某些参数覆写?我们可以在httpd.conf内设定好所有的权限,不过如此一来若使用者自己的个人网
页想要修改权限时将会对管理员造成困扰。因此 Apache 默认可以让用户以目录底下的 .htaccess 档案内覆写 <Directory> 内的某些功能参数。这个项目则是在规定 .htaccess 可
以覆写的权限类型有哪些。常见的有:
ALL:全部的权限均可被覆写; AuthConfig:仅有网页认证 (账号密码) 可覆写; Indexes:仅允许 Indexes 方面的覆写;Limits:允许使用者利用 Allow, Deny 与 Order 管理可浏
览的权限;None:不可覆写,亦即让 .htaccess 档案失效!
Order, Allow, Deny (能否登入浏览的权限):决定此目录是否可被apache的PID所浏览的设定权限,能否被浏览主要有两种判定的方式:
deny,allow:以 deny 优先处理,但没有写入规则的则默认为 allow
allow,deny:以 allow 为优先处理,但没有写入规则的则默认为deny
预设的环境中,因为是 allow,deny 所以预设为 deny (不可浏览),不过在下一行有个 Allow from all,allow 优先处理,因此全部 (all) 客户端皆可浏览啦
除了这些数据之外,跟网站数据相关性高的还有底下的几个咚咚:
vim /etc/httpd/conf/httpd.conf DirectoryIndex index.html index.html.var <==首页『档案的档名』设定,例如 http://localhost/ 时,Apache就会拿出首页档案,这个档案预设index.*
按照顺序接在 DirectoryIndex后面的档名参数,越前面的越优先读取, 通通不存在,就与刚刚谈到的 Options 里面的 Indexes 有关(没有找到首页是否显示目录的意思,最好关闭)
# Alias 网址列延伸 实际Linux目录
Alias /icons/ "/var/www/icons/" <==制作一个目录别名 (相当类似快捷方式)!
<Directory "/var/www/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory>
这个 Alias是制作出类似连结档的东西,当你输入http://localhost/icons 时,其实你的 /var/www/html 并没有 icons 那个目录,不过由于 Alias (别名) 的关系,会让该网址直接连结
到 /var/www/icons/ 下,这里面预设有很多 Apache 提供的小图示!而因为设定了一个新的可浏览目录,所以你瞧,多了个 <Directory> 来规定权限了
# ScriptAlias 网址列延伸 实际Linux目录
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> 与上面的 icons 类似,不过这边却是以 ScriptAlias (可执行脚
本的别名) 为设定值!这个设定值可以指定该目录底下为『具有 ExecCGI 』能力的目录所在,所以你可以将类似 Open webmail 的程序给他放置到 /var/www/cgi-bin 内,就不必
额外设定其他的目录来放置你的 CGI 程序
PHP 的预设参数修改
PHP是Apache当中的一个模块,Apache将一些重要的模块给他拆出来放置到/etc/httpd/conf.d/*.conf 档案中了,所以要到该目录下才能了解到某些模块是否被加入
cd /etc/httpd/conf.d ==> php.conf 提供 PHP 模块的设定 welcome.conf<==提供默认的首页欢迎讯息,会看到这两个文件
vim /etc/httpd/conf.d/php.conf
<IfModule prefork.c> <==根据不同的 PID 模式给予不同的 PHP 运作模块 LoadModule php5_module modules/libphp5.so </IfModule>
<IfModule worker.c> LoadModule php5_module modules/libphp5-zts.so </IfModule>
AddHandler php5-script .php <==所以扩展名一定要是 .php 结尾
AddType text/html .php <==.php 结尾的档案是纯文本档
DirectoryIndex index.php <==首页档名增加 index.php
#AddType application/x-httpd-php-source .phps <==特殊的用法
CentOS 6.x 使用的是 PHP 5.x 版本,这个版本依据不同的 apache 使用内存模式(prefork 或 worker) 给予不同的模块,此外,为了规范 PHP 档案,因此多了最后三
行,包括增加扩展名为 .php 的档案处理方式, .php 定义为纯文本档,以及首页档名增加 index.php 等。基本上,这个档案你不需要有任何的修改,保留原样即可
PHP 的资安方面设定
PHP 的配置文件其实是在 /etc/php.ini,这个档案可以有些小改动: vim /etc/php.ini
register_globals = Off # 这个项目请确定为 Off (预设就是 Off),因为如果设定为 On 时, 虽然程序执行比较不容易出状况,但是很容易不小心就被攻
log_errors = On
ignore_repeated_errors = On <==这个设定值调整一下 (因预设为 Off)
ignore_repeated_source = On <==这个设定值调整一下 (因预设为 Off)
# 这三个设定可以决定是否要将 PHP 程序的错误记录起来,建议将重复错误数据忽略掉,否则很忙碌的系统上,错误数据将可能造成你的登录档暴增,导致效能不佳 (或当机)
display_errors = Off
display_startup_errors = Off
# 当你的程序发生问题时,是否要在浏览器上头显示相关的错误讯息 (包括部分程序代码),强烈的建议设定为 Off 。不过如果是尚未开放的 WWW 服务器,为了你的debug容易
可以暂时的将他设定为 On,如此就可以在浏览器上面显示出来,你不需要进入/var/log/httpd/error_log 登录当中查,但程序完成后,记得将此设定值改为 Off
如果你想要提供 Apache 的说明文件给自己的 WWW 服务器的话,可以安装一下httpd-manual 这个软件,你就会发现在这个目录当中又会新增档案 (manual.conf),
而且从此你可以使用 http://localhost/manual 来登入 Apache 的使用手册,有兴趣的话可以参考与安装底下这些软件:
httpd-manual:提供 Apache 参考文件的一个软件;
mrtg:利用类似绘图软件自动产生主机流量图表的软件;
mod_perl:让你的 WWW 服务器支持 perl 写的网页程序(例如 webmail 程序);
mod_python:让你的 WWW 服务器支持 python 写的网页程序。
mod_ssl:让你的 WWW 可以支持 https 这种加密过后的传输模式。
perl 与 python 是与 PHP 类似的东西,都是一些常用的网页的程序语言,例如知名的 OpenWebMail (http://openwebmail.org/) 就是利用 perl 写成的,要让你的 WWW 支持该程序
语言, 你就得要安装这些东西(但不是所有的软件都安装!请安装你需要的即可!)
PHP 提供的上传容量限制:未来可能会使用 PHP 写成的软件来提供用户上传/下载文件数据,PHP可以限制档案容量,那么容量限制是多大?预设是 2M 左右,你可以修改
假设我们现在要限制成为 16MBytes 时,我们可以这样修订:
post_max_size = 20M <==大约在 729 行左右
file_uploads = On <==一定要是 On 才行 (默认值)
upload_max_filesize = 16M <==大约在 878 行左右
memory_limit = 128M <==PHP 可用内存容量也能修订!
与档案上传/下载容量较相关的就是这几个设定值,为啥 post_max_size 要比upload_max_filesize 大,因为档案有可能是透过post的方式传输到我们服务器上面,
此时你的档案就得要加入 POST 信息内,因为 POST 信息可能还含有其它的额外信息,所以当然要比档案容量大才行,所以在设计这个配置文件时, 这两个值得要特别注意
启动 WWW 服务与测试 PHP 模块:最单纯简易的 WWW 服务器设定搞定的差不多了,接下来就要启动
/etc/init.d/httpd start <==立刻启动
/etc/init.d/httpd configtest <==测试配置文件语法
chkconfig httpd on 开机启动 WWW
其实 Apache 也自行提供一支 script 可以让我们来简单的使用,那就是apachectl 这支程序,这支程序的用法与 /etc/init.d/httpd 几乎完全一模一样 /usr/sbin/apachectl start
一般建议你可以稍微记一下 apachectl 这支程序,因为很多认证考试会考,而且他也是 Apache 预设提供的一个管理指令说。
先看看 port 有没有启动 netstat -tulnp | grep 'httpd'
# 再来看看登录文件的信息记录了什么!这个确实建议瞧一瞧! tail /var/log/httpd/error_log, # 第一行在告知有使用 SELinux(强调一下),最后一行代表正常启动了!
比较重要的是还有启动 SELinux 的相关说明,接着看看/var/www/html 有没有数据,没有~没关系,因为 CentOS 帮我们造了一个测试页了 (Apache 的 welcome 模块功能),
所以你还是在浏览器上面输入你这部主机的 IP看看先:
如果想要知道有没有成功的驱动 PHP 模块,那你最好先到 /var/www/html 目录下去建立一个简单的档案:
[root@www ~]# vim /var/www/html/phpinfo.php <?php phpinfo (); ?> 要记住,PHP 档案的扩展名一定要是 .php 结尾的才行,phpinfo() 就是 PHP 程序提供的一个函式库,这个函
式库可,以显示出你 WWW 服务器内的相关服务信息,包括主要的 Apache 信息与 PHP 信息等等。这个档案建置完毕后,接下来你可以利用浏览器去浏览一下这个档案:
常见的错误问题以及解决之道可以参考:
网络问题:虽然在本机上没有问题, 但不代表网络一定是通的!请确认一下网络状态!例如 Route table, 拨接情况等等
配置文件语法错误:这个问题很常发生,因为设定错误,导致无法将服务启动成功。此时除了参考屏幕上面的输出信息外,你也可以透过/etc/init.d/httpd configtest 测试语法,更
佳的解决方案是参考/var/log/httpd/error_log 内的数据,可以取得更详尽的解决之道
权限问题:例如你刚刚在 httpd.conf 上面的 user 设定为 apache 了,但偏偏要被浏览的档案或目录权限对 apache 没有可读权限,自然就无法让人家联机进去
问题的解决之道:如果还是没有办法连上你的 Linux Apache 主机,察看 /var/log/httpd/error_log 这个档案,另一个可能是防火墙!查看一下 iptables 讯息,也可能是SELinux问题
MySQL 的基本设定:在启动 MySQL 前其实系统并没有帮我们建立任何的数据库。当你初次启动 MySQL 后,系统才会针对数据库进行初始化的建立,不相信的话你可以先看看
/var/lib/mysql/ 这个目录,里面其实没有任何数据的
启动 MySQL (设定 MySQL root 密码与新增 MysQL 用户账号) /etc/init.d/mysqld start chkconfig mysqld on 初次启动,屏幕会显示一些讯息且 /var/lib/mysql 会建立数据库
netstat -tulnp | grep 'mysql' 查看监听的端口
# 底下在测试看能否以手动的方式连上 MySQL 数据库! mysql -u root,MySQL 预设监听的埠口在 port 3306,从上面看来我们的 MySQL 似乎是启动了,不过MySQL数据库管理
员并没有任何密码,很可能会被用户搞烂的,所以最好对MySQL管理员账号设定一个密码才行。
针对 MySQL 这个软件内的 root 这个管理者设定他的密码 mysqladmin -u root password 'your.password'
create database vbirddb; 创建一个数据库
mysql -u root -p 登录数据库的命令
grant all privileges on vbirddb.* to vbirduser@localhost 给予这个账号联机登录MySQL的权限
效能调校 /etc/my.cnf 由于 MySQL 这个数据库系统如果在很多使用者同时联机时,可能会造成某些效能方面的瓶颈,因此,如果你的数据库真的好大,建议可以改用postgresql
这套软件,这套软件的使用与 mysql 似乎差异不大。 不过,我们还是提供一些简单的方式来处理小站的 MySQL 效能好了参考http://parus1974.wordpress.com/2005/02/27/mysql
vim /etc/my.cnf
[mysqld]
default-storage-engine=innodb
# 关于目录数据与语系的设定等等
default-character-set = utf8 <==每个人的编码都不相同,不要随意跟我一样
port = 3306
skip-locking 关于内存的设定,注意,内存的简单计算方式为 key_buffer + (sort_buffer + read_buffer ) * max_connection 总量不可高于实际物理内存量 128 + (2+2)*150 = 728MB
key_buffer = 128M sort_buffer_size = 2M read_buffer_size = 2M join_buffer_size = 2M max_connections = 150 max_connect_errors = 10
read_rnd_buffer_size = 4M max_allowed_packet = 4M table_cache = 1024 myisam_sort_buffer_size = 32M thread_cache = 16 query_cache_size = 16M
tmp_table_size = 64M # 由联机到确定断线的时间,原本是 28800 (sec) ,约 8 小时,我将他改为20 分钟 wait_timeout = 1200 thread_concurrency = 8
innodb_data_file_path = ibdata1:10M:autoextend innodb_buffer_pool_size = 128M innodb_additional_mem_pool_size = 32M innodb_thread_concurrency = 16
datadir=/var/lib/mysq socket=/var/lib/mysql/mysql.sock user=mysql symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
请依照你实际拥有的内存量来处理喔!还得加上你的 Apache 本身的内存用量! 所以...如果你的网站流量很大的话,在校能测试上面要很注意
MySQL root 密码忘记的紧急处理,如果数据库内容并不是很重要:那就删除,将 MySQL 关闭后, 将 /var/lib/mysql/* 那个目录内的数据删除掉,然后再重新启动 MySQL,
那么 MySQL 数据库会重建, 你的 root 又没有密码。如果数据库很重要...那千万不要随便删除
防火墙设定与 SELinux 的规则放行
设定好了 LAMP 之后,开始要让客户端来联机,如果是小型的www网站,事实上,Apache是连接本机的MySQL,并没有开放给外部的用户来连接数据库,因此,请不要
将 3306 放行给因特网连接,除非你真的知道你要给其他的服务器读取你的 MySQL,既然如此,当然只要开放 port 80 即可,如果你的 Apache 未来还想要进行一些额外的联机
工作,那么 SELinux 的一些简单规则也得先放行,SELinux 的问题其实都好解决,因为可以参考登录档来修订
# 1. 放行防火墙中的 port 80 联机
vim /usr/local/virus/iptables/iptables.rule
iptables -A INPUT -p TCP -i $EXTIF --dport 80 --sport 1024:65534 -j ACCEPT
# 将上面这一行的批注拿掉即可!
/usr/local/virus/iptables/iptables.rule
iptables-save | grep 80
-A PREROUTING -s 192.168.100.0/255.255.255.0 -i eth1 -p tcp -m tcp --dport 80
-j REDIRECT --to-ports 3128 <==这一行是进行 squid 产生的,应该要拿掉较佳
-A INPUT -i eth0 -p tcp -m tcp --sport 1024:65534 --dport 80 -j ACCEPT
# 看到上面这行,就是将防火墙的放行加进来了,客户端应该是能够联机
# 2. 解决 SELinux 的规则放行问题:
getsebool -a | grep httpd <==会出现一堆规则,有兴趣的如下:
setsebool -P httpd_can_network_connect=1
使用 root 在 /root 底下建立了 index.html 了,这个档案将被移动到 /var/www/html 底下,请建立该档案,并且放置成首页档案浏览看看。
echo "This is my Home page" > index.html
mv index.html /var/www/html
ll /var/www/html/index.html # 权限看起来是 OK 的
浏览一下 http://localhost,就会发现无法读取,检查 /var/log/httpd/error_log 以及 /var/log/messages 的内容:执行run sealert -l 6c927892-2469-4fcc-8568-949da0b4cf8d即可
对于这个简单的 LAMP 服务器,你必须要知道的是:
默认的首页目录在 /var/www/html/,你应该将所有的 WWW 数据都搬到该目录底下才对!
注意你的资料权限 (rwx 与 SELinux)!务必要让 Apache 的程序用户能够浏览
尽量将你的首页档案档名取为 index.html 或 index.php
如果首页想要建立在其他地方,你应该要修改 DocumentRoot 那个参数(httpd.conf)
不要将重要数据或者隐私数据放置到 /var/www/html/ 首页内!
如果你需要安装一些 CGI 程序的话,建议你将他安装到/var/www/cgi-bin/ 底下, 如此一来你不需要额外设定 httpd.conf 即可顺利启动 CGI 程序;
架设之后还得要持续的观察是否有更新的版本出现, 随时去更新到最新版本才行。
Apache 服务器的进阶设定,例如个人用户首页、虚拟主机以及认证保护的网页等等。
启动用户的个人网站 (权限是重点)
每部www服务器都有一个首页,如果每个用户都想要有自己安全控管的首页,新版的配置文件内默认将这个功能取消了,需要自行修订
vim /etc/httpd/conf/httpd.conf # 找到如下的设定项目,大约在 366 行左右:
# 将他改成如下的情况
<IfModule mod_userdir.c> #UserDir disable UserDir www </IfModule>
重新启动一下先 /etc/init.d/httpd restart
这只是个范例,Apache 默认的个人首页是放置在家目录下的 ~/public_html/ 目录下,你的系统有个账号叫做 student,那么预设的属于 student 的个人首页就会放置在
/home/student/public_html/ 底下,不过,这个 public_html 看起来跟网页没有什么特殊关连性,因此都会将这个目录改为 www,所以 student 的个人首页就会是在
/home/student/www/ 目录下,比较好记忆,如果想要让新建的用户默认家目录下都有个www的目录,新增用户时所参考的家目录在 /etc/skel 目录内,所以你可以直接
mkdir /etc/skel/www 即可,若想要让用户直接拥有一个简易的首页,还能够使用 echo "My homepage" > /etc/skel/www/index.html!
个人首页的 URL 以及目录的权限、SELinux 设定
现在请登入 student,并用该账号建置底下的相关信息: mkdir www chmod 755 www <==针对 www 目录开放权限 chmod 711 ~ <==不要忘了家目录也要改
cd www echo "Test your home" >> index.html 由于 CentOS 默认的用户家目录权限是 drwx------ ,这个权限将无法让 Apache 的程序浏览,!所以你至少要让你的家目录权限
成为 drwx--x--x 才行,这个很重要,那么未来只要你在浏览器的网址列这样输入: http://你的主机名/~student/『理论上』就能够看到你的个人首页了。不过,可惜的是,我们的
SELinux 并没有放行个人首页,赶紧看一下你的 /var/log/messages,里面应该会教你进行这项工作:setsebool -P httpd_enable_homedirs=1 restorecon -Rv /home/
# 第一个指令在放行个人首页规则,第二个指令在处理安全类型! 就可以看到你的使用者个人网页,我可不可以将使用者的个人网站设定成为:http://你的主机名/student/
最简单的方法是这样的: cd /var/www/html ln -s /home/student/www student,由于我们首页的『 Options 』内有 FollowSymLinks 这个参数的原因,所以可以直接
使用连结档即可。另外我们也可以使用 Apache 提供的别名功能 (Alias),例如这样做:vim /etc/httpd/conf/httpd.conf
# 找个不与人家设定值有干扰的地方加入这个设定项目:
Alias /student/ "/home/student/www/"
<Directory "/home/student/www"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> /etc/init.d/httpd restart
不过,如果你使用这个方法的话得要特别注意,在 httpd.conf 内的 Alias 后面接的目录,需要加上目录符号 (/) 在结尾处, 同时,网址列必须要输入 http://IP/student/ !亦即是结
尾也必须要加上斜线才行!否则会显示找不到该 URL。
启动某个目录的 CGI (perl) 程序执行权限
如果你想要 Apache 可以执行 perl 之类的网页程序时, 你就得需要安装一些额外的模块才行。其中 mod_perl 与 mod_python 这两个软件建议你最好安装一下,
然后我们也提到想要执行 CGI 程序就得到/var/www/cgi-bin/ 目录下去执行。如果你想要在其他目录底下执行 CGI 程序是否可以?当然行啊
利用新目录下的 Options 参数设定:假设想要执行 CGI 的程序附文件名为 .cgi 或 .pl ,且放置的目录在/var/www/html/cgi/ 时,你可以这样做:
yum install mod_python mod_perl
vim /etc/httpd/conf/httpd.conf
# 找到底下这一行,大约在 797 行左右啦:
#AddHandler cgi-script .cgi
# 将他改成底下的模样,让附档名为 .pl 的档案也能执行喔!
AddHandler cgi-script .cgi .pl
# 然后加入底下这几行来决定开放某个目录的 CGI 执行权限。
<Directory "/var/www/html/cgi"> Options +ExecCGI AllowOverride None Order allow,deny Allow from all </Directory> /etc/init.d/httpd restart
接下来只要让你的 CGI 程序具有 x 权限,那么他就可以执行,举例来说,你的档案在 /var/www/html/cgi/helloworld.pl 的话,那么:mkdir /var/www/html/cgi
vim /var/www/html/cgi/helloworld.pl
#!/usr/bin/perl print "Content-type: text/html\r\n\r\n"; print "Hello, World.";
chmod a+x /var/www/html/cgi/helloworld.pl
然后在网址列输入:『http://主机名或 IP/cgi/helloworld.pl』即可执行该档案并将结果显示在屏幕上面
使用 ScriptAlias 的功能:你可以直接利用档名的别名来处理即可,更简单呢。我们现在假设所有在/var/www/perl/ 目录下的档案都可以是 perl 所撰写的程序代码,那么我们可以
这样做:vim /etc/httpd/conf/httpd.conf
# 同样的你要先确认这一行是存在的 AddHandler cgi-script .cgi .pl,然后加入底下这几行来决定开放某个目录的 CGI 执行权限 ScriptAlias /perl/ "/var/www/perl/"
/etc/init.d/httpd restart mkdir /var/www/perl cp -a /var/www/html/cgi/helloworld.pl /var/www/perl,现在,请在网址列输入:『http://IP/perl/helloworld.pl』,就能够看到刚刚
的数据了,这个方法比较棒啦!因为该目录不需要在 Apache 首页底下也可以成功的,这两个方法你可以随意取一个来处理即可!不需要两个都进行。
找不到网页时的显示讯息通知
如果你的 /var/www/html/cgi 目录底下没有任何首页档案 (index.???) 时,那当使用者在网址列输入『 http://your.hostname/cgi 』,请问结果会显示出什么呢?可能有两个:
如果你的 Options 里面有设定 Indexes 的话,那么该目录下的所有档案都会被列出来,提供类似 FTP 的连结页面。
如果没有指定 Indexes 的话,那么错误讯息通知就会被显示出来。
事实上 CentOS 所提供的 Apache 已经规范好一些简单的错误资料网页了,你可以到 /var/www/error/ 目录下瞧瞧就晓得
vim /etc/httpd/conf/httpd.conf # 大约在 875 行左右,预设就是批注掉的!
ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var 等等信息,虽然 Apache 默认有提供一些额外的数据给我们使用,不过不太喜欢这样的信息页面,可以提供给用户一些
有效的链接,这样会比较方便用户链接到我们的网站,此时我们可以这样做:vim /etc/httpd/conf/httpd.conf
# 找到底下这一段,大约在 836 行左右,看看这些简单的范例先:
ErrorDocument 404 /missing.html <==将批注拿掉吧!批注掉其他的, /etc/init.d/httpd restart 上面那个档案 /missing.html 必需要放置在你的首页目录下/var/www/html/missing.html
要提醒你的是:『你的所有配置文件当中 (包括/etc/httpd/conf.d/*.conf) 只能存在一个 ErrorDocument 404 ... 的设定值,否则将以较晚出现的设定为主,所以你得先搜寻一下,尤
其是很多 Linux 版本的 Apache并没有将默认的错误讯息批注,至于那个 404 是啥意思?他的意义是这样的:100-199:一些基本的讯息 200-299:客户端的要求已成功的达成
300-399:Client 的需求需要其他额外的动作,例如 redirected 等等 400-499:Client 的要求没有办法完成(例如找不到网页) 500-599:主机的设定错误问题
好了,接下来让我们编辑一下那个 missing.html 的档案内容吧! ^_^ ,设定好之后,现在你如果在网址列随便输入一个服务器上不存在的网址,就会出现如下的画面
浏览权限的设定动作 (order, limit)
iptables仅能限制同一个IP来源是否可以浏览网页,是一口气开放或拒绝的意思,但是如果要做成某些网页可以浏览,某些不可浏览时,需要针对www内容来部分放行,此时
就需要透过apache 内建的 order 项目来处置即可。先来回忆一下 order 搭配 allow, deny 的相关限制:
Order deny,allow:以 deny 优先处理,但没有写入规则的则默认为allow,常用于:拒绝所有,开放特定的条件
Order allow,deny:以 allow 为优先处理,但没有写入规则的则默认为deny,常用于:开放所有,拒绝特定的条件
如果 allow 与 deny 的规则当中有重复的,则以预设的情况 (Order 的规范) 为主。
例如:首页目录想要让 192.168.1.101 及政府部门无法联机,其他的则可以联机,vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all Deny from 192.168.1.101 <==约在 344 行新增底下两行!
Deny from .gov.tw </Directory>
/etc/init.d/httpd restart 注意一下,因为 Order 是『 allow,deny 』,所以所有规则当中属于 allow 的都会被优先提到最上方
# 底下可是个错误的示范,请仔细看下个段落的详细说明
<Directory "/var/www/html"> Options FollowSymLinks AllowOverride None Order deny,allow Deny from 192.168.1.101 Deny from .gov.tw Allow from all </Directory>
事实上,如果想要让某个网域或者是IP无法浏览的话,最好还是利用Iptables来处理,不过如果仅是某些重要目录不想让人家来查阅的话,那么这个allow,deny与order的设定
数据就派的上用处了
而除了这个 order 设定值之外,我们还有个限制客户端能进行的动作的设定,那就是Limit这个设定,例如想要让用户在 /var/www/html/lan 这个目录下仅能进行最阳春的 GET,
POST, OPTIONS 的功能,除了这几个之外的其他功能通通不允许, 那么你可以这样做:vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/lan"> AllowOverride none Options FllowSymLinks # 先允许能够进行 GET, POST 与 OPTIONS 啦!
<Limit GET POST OPTIONS> Order allow,deny Allow from all </Limit> # 再规定除了这三个动作之外,其他的动作通通不允许啦!
<LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept>
</Directory>
透过 Limit 与 LimitExcept 就能够处理客户端能够进行的动作,也就有办法针对你的数据进行细部保护,不过这些保护真的很细部,一般小网站大致上用不到 Limit这个玩意儿
服务器状态说明网页:可以透过Apache提供的特别功能来查询主机目前的状态,那就是mod_status 这个模块,这个模块默认是关闭的,你必须要修改配置文件来启动他。
vim /etc/httpd/conf/httpd.conf
# 先确定底下这几个项目真的有存在才行!
LoadModule status_module modules/mod_status.so <==大约在 178 行,就是模块的加载
ExtendedStatus On <==大约在 228 行,你可以将他打开,信息会比较多!
# 底下的数据则大约在 924 行左右,你可以将他修改成为这样:
<Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 192.168.1.0/24 Allow from 127.0.0.1 </Location>
重启 /etc/init.d/httpd restart,在你的网址列输入主机名后面加上 http://hostname/server-status就可以看到输出的结果,包括目前的时间以及Apache重启的时间,还有目前
已经启动的程序等等,还有网页最下方会显示每个程序的客户端与服务器端的联机状态,可查阅者 (allow from 的参数) 还是需要限制的比较严格一点
.htaccess 与认证网页设定:在保护Apache本身的数据方面,除了Order以及Limit之外,但是Order与Limit主要是针对IP网域或者主机名管理的,如果我们客户端使用的是
拨接方式取得IP,那么IP会一直变动的,如果一来那个保护的目录也就不能在任何地方进入了,会造成困扰,此时如果你能够使用密码保护的方式,让用户可以输入账号/密码
才可以浏览的话,那客户端就不用受到那个order的Allow,deny的限制,Apache提供了一个简单的认证功能,让我们可以设定好密码保护的网页
认证网页需要这样处理:
建立受保护的目录:既然我们是『按了某个链接进入某个目录之后,才会出现对话窗口』, 那么首先当然就是要有那个设定为认证网页的『目录』,是要目录才行
设定 Apache 所需参数:然后,在对话窗口中,既然我们需要输入账号与密码, 那么自然就需要密码文件,虽然 Apache 有支持 LDAP 及 MySQL 等等的认证机制,不过我们这
里并不讨论其他的认证机制,完全使用 Apache 的默认功能而已,所以,底下我们会使用基本 (Basic) 的认证模式
建立密码档案:处理完基本的设定后,再来则是建立登入时所需要的账号与密码,最后,重新启动 Apache 就 OK
我们说过,任何的设定资料都可以直接写到httpd.conf这个配置文件当中,不过,如果有30个使用者具有个人首页,然后他们都需要制作保护目录,httpd.conf只有root才能
修改,更可怕的是『每次改完都需要重新启动 Apache』,所以就有了认证网页,你可以交给使用者自行管理他们的认证网页,透过httpd.conf内的AllowOverride参数,配合
.htaccess这个档案的设定就OK了,
主配置文件httpd.conf的修订,你必须要在httpd.conf这个主配置文件当中先以AllowOverride 指定某个目录下的 .htaccess 能够进行取代的参数为何?一般有 AuthConfig,
Options 等等,考虑到系统数据的安全,建议提供AuthConfig 的项目就好了。设定完毕后请重新启动 Apache
.htaccess 放置的目录:在受保护的目录底下务必要存在 .htaccess 这个档案,透过这个档案即可修改 httpd.conf 内的设定
.htaccess 的修改:.htaccess 设定完『立刻生效』,不需要重新启动 Apache,因为该档案的内容是『当有客户端浏览到该目录时,该档案才会被使用来取代原有的设定。
1. 建立保护目录的数据
假设我要将受保护的数据放置到 /var/www/html/protect 当中,记得,这个目录要让 Apache 可以浏览到才行。你可以立刻将一些重要的资料给他搬移到这里来。
mkdir /var/www/html/protect
vim /var/www/html/protect/index.html 设定内容
2.1 以 root 的身份处理 httpd.conf 的设定数据,开始编辑,让受保护的那个目录可以使用 .htaccess,vim /etc/httpd/conf/httpd.conf
# 确定底下这几行是存在的,约在 400 行左右!AccessFileName .htaccess <Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy All </Files>
# 在某个不受影响的地方加入这一段: <Directory "/var/www/html/protect"> AllowOverride AuthConfig Order allow,deny Allow from all </Directory>
/etc/init.d/httpd restart <==重新启动,不要忘记了!再接下来要准备.htaccess 的建立了,
2.2 建立保护目录下的 .htaccess 档案:只要有权限建立者即可进行, 要注意,这个档案是在保护目录底下 cd /var/www/html/protect vim .htaccess
# 只要加入底下这几行即可
AuthName "Protect test by .htaccess" 在要你输入账号与密码的对话窗口中,出现的『提示字符』
Authtype Basic 认证的类型,我们这里仅列出 Apache 预设的类型,亦即是『basic』
AuthUserFile /var/www/apache.passwd AuthUserFile:这个保护目录所使用的账号密码配置文件,这个档案随便你设定的,使用者可以自行设定账号和密码,档案内的账号
不限在 /etc/passwd 出现的使用者,另外,这个档案不要放置在Apache 可以浏览的目录内,所以我将他放置在首页之外!避免被不小心窃取。
require user test 后面接可以使用的账号。假如 /var/www/apache.passwd 内有三个账号, 分别是 test, test1, test2 ,那我这里只写了 test ,因此 test1,test2 将无法登入此目
录,如果要让该密码文件内的用户都能够登入,就改成『require valid-user』即可,设定好就立刻生效了,不需要重新启动任何东西
建立密码档案 htpasswd (只要有权限即可执行)
Apache 默认读取的账号/密码设定数据是由 htpasswd 所建立的,这个指令的语法是这样的:选项与参数:
-c :建立后面的密码档案。如果该档案已经存在,则原本的数据会被删除,所以如果只是要新增使用者(档案已存在时),不必加上 -c 的参数
-m :不使用预设的 CRYPT 加密,改用 MD5 方式加密密码
-d :使用更复杂的 SHA 方式来加密
-D :删除掉后面接的那个使用者账号
# 1. 建立 apache.passwd ,账号为 test,htpasswd -c /var/www/apache.passwd test 会提示请输入密码
cat /var/www/apache.passwd 已经建立一个新使用者
# 2. 在已存在的 apache.passwd 内增加 test1 这个账号:
htpasswd /var/www/apache.passwd test1
再次强调,这个档案档名需要与 .htaccess 内的 AuthUserFile 相同,且不要放在浏览器可以浏览到的目录,在网址列输入:『http://your.hostname/protect』就会出现一个弹出框
如果一直出现问题,那就只好前往登录档 (/var/log/httpd/error_log) 察看错误信息
虚拟主机的设定 (重要):他可以让你的一部 Apache 看起来像有多个『主站首页』的感觉
Virtual Host: 所谓的虚拟主机,基本上就是【让你的一部服务器上面,有多个"主网页"】存在,硬件实际上只有一部主机,但是由网站网址来看,则似乎有很多部主机存在的样子
例如,主网站:http://linux.vbird.org和 讨论区:http://phorum.vbird.org用dig来查验IP的话,会发现这两个网址都指向同一个IP了,这就是虚拟主机的功能了,你可以让你的多个
主机名对应到不同的主网页目录(DocumentRoot 参数),所以看起来会像有很多部实际主机的模样。架设的大前提:同一个 IP 有多个主机名啦!所以说,你必需先拥有多个主机
名才行。要如何拥有多个主机名?那就是:1.向 ISP 申请多个合法的主机名,而不自己架设 DNS;,2. 自行设定经过合法授权的 DNS 主机来设定自己所需要的主机名
一个架设范例练习:我的每个主机名都必需要对应到某个主网页目录,底下则是一个简单范例
linux.centos.vbird /var/www/html
www.centos.vbird /var/www/www
ftp.centos.vbird /var/ftp (较特殊)
接下来就是开始设定,建议你将虚拟主机的设定建立一个新的档案在/etc/httpd/conf.d/*.conf 当中,因为如此一来你的虚拟主机配置文件就可以进行搬移, 修改的时候也不会影响
到原有的 httpd.conf 的资料,因为httpd.conf 内有个 Include 的参数将 /etc/httpd/conf.d/*.conf 的档案都读入配置文件当中,所以设定上面就变的很轻便, 备份与升级的时候也比
较容易处理,# 1. 先建立所需要的目录:
mkdir /var/www/www <==www.centos.vbird 所需
yum install vsftpd <==/var/ftp 可由系统软件提供
echo "www.centos.vbird" > /var/www/www/index.html
echo "ftp.centos.vbird" > /var/ftp/index.html
# 原有的首页 (/var/www/html) 就不更动了!另建两个不同的首页内容,可供测试用
# 2. 开始编辑配置文件,这里用额外的档案来设定
vim /etc/httpd/conf.d/virtual.conf ,# 底下这一行在规定『本机任何接口的 port 80 所指定的虚拟主机』的意思
NameVirtualHost *:80
# 先针对两个多出来的可浏览目录进行权限方面的规范<Directory "/var/www/www"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
<Directory "/var/ftp"> Options FollowSymLinks Indexes AllowOverride None Order allow,deny Allow from all </Directory>
# 针对三部主机的 DocumentRoot 进行定!
<VirtualHost *:80> ServerName linux.centos.vbird DocumentRoot /var/www/html </VirtualHost>
<VirtualHost *:80> ServerName www.centos.vbird DocumentRoot /var/www/www CustomLog /var/log/httpd/www.access_log combined # 不同的主页可以指定不同的登录文件信息,这样比较好 debug 与分析啦!</VirtualHost>
<VirtualHost *:80> ServerName ftp.centos.vbird DocumentRoot /var/ftp </VirtualHost>,最后/etc/init.d/httpd restart重新启动
你要注意的只有几点:
1. 在虚拟主机的设定上还有很多的可用的功能,不过,最低的限度是需要有 ServerName 及 DocumentRoot 这两个即可
2. 使用了虚拟主机后,原本的主机名 (linux.centos.vbird) 也要同时写入虚拟主机的对应中, 否则这个主机名可能会不知道被丢到哪里去。
3. 在 www.centos.vbird 这个主机当中多了个 CustomLog,表示任何向www.centos.vbird 要求数据的记录都会改写入/var/log/httpd/www.access_log 而不是预设的
/var/log/httpd/access_log,但这个新增的登录档必需要加入 logrotate 的管理当中才行,否则登录档会大到『爆表』
接下来,只要你客户端的浏览器可以找到这三个主机名并联机到正确的 IP 去, 你这个 Apache 就可以同时提供三个网站的站址了
虚拟主机常见用途:他可以进行底下的任务
主机代管:当你有一部很快速的计算机,配合你的网络宽带又大的话,那么就可以利用这个虚拟主机来【拉客】,因为毕竟不是所有公司都有维护服务器的能力,
如果你能够提供合理的流量、亲和的数据传输接口、 稳定的提供服务,并且给予类似 MySQL 数据库的支持,那么当然有可能进行『主机代管』的业务啊
服务器数据备援系统:你可以在两个地方放置两部主机,主机内的网页数据是一模一样的使用 rsync 来达成的,那么你将可以利用 Apache 的虚拟主机功能, 配合 DNS 的 IP 指
向设定,让某一部主机挂点时,另外一部主机立刻接管 WWW 的要求,让你的 WWW 服务器不会有任何断线的危机,注:当 A 服务器挂点时, 赶紧设定 DNS ,让原本 A 的 IP
指定给 B,则任何向该 IP 要求的 WWW 将会被导向 B, B 有 A 的备份数据以及虚拟主机设定,搞定
将自己的资料分门别类:利用虚拟主机将各种数据分门别类,例如将部落格指向 blog.centos.vbird,将讨论区指向 forum.centos.vbird,将教学数据指向 teach.centos.vbird 等等
登录文件分析以及 PHP 强化模块
PHP 强化模块 (eaccelerator) 与 Apache 简易效能测试
我们可以将 PHP 程序预先转换成为可直接执行的 binary file,不就可以直接读取进而加快速度吗? 没错!这东西称为预编译,其中有一套软件称为 eaccelerator,eaccelerator
可以将你的 PHP 程序与 PHP 核心及相关函式库预先编译后暂存下来,以提供未来使用时可以直接执行,加上他可以优化你的 PHP 程序,因此,可以让你的 PHP 网页速度增快
不少,因此,eaccelerator 的官方网站在底下: http://eaccelerator.net/
先将这个软件的原始码下载下来,我这里假设你将他下载到 /root 目录下, 另外你必需要确定你有安装 php-devel, autoconf, automakem4, libtool 等软件才行
# 1. 解压缩文件案,并且进行 patch 的动作:
cd /usr/local/src tar -jxvf /root/eaccelerator-0.9.6.1.tar.bz2 cd eaccelerator-0.9.6.1/
# 2. 利用 phpize 进行 PHP 程序的预处理 phpize # 过程会出现一些警告信息,不要理他没关系
./configure --enable-eaccelerator=shared --with-php-config=/usr/bin/php-config
make
make install # 此时这个新编译的模块会被放置到/usr/lib64/php/modules/eaccelerator.so 当中
将模块处理完毕之后接下来就是要让 PHP 使用这个模块, # 1. 预先加载这个 PHP 的模块:
echo "/usr/lib64/php/modules/" >> /etc/ld.so.conf.d/php.conf
ldconfig
# 2. 修改 php.ini vim /etc/php.ini # 在这个档案的最底下加入这几行:
http://eaccelerator.net/
2011/08/08 VBird
extension="eaccelerator.so" eaccelerator.shm_size="16" eaccelerator.cache_dir="/tmp/eaccelerator" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9"
# 3. 建立 eaccelerator 的暂存数据,重点在于权限要设定正确!
mkdir /tmp/eaccelerator chmod 777 /tmp/eaccelerator /etc/init.d/httpd restart
要注意的是:eaccelerator 是根据目前这一版的 PHP 核心所编译出来的,所以未来如果你的 Linux distribution 有释出新版的 PHP 时,你也顺利更新到新版的 PHP 了,那你的这
个 eaccelerator 就必需要自行手动再更新一次, 以配合到正确的 PHP 版本,否则这个模块将不会正确运作。 确认这个模块有正确的在运作之后,就可以在浏览器中查看了
如果你的 eaccelerator 没有启动的话,那就看不到上图的画面,接下来我们利用 Apache 提供的一个小程序来测试一下我们网站的效能,这个程序叫做 ab,他可以主动的向主机
重复要求多笔数据来确认主机的效能
ab [-dSk] [-c number] [-n number] 网页档名 选项与参数:
-d :不要显示 saved table 的百分比资料;通常不要那个数据,所以会加 -d
-k :还记得上面的 KeepAlive 吧!加入 -k 才会以这样的功能测试;
-S :不显示长讯息,仅显示类似 min/avg/max 的简短易懂讯息
-c :同时有多少个『同时联机』的设定(可想成同时联机的 IP )
-n :同一个联机建立几个要求通道!(可想成同一个 IP 要求的几条联机) 更多的讯息请自行 man ab
# 针对我们刚刚测试时的 phpinfo.php 这个档案来测试
ab -dSk -c100 -n100 http://localhost/phpinfo.php 根据这个软件的输出你会知道每秒钟的传输速率、最大传输速度等等
syslog 与 logrotate Apache 登录文件主要记录两个东西,分别是:
/var/log/httpd/access_log :用户端正常要求的记录信息
/var/log/httpd/error_log :用户错误要求的数据,包括服务器设定错误的信息等。
那个 /var/log/httpd/error_log 可以让你处理很多设定错误的情况,包括网页找不到、 档案权限设定错误、密码档案文件名填错等等,至于 access_log 则可以让你分析那个网页最
热门!因为登录文件是纯文本信息,所以如果能够给予压缩的话,那么备份下来的登陆档可以减少数十MB而已,这样可大大的减少了磁盘空间的浪费,如果你是使用预设的
Apache来处理你的服务器时,那么系统已经作了一个 logrotate 给你使用了,如果你是使用 Tarball 自己安装的, 那么...你就得要自行手动建立底下这个档案
vim /etc/logrotate.d/httpd
/var/log/httpd/*log { missingok notifempty compress <==建议加上这一段,让你的备份登录档可以被压缩 sharedscripts delaycompress postrotate /sbin/service httpd reload >
/dev/null 2>/dev/null || true endscript }
透过分析登陆档我们可以知道我们的网站到底哪一个网页最热门,且也能知道客户端来自哪里,目前针对 Apache 有很多的分析软件,我们底下仅介绍两个常见的分析软件
登录文件分析软件:webalizer
官方网站:http://www.mrunix.net/webalizer/ 软件配置文件在 /etc/webalizer.conf,而且他设定每天会分析一次 WWW 的登录档, 不过这个软件默认会将输出的结果放置到
/var/www/usage ,并且这个目录仅有本机可以查阅,这样并不好,可以改成将 webalizer 的输出数据放置到 /var/www/html/protect/webalizer 底下去,知道密码的都能够查阅
# 1. 先处理配置文件,变更指定一下我们要输出的目录即可: vim /etc/webalizer.conf
LogFile /var/log/httpd/access_log <==约在 28 行
OutputDir /var/www/html/protect/webalizer <==约在 42 行
Incremental yes <==约在 67 行
# 2. 建立该保护目录的数据:
cp -a /var/www/usage/ /var/www/html/protect/webalizer
/etc/init.d/httpd restart
# 3. 开始测试执行 webalizer 的分析工作
webalizer
在浏览器上面输入: http://your.hostname/protect/webalizer ,看看输出的结果,点选后会告知你当月的各项分析结果,
登录文件分析软件:awstats 还可以透过 awstats 这个厉害到不行的 perl 的程序来进行数据分析, 由于这个软件是以 perl 来执行的,所以请确定你的 mod_perl
已经安装且 CGI 的执行权限已经启动了!
官方网站:http://awstats.sourceforge.net/ 这套软件不但可以由系统的 cron 来进行分析,甚至还提供浏览器直接以 CGI 的方式来实时更新登录档,建议直接以 crontab的方式
因为当更新分析结果时,怎么知道系统会不会很忙,如果系统在忙碌中,这套软件的分析也是很耗费系统资源的
官方网站不但提供 tarball 甚至也提供 RPM 来给使用者下载了,但是你还是要注意的,这个软件曾经因为安全性的问题导致很多网站的挂点, 所以建议你还是把这个软件的输出
结果放置在受保护的目录中,档名为 awstats-7.0-1.noarch.rpm,RPM 档案将awstats 的数据通通放置到 /usr/local/awstats 当中去了,为了自己网页设定上的方便,建议这样做
# 1. 先安装后再将 awstats 提供的 Apache 设定数据给他复制到 conf.d 下
rpm -ivh awstats-7.0-1.noarch.rpm
cp /usr/local/awstats/tools/httpd_conf /etc/httpd/conf.d/awstats.conf
vim /etc/httpd/conf.d/awstats.conf
AllowOverride AuthConfig <==这里改成这样,因为要保护!
/etc/init.d/httpd restart
awstats他释出的文件当中就有关于 Apache 的设定数据,直接将他放到 conf.d/ 那个目录下并且更名后,重新启动 Apache 就生效了,再来则是要针对我们的 WWW 登录档来设
定啦!配置文件其实是在 /etc/awstats 目录下,在该目录下有个范例文件为 awstats.model.conf,其实这个配置文件『档名』格式为:awstats.主机名.conf,请你将他复制一个新
档,然后这样做:cd /etc/awstats
cp awstats.model.conf awstats.www.conf
vim awstats.www.conf
LogFile="/var/log/httpd/access_log" <== 51行:确定登录文件所在的位置
LogType=W <== 63行:针对 WWW 的登录档分析
LogFormat=1 <==122行:Apache 的登录档格式
SiteDomain="www.centos.vbird" <==153行:主机的 hostname
HostAliases="localhost 127.0.0.1 REGEX[centos\.vbird$]"
DirCgi="/awstats" <==212行:能够执行 awstats 的目录
DirIcons="/awstatsicons" <==222行:awstats 一些小图标的目录
AllowToUpdateStatsFromBrowser=0 <==239行:不要利用浏览器来更新
Lang="CN" <==905行:重要!这是语系!
接着开始测试一下是否可以产生正确的分析资料出来?
cd /usr/local/awstats/wwwroot/cgi-bin
perl awstats.pl -config=www -update -output > index.html
# 那个 -config 后面接的就是 awstats.www.conf 的意思!会产生index.html
[root@www cgi-bin]# ls -l
awstats082011.www.txt <==刚刚才建立的重要数据文件!
awstats.pl <==就是刚刚我们下达的执行档!
index.html <==重要输出首页档案
赶紧来建立保护目录的 .htaccess 档案,这里假设你已经有密码文件了, 所以直接建立档案即可
cd /usr/local/awstats/wwwroot
vi .htaccess
AuthName "Protect awstats data"
Authtype Basic
AuthUserFile /var/www/apache.passwd
require valid-user
你输入『http://your.IP/awstats/』,就能够看到输出的图表,最后,将分析的动作规定在每天三点的时候跑,你可以这样做:
vim /usr/local/awstats/wwwroot/cgi-bin/awstats.sh
cd /usr/local/awstats/wwwroot/cgi-bin
perl awstats.pl -config=www -update -output > index.html
chmod 755 /usr/local/awstats/wwwroot/cgi-bin/awstats.sh
vim /etc/crontab
0 3 * * * root /usr/local/awstats/wwwroot/cgi-bin/awstats.sh
这个软件所在的目录务必要制作密码保护!不要随意释放出来! 甚至上面提供的一些目录的链接你都可以根据自己的主机与喜好来重新修改,会比较安全
建立联机加密网站 (https) 及防砍站脚本
http是明码传送数据,而https是利用加密传输的,加密的方法是透过SSL,这个SSL就是openssl软件来提供的一个加密函式库
SSL 所需软件与凭证档案及默认的 https
要达成让 apache 支持 https 协议的话,你必须要有 mod_ssl 这个软件才行,请自行Yum安装,并且重新启动 httpd,CentOS 6.x 也已经预设提供了 SSL 机制所需要的私钥与凭
证档案,相关软件提供的档案如下:
/etc/httpd/conf.d/ssl.conf:mode_ssl 提供的 Apache 配置文件;
/etc/pki/tls/private/localhost.key:系统私钥文件,可以用来制作凭证的!
/etc/pki/tls/certs/localhost.crt:就是加密过的凭证档!(signed certificate)
既然系统都已经帮我们搞定了,那么就让我们直接来浏览一下,看看系统默认提供的 https 是长的什么模样,输入 https://你的IP 来联机看看:因为我们这个 Apache 网站并没有
将此凭证向 CA 注册,因此就会出现上述的讯息了,这就类似 ssh 联机时,系统需要你输入『 yes 』是一样的,要接受凭证后才能够进行加密的功能,如果你确定这个网站是你
自己的可信任网站,那就按下确定。
由于这个凭证档案的建置是在第一次启动 Linux 时就安装好了凭证档,预设的凭证有效期限为 1 年,按下关闭后就能够看到实际的 https:// 提供的网站内容,这就是预设的 SSL
网站,你的重要信息可以放在这里~让数据在网络上传输更佳的安全!
拥有自制凭证的 https
建立凭证档:预设的凭证虽然已经可以让你顺利的使用 https 了,不过,凭证的有效日仅有 1 年而已,我们还是得要自制凭证才行,这个凭证的制作仅是私有WWW 网站的用
途,并没有要拿去 CA 注册,那么自制凭证需要什么步骤呢?基本上需要的流程是:
1. 先建立一把 private key 预备提供给 SSL 凭证签章要求所用;
2. 最后建立 SSL 凭证 (test certificates)。
CentOS 6.x 已经帮我们写好了Makefile 了!你先到 /etc/pki/tls/certs 这个目录下,然后直接输入 make 这个指令,就能够看到所有可行的目标动作,就可以很快速的建置好凭证
不过,因为预设的私钥文件需要加上密码才能够进行建立,所以我们还得要额外进行一下动作就是了,现在假设我们要建立的是名为 vbird 的凭证,那么底下流程中,所有的关
键词就是 vbird
# 1. 先到 /etc/pki/tls/certs 去建立一把给 Apache 使用的私钥档案:
cd /etc/pki/tls/certs
make vbird.key 输入这把密钥的密码,需要多于四个字符!
# 2. 将刚刚建立的档案中,里面的密码取消掉!不要有密码存在啦
mv vbird.key vbird.key.raw
openssl rsa -in vbird.key.raw -out vbird.key 输入刚刚的密码
rm -f vbird.key.raw <==旧的密钥档移除
chmod 400 vbird.key <==权限一定是 400 才行
# 3. 建置所需要的最终凭证档
make vbird.crt SERIAL=2011080801 可以加入日期序号
ll vbird*查看
vbird.crt <==最终凭证档!
vbird.key <==系统私钥文件
这样就建立好凭证档了!接下来就是得要去处理 ssl.conf 这个设定内容,另外,这把凭证依旧只能使用 1 年!如果你想要建立十年的凭证,那就得要修改一下 Makefile里面的内
容,将 365 改成 3650 即可,修改 ssl.conf 的内容,使用自制凭证,修改 ssl.conf 的内容也是很简单!只要修改两个地方,亦即是档案档名的地方即可
vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/pki/tls/certs/vbird.crt <==约在 105 行
SSLCertificateKeyFile /etc/pki/tls/certs/vbird.key <==约在 112 行
然后再以浏览器去浏览 https:// 的网址,就能够查阅到刚刚建立的凭证数据不过,因为我们之前已经有浏览过预设的凭证, 所以网页以及凭证都有被快取过!因此,你可能得需
要到浏览器的隐私保护的地方,将记录的凭证删除,并且将网页快取删除, 这样才能够看到最终的正确凭证数据。
将加密首页与非加密首页分离
http:// 以及 https:// 首页是一模一样的嘛!那么我的读者干嘛没事找事干, 肯定不会使用 https 的嘛,那怎办?怎么强制使用者使用 https:// 来查阅我的重要数据?很简单啊,
透过虚拟主机就好了啊!因为 SSL 模块也是默认提供了这个功能的嘛!修改会不会很麻烦呢?不会啦! 你只要将 http 及 https 的首页分离即可!我们这么假设好了:
一般明码传输的网页首页不要变更;
https:// 的首页放置到 /var/www/https/ 目录下。
所以我们得先要设定 /var/www/https 目录才行!然后,只要修改 ssl.conf 档案内容即可!整个过程可以这样处理:
# 1. 处理目录与默认的首页 index.html 档案:
mkdir /var/www/https
echo "This is https' home" > /var/www/https/index.html
# 2. 开始处理 ssl.conf 的内容啰!
vim /etc/httpd/conf.d/ssl.conf
Listen 443 <==预设的监听埠口!不建议修改
<VirtualHost _default_:443> <==就是虚拟主机的设定
DocumentRoot "/var/www/https" <==约84行,拿掉批注改掉目录名称
ServerName *:443 <==拿掉批注,并将主机名设定为 *
SSLEngine on <==有支援 SSL 的意思
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/pki/tls/certs/vbird.crt
SSLCertificateKeyFile /etc/pki/tls/certs/vbird.key
</VirtualHost>
/etc/init.d/httpd restart
大部分都使用默认值,就是 DocumentRoot 以及 ServerName 需要留意就是了,如此一来,我们就将 https, http 两个完整的分开,你的重要数据需要加密的,终于有个可靠的地
方摆放,
防砍站软件
1. 由于砍站软件会多点连续下载,因此,同一个 IP 在同一个时间内,会有相当多的联机发生;
2. 由于他是重复不断的要求联机,因此刚刚建立的联机在达成下载的目的后,会立刻死掉, 而又多生出其他的联机出来,因此,这个时候他的联机情况就变的相当的不正常了
3. 由于某些较旧的砍站软件并不会『欺骗』主机,所以,会在主机的登录文件里面记录住 Teleport 的标记
4. 既然如此的话,那么我就让我的主机每分钟去检查两个东西(1)先检查 log file ,如果有发现到相关的 Teleport 字词,就将该 IP 抵挡掉;(2)使用 netstat 来检查同一个 IP 的同
时联机,如果该联机超过一个值(例如同时有 12 个联机)的话,那么就将该 IP 抵挡掉
5. 此外,由于上面的方案可能会将 Proxy 的 Client 端也同时抵挡掉,真是可怜啊! 这个时候,这支程序就会主动的将(1)的情况的主机抵挡 3 天,至于(2)的情况则抵挡2小时!
过了该抵挡的时限后,该 IP 即可又连上我们的主机了!
以上的这样的一程序需要与 iptables 相互配合,先查阅一下防火墙内容,然后再来下载这支程序
http://linux.vbird.org/download/index.php?action=detail&fileid=47
也可以前往 Study-Area 搜寻一下
http://phorum.study-area.org/viewtopic.php?t=13643