如何使用Apache有效的架设大批量免费虚拟主机永久使用

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
想离开地球的火星人
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
在windows下搭配虚拟主机可能会涉及3个文件的操作,分别是hosts:C:\Windows\System32\drivers\etc\hosts,用于放置dns信息httpd.conf:D:\Web\Apache\conf\httpd.conf,Apache的配置文件httpd-vhosts.conf:D:\Web\Apache\conf\extra\httpd-vhosts.conf,专门用于放置配置虚拟主机的文件下面我们快速地搭建自己的虚拟主机1.如果你准备将虚拟主机的配置信息放置在httpd-vhosts.conf里面,那么需要在httpd.conf里将此文件包含进来,方法是将Include conf/extra/httpd-vhosts.conf前面的#去掉。2.1搭建基于IP的虚拟主机&VirtualHost IP地址&& &ServerName 网址.com& &DocumentRoot 所在目录绝对路径& &ErrorLog 错误日志路径(调试可用)& &#其它可选的配置&/VirtualHost&例如:&VirtualHost 127.0.0.2:80&DocumentRoot "D:/Web/Apache/htdocs/php/dede"ErrorLog "D:/Web/Apache/htdocs/php/dede/error.log"&/VirtualHost&2.2搭建基于名字的虚拟主机,在同一个IP地址上使用多个虚拟主机,除了需要用NameVirtualHost指令通知Apache用的是哪一个IP地址外,配置和基于IP地址的一样NameVirtualHost 127.0.0.1:803.在hosts中添加DNS记录127.0.0.
阅读(621)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'利用Apache快速搭建本地虚拟主机',
blogAbstract:'在安装好Apache后,可以通过两种方法来搭建本地虚拟主机,基于IP或者基于名字的虚拟主机。注意,SSL版本的Apache只支持基于IP的虚拟主机。在windows下搭配虚拟主机可能会涉及3个文件的操作,分别是hosts:C:\\Windows\\System32\\drivers\\etc\\hosts,用于放置dns信息httpd.conf:D:\\Web\\Apache\\conf\\httpd.conf,Apache的配置文件httpd-vhosts.conf:D:\\Web\\Apache\\conf\\extra\\httpd-vhosts.conf,专门用于放置配置虚拟主机的文件下面我们快速地搭建自己的虚拟主机1.如果你准备将虚拟主机的配置信息放置在httpd-v',
blogTag:'',
blogUrl:'blog/static/0',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:0,
permalink:'blog/static/0',
commentCount:4,
mainCommentCount:2,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'想离开地球的火星人',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}当前位置:&>&&>&
在本地Apache服务器配置虚拟主机站点
发布时间:
来源:服务器之家
配置localhost虚拟主机步骤
1,用记事本打开apache目录下httpd文件,找到如下模块
&&&&&&& # Virtual hosts
&&&&&&& #Include
conf/extra/httpd-vhosts.conf
去掉前面的#,这样就开启了httpd-vhosts虚拟主机文件,这时httpd.conf中的documentRoot不在起作用,需要在httpd-
vhosts.conf重新配置。
2,用记事本打开httpd-vhosts文件,配置好localhost虚拟主机,参照httpd-
vhosts文件中实例,修改成如下:
&VirtualHost *:80&
ServerAdmin webmaster@dummy-host.localhost
DocumentRoot "D:/zend/Apache2/htdocs/dorm"
ServerName localhost
ServerAlias localhost
ErrorLog "logs/dummy-host.localhost-error.log"
CustomLog "logs/dummy-host.localhost-access.log" common
&/VirtualHost&
修改配置如下:
DocumentRoot 修改为本地apache的www目录
ServerName改为localhost
3,重启Apache,发现localhost可以正常打开,配置localhost比较简单。
实例:Apache配置
虚拟主机步骤
1,方法同上,复制配置代码修改如下:
&VirtualHost *:80&
ServerAdmin
DocumentRoot D:/zend/Apache2/htdocs/dxccms
ServerName
ErrorLog "logs/dummy-host2.localhost-error.log"
CustomLog "logs/dummy-host2.localhost-access.log" common
&/VirtualHost&
2,打开host文件(C:/WINDOWS/system32/drivers/etc/hosts),增加一行代码
127.0.0.1&&&&&&
3,在浏览器中打开,如果发现如下错误403 Forbidden错误
Forbidden You don't have permission to access / on this server.
分析:这主要是目录访问权限没有设置,需要设置对目录的访问权!
4,打开httpd文件,找到如下语句
&Directory /&
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
&/Directory&
复制以上代码,并进行目录修改,把/替换为D:/zend/Apache2/htdocs/dxccms,修改virtualHost代码如下
&VirtualHost *:80&
ServerAdmin
DocumentRoot D:/zend/Apache2/htdocs/dxccms
ServerName
ErrorLog "logs/dummy-host2.localhost-error.log"
CustomLog "logs/dummy-host2.localhost-access.log" common
&Directory D:/zend/Apache2/htdocs/dxccms&
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
&/Directory&
&/VirtualHost&
在浏览器中测试如果发现还是打不开,提示如上403 Forbidden错误,修改其中的Deny from all为allow
5,重启Apache,虚拟主机配置成功!
1,目录路径,如D:/zend/Apache2/htdocs/dxccms
2,访问权限,如上Deny from all修改为allow from all
3,host文件,配置虚拟域名host指向
4,httpd文件,打开Include conf/extra/httpd-vhosts.conf模块
5,httpd-vhosts文件,配置虚拟主机
Copyright © . 版权所有如何在Apache下设置各种虚拟主机-阿里云资讯网
如何在Apache下设置各种虚拟主机
发布时间:
更新时间:
来源:网络
上传者:用户
  WWW服务器/zixun/aggregation/14840.html&&虚拟主机是指使用一台物理机器,充当多个的WWW服务器。使用WWW虚拟主机的在于,一些小规模的网站,通过跟其他网站共享台物理机器,可以减少系统的运行成本,并且可以减少管理的难度。另外,对于个人用户,也可以使用这种虚拟主机方式来建立有自己独立域名的WWW服务器。下面,我就给大家介绍一下如何在Apache下设置各种虚拟主机。
  一、Apache WWW服务器简介
  Apache WWW服务器是目前Internet上使用最广的WWW。通过灵活的配置,它几乎可以完成您想要的所有功能。
  二、Apache WWW服务器下基于IP地址的虚拟主机设置
  使用这种虚拟主机方式,要在服务器上为每个虚拟主机单独设置一个IP地址。这些IP地址可以通过增加多个网卡或者在一个网卡上设立多个IP地址来完成。有了多个IP地址后,可以采用以下两种方式之一来设置Apache:
  1、为每个虚拟主机运行一份Apache
  采用这种方式,每一份Apache程序可以以单独的用户运行,因此各个虚拟主机之间互不影响。设置这种虚拟主机时,只要为每一份Apache设置一套配置文件就可以了,唯一需要注意的是:必须使用“Listen”语句,强制每一份Apache仅仅在属于“自己”的IP地址上接收服务请求。
  :各个虚拟主机之间互不干扰,安全性高。
  缺点:占用系统资源较多。
  2、多个虚拟主机共享同一份Apache
  采用这种方式,各个虚拟主机共享同一份Apache,因此各个虚拟主机之间有一定的影响,尤其是执行CGI程序时,可能会带来一些严重的安全问题。设置这种虚拟主机时,只要为每一个虚拟主机设置类似如下的信息即可:
  DocumentRoot /home/company1
  /VirrualHost;
  优点:占用系统资源比上一种方式少。
  缺点:安全性低,每个虚拟主机仍然需要占用一个IP地址。
  三、Apache WWW服务器下简单的基于名字的虚拟主机设置
  这种方式下,各个虚拟主机共享同一份Apache,因此有CGI时,安全性也不高。设置这种虚拟主机时,只要为每一个虚拟主机设置类似如下的信息即可
  NameVirtualHost 111.222.33.44; 在这个IP地址接收虚拟主机的服务
  VirtualHost 111.222.33.44;
  DocumentRoot /www/company1
  /VirtualHost;
  VirtualHost 111.222.33.44;
  DocumentRoot /www/company2
  /VirtualHost;
  优点:只要一个IP地址就可以提供的虚拟主机服务。
  缺点:安全性差。维护这些虚拟主机时需要更改配置文件,并且需要Apache进程才能起作用。因此不适合进行大规模的虚拟主机服务。
本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:zixun-group@ 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。
 网站结构是SEO的基础,要搭建利于 SEO的网站结构需要了解搜索引擎(百度)的SEO规则,这里需要讨论哪种布局对搜索引擎最友好,也可以看成搜索引擎喜欢那些布局,搜索引擎制定有哪些规则。   代码优化   ① flash, asp, html各如何优化   全站flash 的站要针对网站头部进行进一步优 化,Flash 代码只需在代码外设置内页入口   asp 代码会被搜索引擎收录但是收录效...
下个星期一开始就要接手一个新的网站,整个公司就我一个人做SEO,公司网站是同城送餐网,也是我上一篇文章说到的那个公司,老板主动加我QQ,聊了1个多小时,让我过去帮忙,工资开的不低,我就想去试试。SEO就我一个,我肯定是要负责整个网站的运营了,要为提高网站的流量、排名、转化率制定个计划,下面我就说说我自己对网站的整改和计划。   网络营销和推广方法在上篇《送餐网站推广营销方案的设定》已经说过了...
相信很多医疗网站,都有过策划专题的经验。而且,随着现在医疗网站的发展来说,一个有吸引力的专题对于网站是非常有好处的,对于医疗网站来说,专题内容策划占到了很重要的地位。那么,医疗网站专题策划需要做哪些方面?针对我做过的专题,来与大家交流下。   第一,医疗网站专题策划的主题。   网络新闻专题适合于表现各种重大新闻题材,那么,对于医疗网站来说,会以一些重大事件或者是高搜索量词做一个专题。下面,...
 12月4日消息,以“创新、融合、发展”为主题的第二届中国地方与行业网站峰会将于-5日在杭州海外海国际会展中心举行,3000多名来自互联网各界的从业人士、站长、媒体与嘉宾参加了本次盛会,admin5站长网作为大会合作媒体参与了全程报道,以下是化龙巷总经理钱钰的演讲内容。&   大家好,在这里首先感谢大会的主办方阿里集团和PHPWIND给大家提供了这么好的交流和分享...
现在准备做网站大体上有两种犹豫,一种是做一个大而全的网站犹豫,另一个是选择不好细分的行业网站犹豫,不过大部分的草根站长都把目标选择在小而细的行业型的网站,具体要选择什么样的行业那就要看草根站长个人的兴趣爱好了,最好是自己对这个行业非常熟悉的,这样才能够把这个小儿细的行业网站做到专业和极致!才能够体现出网站的差异化!   那么什么是网站细分呢?简单的说就是对目标访问群体进行具体的定位,做好这一...
 其实做这个网站的初衷也就是一群有点小抱负的几个80后,聚集在一起每个人都小激动了一把,想把自己现在做的二手房做强做大,才决定成立合肥房产网,虽然开始只是兴趣使然,但直到现在大家目标都很明确,要做就坚持做到最大最强。当时大家也没管对手有多么强大,自己能否击败他们,或许就是这种“初生牛犊不怕虎”的大无畏的自信,才让我们一路走来。好像扯远了,言归正传,现在我就总结下我们的门户网站在运营时所积累一...
若您要投稿、删除文章请联系邮箱:zixun-group@,工作人员会在5个工作日内回复。
售前咨询热线
服务与支持
账号与支持
关注阿里云
InternationalApache 2.0手册中文版翻译项目 [本文译者:
大容量虚拟主机的动态配置 - Apache HTTP服务器
& 大容量虚拟主机的动态配置
本文档描述如何使用 Apache 1.3 有效的架设大容量的虚拟主机服务器。
如果你的配置文件 httpd.conf 中包含类似下面的许多
&VirtualHost& 部分,并且其中的内容都大致相同的话,
你应该会对这里所要讲的技术比较感兴趣。
NameVirtualHost 111.22.33.44
&VirtualHost 111.22.33.44&
ServerName
DocumentRoot
/www/hosts/www./docs
ScriptAlias
/www/hosts/www./cgi-bin
&/VirtualHost&
&VirtualHost 111.22.33.44&
ServerName
DocumentRoot
/www/hosts/www./docs
ScriptAlias
/www/hosts/www./cgi-bin
&/VirtualHost&
# blah blah blah
&VirtualHost 111.22.33.44&
ServerName
DocumentRoot
/www/hosts/www./docs
ScriptAlias
/www/hosts/www./cgi-bin
&/VirtualHost&
最基本的思想是用动态的机制来实现所有这些静态的
&VirtualHost& 配置。这样做有许多优点:
配置文件变小,使得 Apache 可以更快的启动,同时消耗更少的内存。
添加一个虚拟主机,应该只是简单的在文件系统中创建合适的目录,
以及配置相关的 DNS 信息,并且无需重新启动 Apache。
主要的缺点是你无法针对每个虚拟主机用户使用不同的日志文件。
然而,如果真的在配置有大量虚拟主机的服务器上记录不同的日志文件的话,
很有可能会达到操作系统所允许的最大文件描述符(file descriptors)的数量。
更好的办法是把日志写到管道(pipe)或者先入先出(fifo)的堆栈,
并启用其他的进程来分发所得到的日志信息给用户(同时也可以做一些历史纪录的统计等等)。
一个虚拟主机有两部分来定义:一个是它的 IP 地址,
还有一个是 HTTP 请求中 Host: 头的内容。
动态大容量虚拟主机的技术,
是基于自动在所要返回的文件的路径中插入相关信息的想法而实现的。
使用 可以很容易的实现,
但如果你的 Apache 版本低于 1.3.6 ,则你必须使用 。
两者在默认情况下都不启用;
要使用他们,必须在配置和编译 Apache 的阶段声明启用(enable)。
我们需要做很多伪装,才能使动态虚拟主机看起来像普通情况。
最重要的一点是 Apache 使用虚拟主机名字(Server Name)来生成自我参考(self-referential)
的 URLs 等等信息。这是用 ServerName 指令来配置的,
并且可以通过环境变量 SERVER_NAME 传递给 CGI 脚本。
在运行时所实际使用的值是由指令
的设置情况来控制的。当 UseCanonicalName Off 时,
虚拟主机名字(server name)取自请求中的 Host: 头的内容。
当 UseCanonicalName DNS 时,则通过 DNS 反解析虚拟主机的IP 地址得到主机名字。
以前的做法是用基于名称的动态虚拟主机,近来常用基于 IP 地址的虚拟主机设置。
如果 Apache 无法决策虚拟主机名字,则可能是没有 Host: 头信息或者 DNS 解析失败,
遇到这样的情况,Apache 使用配置 ServerName 时所填写的主机名字。
这是 httpd.conf 文件中,完成和上文
部分所提到的虚拟主机一样效果的配置方法,但这里采用了 mod_vhost_alias 。
# 从 Host: 头中取得服务器名字 Server Name
UseCanonicalName Off
# 这里的日志格式,可以在将来通过第一个参数域来分隔不同的虚拟主机的日志
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon
# 在返回请求的文件名的路径中包含进服务器名字: server name
VirtualDocumentRoot /www/hosts/%0/docs
VirtualScriptAlias
/www/hosts/%0/cgi-bin
将 UseCanonicalName Off 的配置改为 UseCanonicalName DNS
即可实现基于 IP 地址的虚拟主机。而在文件路径中所要插入的服务器名字(server name)
则通过虚拟主机的 IP 地址解析而得。
这里对上面的系统作了一点调整,便可作为 ISP 的个人主页服务器。
我们使用了略微复杂的方法,从服务器名字(Server Name)中提取子字符串,
并插入到文件路径中。在这个例子中,www. 的文档将在
/home/user/ 中定位。并对所有虚拟主机使用单个 cgi-bin 目录。
# 所有之前的准备事项和上面一样,然后
# 在文件路径中包含服务器名字(server name)
VirtualDocumentRoot /www/hosts/%2/docs
# 单个 cgi-bin 目录
ScriptAlias
/www/std-cgi/
更复杂的关于 VirtualDocumentRoot 的设置,可以查阅 。
更复杂的设置,应该使用 Apache 的 &VirtualHost&
指令来管理各种虚拟主机配置的作用域。例如,你可以用一个 IP 地址来给个人主页客户使用,
同时用下面的配置提供给商业客户使用。自然的,
这两者通过运用 &VirtualHost&结合到一起。
UseCanonicalName Off
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
&Directory /www/commercial&
Options FollowSymLinks
AllowOverride All
&/Directory&
&Directory /www/homepages&
Options FollowSymLinks
AllowOverride None
&/Directory&
&VirtualHost 111.22.33.44&
CustomLog logs/mercial vcommon
VirtualDocumentRoot /www/commercial/%0/docs
VirtualScriptAlias
/www/commercial/%0/cgi-bin
&/VirtualHost&
&VirtualHost 111.22.33.45&
ServerName www.
CustomLog logs/access_log.homepages vcommon
VirtualDocumentRoot /www/homepages/%0/docs
ScriptAlias
/cgi-bin/ /www/std-cgi/
&/VirtualHost&
中说过,转为基于 IP 地址的虚拟主机设置很容易做到。
但不幸的是,那种做法并不高效,因为这样会在每次处理请求时,需要查询 DNS 。
通过在文件系统中包含IP 地址的做法可以避免这样的问题。这样一来,
免去了和服务器名字的关联,在日志记录中也一样可以用 IP 来分离不同日志。
Apache 将不会为了确定服务器名字(server name)而去做 DNS 查询。
# 从 IP 地址反解析得到服务器名字(server name)
UseCanonicalName DNS
# 在日志中包含 IP 地址,便于后续分发
LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon
# 在文件路径中包含 IP 地址
VirtualDocumentRootIP /www/hosts/%0/docs
VirtualScriptAliasIP
/www/hosts/%0/cgi-bin
上面的例子基于 mod_vhost_alias ,但它是在版本 1.3.6 之后才出现的。
如果你的版本比较老,可以通过使用 mod_rewrite 来达到相同的目的,
如下所示。但只能是基于 Host: 头方式的虚拟主机。
此外还须注意日志方面的问题。Apache 1.3.6 是第一个支持 %V日志格式指令的版本,
在版本 1.3.0 - 1.3.3 中,%v 选项做和 %V 一样的事情;
而在版本 1.3.4 中没有等价指令。在所有的这些版本中,指令 UseCanonicalName
可以出现在 .htaccess 文件中,这意味着客户的设置可能会导致日志记录紊乱。
所以最好的做法是使用 %{Host}i 指令,它可以直接记录 Host: 头;
注意,这样可能在末尾包含 :port ,而使用 %V 则不会这样。
这里的例子摘自 httpd.conf ,效果等同于 中的情况。
前半部分和上面的例子大致相似,只是为了后向兼容 mod_rewrite 作了适当修改;
后半部分配置 mod_rewrite 来做实际的工作。
有些特别的地方需要注意:默认情况下,mod_rewrite 在所有其他 URI
转换模块 (mod_alias 等)之前运行,所以如果使用这些模块的话,
mod_rewrite 必须作相应的调整。同时,我们还要为每个动态虚拟主机变些戏法,
使之等效于 ScriptAlias。
# 从 Host: 头获取服务器名字
UseCanonicalName Off
# 可分割的日志
LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon
&Directory /www/hosts&
# ExecCGI is needed here because we can't force
# CGI execution in the way that ScriptAlias does
Options FollowSymLinks ExecCGI
&/Directory&
# 接下来是关键部分
RewriteEngine On
# a ServerName derived from a Host: header may be any case at all
RewriteMap
int:tolower
## 首先处理普通文档:
# 允许变名 /icons/ 起作用 - 其他变名类同
RewriteCond
%{REQUEST_URI}
# 允许 CGIs
RewriteCond
%{REQUEST_URI}
!^/cgi-bin/
# 开始“变戏法”
RewriteRule
/www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1
## 现在处理 CGIs - 我们需要强制使用一个 MIME 类型
RewriteCond
%{REQUEST_URI}
^/cgi-bin/
RewriteRule
/www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1
[T=application/x-httpd-cgi]
这里的配置完成和相同的工作。
RewriteEngine on
RewriteMap
int:tolower
# 允许 CGIs 工作
RewriteCond
%{REQUEST_URI}
!^/cgi-bin/
# 检查 hostname 正确与否,之后才能使 RewriteRule 起作用
RewriteCond
${lowercase:%{SERVER_NAME}}
^www\.[a-z-]+\.isp\.com$
# 将虚拟主机名字廉洁到 URI 的开头
# [C] 表明本次重写的结果将在下一个 rewrite 规则中使用
RewriteRule
${lowercase:%{SERVER_NAME}}$1
# 现在创建实际的文件名
RewriteRule
^www\.([a-z-]+)\.isp\.com/(.*) /home/$1/$2
# 定义全局 CGI 目录
ScriptAlias
/www/std-cgi/
这样的布局利用了 mod_rewrite 的高级特性,
在独立的虚拟主机配置文件中转换。如此可以更为灵活,但需要较为复杂的设置。
vhost.map 文件包含了类似下面的内容:
/www/customers/1
/www/customers/2
/www/customers/N
http.conf 包含了:
RewriteEngine on
RewriteMap
int:tolower
# 定义映像文件
RewriteMap
txt:/www/conf/vhost.map
# 和上面的例子一样,处理变名
RewriteCond
%{REQUEST_URI}
RewriteCond
%{REQUEST_URI}
!^/cgi-bin/
RewriteCond
${lowercase:%{SERVER_NAME}}
# 这里做基于文件的重新映射
RewriteCond
${vhost:%1}
RewriteRule
%1/docs/$1
RewriteCond
%{REQUEST_URI}
^/cgi-bin/
RewriteCond
${lowercase:%{SERVER_NAME}}
RewriteCond
${vhost:%1}
RewriteRule
%1/cgi-bin/$1
&nbsp项目维护者:
[本文译者:為取得較佳瀏覽結果,請愛用
瀏覽本網頁
最近更新日期:
  20.1.1
  20.1.2
  20.1.3
  20.1.4
  20.1.5
  20.2.1
  20.2.2 :
  20.2.3 : ,
  20.2.4
  20.2.5 : ,
  20.2.6
  20.2.7
  20.3.1 :
  20.3.2
  20.3.3
  20.3.4
  20.3.5
  20.3.6
  20.3.7
  20.4.1
  20.4.2
  20.4.3
  20.4.4
  20.5.1
  20.5.2
  20.5.3
  20.5.4
20.1 WWW 的簡史、資源以及伺服器軟體
你知道網路為什麼會這麼流行嗎?其實都是 WWW 造成的啦。早在 1993 年左右,鳥哥初次接觸到網路,
當時的網路較熱門的大概就是一些資源下載的 FTP 網站以及很多文字熱烈討論的 BBS 站了。
資料雖然豐富,不過,總是覺得少了點什麼。後來上了研究所,為了課業需要,
經常連上台灣的學術網路 (TANET) 進行一些學術資料的檢索,當時大約是 1996 年左右。
因為上網就是要找資料而已,所以就慢慢的很少使用網路了。
過了幾年後,再次使用圖形介面的作業系統,竟然發現只要點幾個小按鈕,就會有很多網路上花花綠綠的文字與圖案,
有的網站甚至提供影音的特效,當時真是相當的訝異!不過,由於圖形影像的視覺方面要比 BBS
純文字的資料吸引人,自然造成很多人喜歡流連在網際網路上,人潮多當然就有商機!由於奇貨可居,才有後來
90 年代末期的瀏覽器大戰,這個商業大戰也造成後來 WWW 標準不被某些瀏覽器所支援的後果。
這些年由於搜尋引擎、個人網誌 (blog)、社群網站 (例如 facebook 等)、智慧手機等的流行,又將網際網路推向另一個新境界!啊!
要學的東西真是很多啊~@_@。底下讓我們來瞭解瞭解什麼是 WWW 以及他所需要的伺服器軟體,還有一些瀏覽器相關的資訊吧!
20.1.1 WWW 的簡史、HTML
與標準制訂 (W3C)
網際網路 (TCP/IP) 會這麼熱門,主要是 80 年代的 email 以及 90 年代之後的 WWW 服務所造成的!尤其是 WWW 這個玩意兒。
WWW 是 World Wide Web 的縮寫,其中 Web 有廣播網的意思存在,
所以簡稱為全球資訊網的就是了。WWW 可以結合文字、圖形、影像以及聲音等多媒體,並透過可以讓滑鼠點擊的超連結
(Hyperlink) 的方式將資訊以 Internet 傳遞到世界各處去。
與其他的伺服器類似的,你要連結上 WWW 網站時,該網站必需要提供一些資料,
而你的用戶端則必需要使用可以解析這些資料的軟體來處理,那就是瀏覽器啦!簡單的來說,你可以這樣瞧一瞧
WWW server/client 的相關性:
圖 20.1-1、WWW 伺服器與用戶端瀏覽器之間的連線相關性
從上面的圖示當中,我們大概可以得到一些觀念:
WWW 伺服器不但需要一個可讓用戶端瀏覽的平台,還需要提供用戶端一些資料才行!
伺服器所提供的最主要資料是超文件標籤語言 (Hyper Text Markup Language, HTML)、多媒體檔案
(圖片、影像、聲音、文字等,都屬於多媒體或稱為超媒體)。
HTML 只是一些純文字資料,透過所謂的標籤 (&tag&) 來規範所要顯示的資料格式;
在用戶端,透過瀏覽器的對 HTML 以及多媒體的解析,最後呈現在使用者的螢幕上。
HTML 的格式
如上所提到的相關資訊,我們知道伺服器端需要提供用戶端一些資料,而這些資料其實主要都以 HTML
的格式來呈現的。那麼什麼是 HTML 呢?我們拿鳥哥的網站來看一下好了。你可以使用任何一個瀏覽器連結到
,然後在其上的頁面上按下滑鼠右鍵,
選擇察看原始碼,你就能發現該網頁是如何寫成的了。
&!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&
&html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-TW" lang="zh-TW"&
....一些此頁面的資訊解釋的標頭資料,例如 title 與整體化設計等等....
&body style="margin:0; padding:0"&
....在瀏覽器顯示的畫面中,實際放置在瀏覽器上面的資料則寫於此....
HTML 之所以被稱為標籤語言就如同上面的表格所示,他是由很多 &tag& 所組成的,除了 &!DOCTYPE&
的部分是在宣告底下的語法應該用第幾版的 HTML 解析之外,HTML 主要是由
&html& &/html& 所包含起來, 而在其中又分為兩大區塊,一個是與標頭有關的 &head& &/head& 區塊,
包括該網頁所使用的編碼格式與抬頭等等。另一部份則是 &body& &/body&
所含有的實際網頁內容資料啦。
HTML 不在本文的介紹內,你可以在市面上找到很多相關的書籍。而傳統的 HTML 4
實際上已經不足以滿足某些美工人員及程式設計師的需求,因此,目前還有改善 HTML 顯示的 CSS 樣式表,
可以讓很多程式互相取用的 XML,還有最新一代的 HTML5 等等,都值得參考喔。
WWW 所用的協定及 WWW 伺服器簡史--就是講古時間
知道了 WWW 的 server/client 架構後,再來我們要討論的是,那 WWW 是怎麼來的啊?
伯納斯-李 (Tim Berners-Lee) 在 1980 年代為了更有效率的讓歐洲核子物理實驗室的科學家可以分享及更新他們的研究成果,
於是他發展出一個超文件傳輸協定 (Hyper Text Transport Protocol, HTTP)。
如同前面提到的,在這個協定上面的伺服器需要軟體,而用戶端則需要瀏覽器來解析伺服器所提供的資料。
那麼這些軟體怎麼來的?
為了讓 HTTP 這個協定得以順利的應用,大約在 90 年代初期由伊利諾大學的國家超級電腦應用中心
開發出伺服器 HTTPd (HTTP daemon 之意)。HTTPd 為自由軟體,所以很快的領導了 WWW 伺服器市場。
後來網景通訊 (Netscape) 開發出更強大的伺服器與相對應的用戶端瀏覽器,那就是大家曾經熟悉的 Netscape
這套軟體啦。這套軟體分為伺服器與瀏覽器,其中瀏覽器相對便宜,不過伺服器可就貴的嚇人了。
所以,在伺服器市場上主要還是以 HTTPd 為主的。
後來由於 HTTPd 這個伺服器一直沒有妥善的發展,於是一群社群朋友便發起一個計畫,這個計畫主要在改善原本的 HTTPd
伺服器軟體,他們稱這個改良過的軟體為 Apache,取其『一個修修改改的伺服器 (A patch
server)』的雙關語! ^_^!這個 Apache 在 1996 年以後便成為 WWW 伺服器上市佔率最高的軟體了
瀏覽器 (browser) 大戰與支援的標準
雖然 WWW 越來越重要,但相對的來說,用戶端如果沒有瀏覽器的話那麼他們當然就無法去瀏覽 WWW
伺服器所提供的資料。為了搶佔瀏覽器的市佔率,於是在 90 年代末期微軟將 IE
瀏覽器內建在 Windows 作業系統內,此一決定也讓當時相當廣泛使用的 Netscape 瀏覽器 (Navigator) 市佔率急速下降。
後來網景公司在 1998 年左右將瀏覽器的原始碼部分開放成為自由軟體,採用 Mozilla 通用授權 (MPL) 。
Mozilla ()
這個計畫所開發的軟體可不止瀏覽器而已,還包括郵件處理軟體及網頁編輯軟體等等。
當然啦,其中最出名的就是瀏覽器軟體『火狐狸 (firefox)』啦!那這玩意兒與 IE 有啥不同?
由於 IE 是整合在 Windows 作業系統核心內,
加上改版的幅度太慢,甚至 IE 使用的 HTML 標準語法解析行為都是微軟自訂的標準,
並不全然符合網際網路上的標準規範 (W3C, ),導致伺服器端所提供的資料並無法在所有的瀏覽器上都顯示出相同的樣式,
而且用戶端也容易受到網路攻擊。
firefox ()
的發展就標榜小而美,因此程式相當的小,所以執行效能上面非常的快速,此外,對於超文件的解析上面,
firefox 主要依據 w3c 所制訂的標準來發展的,所以任何以 w3c 的標準開發的網站,在 firefox
上面就能夠得到設計者所希望的樣式!目前 firefox 已經針對市面上最常見到的 Windows/Linux/Unix
等作業系統來進行支援,大家可以多多使用喔!^_^
而為了加快 javascript 的程式運作,並且加快瀏覽的速度,Google 自己也推出一個瀏覽器,稱為 chrome 瀏覽器,
這個瀏覽器就如 google 的搜尋引擎一般,強調的就是快速!快速!更快速!因此,如果你想要瀏覽器不要花花綠綠,
就是風格簡約,強調速度感,那麼 google 的這個 chrome 自由軟體瀏覽器也可以玩玩的!
由上面的介紹我們可以稍微歸納一下:
WWW 是依據 HTTP 這個協定而來的,分為伺服器端與用戶端;
Apache 是一個伺服器端的軟體,主要依據 NCSA 的 HTTPd 伺服器發展而來,為自由軟體;
Mozilla 是一個自由軟體的開發計畫,其中 firefox 瀏覽器是相當成功的作品。
在撰寫自己的網頁資料時,盡量使用 W3C 所發佈的標準,這樣在所有的瀏覽器上面才能夠順利的顯示出你想要的樣子。
20.1.2 WWW
伺服器與瀏覽器所提供的資源設定 (URL)
現在我們知道 WWW 伺服器的重點是提供一些資料,這些資料必需要是用戶端的瀏覽器可以支援顯示才行。
那麼這些資料是什麼類型啊?很簡單啊,當然大部分就是檔案囉。如此說來,我們必需要在伺服器端先將資料檔案寫好,
並且放置在某個特殊的目錄底下,這個目錄就是我們整個網站的首頁了!
一般來說,這個目錄很可能是在 /var/www/html/ 或者是 /srv/www/。我們的 CentOS 預設在 /var/www/html 喔。
那麼瀏覽器如何取得這個目錄內的資料呢?你必需要在瀏覽器的『網址列』輸入所需要的網址才行。
這個網址就對應到 WWW 伺服器的某個檔案檔名就是了。不過,現今的瀏覽器功能實在很多,他不只可以連上
WWW ,還可以連上類似 FTP 之類的網路通訊協定。所以你得要在網址列輸入正確的網址,這個網址包括這樣:
&協定&://&主機位址或主機名稱&[:port]/&目錄資源&
網址列的意義
上頭就是我們常常聽到的 URL (Uniform Resource Locator) 啦!以斜線作為分段,
它可以這樣被解釋:
瀏覽器比較常支援的協定有 http, https, ftp, telnet 等等,還有類似 news, gopher 等。
這個協定在告知瀏覽器『請你利用此一協定連接到伺服器端』的意思。舉例來說,如果你下達:
這表示瀏覽器要連結到
崑山科大的 http (亦即 port 80) 的意思。如果是
則代表連結到 ftp (port 21) 啦!
因為使用的協定不同,所以當然回應的資料也不相同的。不過,
萬一對方伺服器的埠口啟動在非正規的埠號,例如將 http 啟動在 port 81 時,那你就得要這樣寫:
http://hostname:81/ 。
主機位址或主機名稱:
就是伺服器在網際網路所在的 IP 位置。如果是主機名稱的話,當然得要透過名稱解析器囉!
一般來說,雖然使用 IP 就能夠架設 WWW 網站,不過建議你還是申請一個好記又合法的主機名稱比較好!
目錄資源::
剛剛不是提到首頁的目錄嗎?在首頁目錄下的相對位置就是這個目錄資源啦。
舉例來說,鳥哥的網站 www 資料放置在我主機的 /var/www/html/ 當中,所以說:
http://linux.vbird.org --& /var/www/html/
http://linux.vbird.org/linux_basic/index.php --& /var/www/html/linux_basic/index.php
另外,通常首頁目錄底下會有個特殊的檔案名稱,例如 index.html 或 index.??? 等。舉例來說,如果你直接按下:
http://linux.vbird.org 會發現其實與 http://linux.vbird.org/index.php 是一樣的!
這是因為 WWW 伺服器會主動的以該目錄下的『首頁』來顯示啦!
所以啦,我們的伺服器會由於瀏覽器傳來的要求協定不同而給予不一樣的回應資料。那你瞭解到網址列的意義了嗎?
WWW server/client 間資料傳輸的方式
如果瀏覽器是以 http://hostname 的型態來向伺服器要資料時,那麼瀏覽器與伺服器端是如何傳遞資料的呢?
基本上有這幾種方法:
就是瀏覽器直接向 WWW 伺服器要求網址列上面的資源,這也是最常見的。此外,使用 GET
的方式可以直接在網址列輸入變數喔。舉例來說,鳥哥的討論區有一篇提問的智慧,
他的網址是:『』,發現那個 ?t=96 了嗎?
t 就是變數, 96 就是這個變數的內容。如果你將問號後面的資料拿掉時,瞧瞧會出現什麼後果?
這麼說,你可以明白 GET 的處理了吧?
這也是用戶端向伺服器端提出的要求,只是這個要求裡面含有比較多的資料就是了。
舉例來說,討論區裡面不是常常有留言的選項嗎,如果你選擇留言的話不是會在瀏覽器冒出一個框框讓你填入資料嗎!
當按下傳送後,那些框框內的資料就會被瀏覽器包起來傳送至 WWW 伺服器了。
POST 與 GET 不相同喔,
GET 可以在網址列取得用戶端所要求的變數,不過 POST 就不是使用網址列的功能了。
伺服器端回應給 Client 端的一些資料檔頭而已;
伺服器端回應給 Client 端的一些允許的功能與方法;
刪除某些資源的舉動。
常見的是 GET 這個項目啦!如果有大量資料由用戶端上傳到 WWW 伺服器端時,才會使用到 POST 這個項目。
你還是得需要注意一下這些舉動,因為後續的登錄檔分析內容都是使用這種動作來分析的呦!
20.1.3 WWW 伺服器的類型:
系統、平台、資料庫與程式 (LAMP)
以目前的網路世界來說,市佔率較高的 WWW 伺服器軟體應該是 Apache 與 IIS 這兩個玩意兒,
Apache 是自由軟體,可以在任何作業系統上面安裝的,至於 IIS 則是 Windows 家族開發出來的,
僅能在 Windows 作業系統上面安裝與執行。由於作業系統平台不一樣,所以其上安裝的軟體當然也不相同。
底下就讓我們來聊一聊目前網站的一些特色吧!
僅提供使用者瀏覽的單向靜態網頁
這種類型的網站大多是提供『單向靜態』的網頁,或許有提供一些動畫圖示,但基本上就僅止於此啦!
因為單純是由伺服器單向提供資料給客戶端,Server 不需要與 Client 端有互動,所以你可以到該網站上去瀏覽,
但是無法進行進行資料的上傳喔!目前主要的免費虛擬主機大多是這種類型。所以,你只要依照 HTML
的語法寫好你的網頁,並且上傳到該網站空間上,那麼你的資料就可以讓大家瀏覽了!
提供使用者互動介面的動態網站
這種類型的網站可以讓伺服器與使用者互動,常見的例如討論區論壇與留言版,包括一些部落格也都是屬於這類型。
這類型的網站需要的技術程度比較高,因為他是藉由『網頁程式語言』來達成與使用者互動的行為,
常見的例如 PHP 網頁程式語言,配合 MySQL 資料庫系統來進行資料的讀、寫。整個互動可以使用下圖來說明:
圖 20.1-2、動態網站的網頁程式語言與資料庫介面
這就是所謂的伺服器端工作任務介面 (Server Side Include,
SSI),因為不論你要求的資料是什麼,其實都是透過伺服器端同一支網頁程式在負責將資料讀出或寫入資料庫,
處理完畢後將結果傳給用戶端的一種方式,變動的是資料庫內的資料,網頁程式其實並沒有任何改變的。這部份的網頁程式包括
PHP, ASP, Perl...很多啦!
另外一種互動式的動態網頁主要是在用戶端達成的!舉例來說,我們可以透過利用所謂的 Java scripts 這種語法,
將可執行的程式碼 (java script) 傳送給用戶端,用戶端的瀏覽器如果有提供 java script 的功能,
那麼該程式就可以在用戶端的電腦上面運作了。由於程式是在用戶端電腦上執行,
因此如果伺服器端所製作的程式是惡意的,那麼用戶端的電腦就可能會遭到破壞。
這也是為啥很多瀏覽器都已經將一些危險的 java script 關閉的原因。
另外一種可在用戶端執行的就是 flash 動畫格式,在這種動畫格式內還可以進行程式設計,
因此用戶端只要擁有可以執行 flash 動畫的軟體,那就可以利用這個軟體來達到互動式的對談。
這些都算是動態網站所提供的功能喔!
從上面的說明你可以知道動態網站是目前比較熱門的,像是近兩年來如同雨後春筍一般冒出來的個人部落格 (blog)
就是很經典的動態網站之一。而由 我們也知道要做成這樣的動態網站你必需要有:
支援的作業系統:讓所需要的軟體都能夠安裝執行啊;
可運作的 WWW 伺服器:例如 Apache 與 IIS 等 WWW 伺服器平台軟體;
網頁程式語言:包括 perl, PHP, JSP, CGI, ASP 等等都算是啦!
資料儲存之資料庫系統:包括 MySQL, MSSQL, PostgreSQL 以及甲骨文 (Oracle) 等等。
LAMP 平台的說明
在整個平台設計上面,目前常見的有兩大系統,一個是 Linux
作業系統上面,搭配 Apache + MySQL + PHP 等而達成,這個系統被稱為 LAMP。另一個則是微軟的 IIS + MSSQL +
ASP (.NET) 伺服器。在能見度與市佔率方面,應該還是以 LAMP 為主吧!在 LAMP 裡面除了 Linux
之外,其他三個小東西就讓我們來談談先:
1995 年以前就有很多的 WWW 伺服器軟體,其中以 HTTPd 佔有率較高。
後來 HTTPd 經過多次臭蟲的修訂後,才在 1995 年後發佈 Apache (A patch server) 的啦!這東西就是主要提供 WWW
的伺服器平台,後面談到的 PHP 必須要在這玩意兒上才能運作!
傳統的檔案讀取是很麻煩的,如果你只要讀取該檔案當中的一小部分,系統還是會將整個檔案讀出來,
若又有多人同時讀取同一個檔案時,那就會造成效能與系統上的問題,所以才會有資料庫系統的推出。
資料庫其實是一種特殊格式的檔案,這種檔案必需要透過特殊介面 (資料庫軟體)
來進行讀寫。由於這個特殊介面已經針對資料的查詢、寫入做過最佳化設計,
因此很適合多人同時寫入與查詢的工作。
針對資料庫的語法有所謂的 SQL 標準語法,任何根據這種資料檢索語法發展出來的資料庫,就稱為 SQL 資料庫。
比較知名的自由軟體資料庫系統有 MySQL 及 PostgreSQL ,其中 MySQL 的使用率又比較高一些。
MysQL 可以透過網頁程式語言來進行讀寫的工作,因此很適合例如討論區、論壇等的設計,
甚至很多商業網站的重要資料也是透過 MySQL 這個資料庫軟體來存取的呢!
按照官方的說法來說,PHP 是一個工具,他可以被用來建立動態網頁,PHP 程式碼可以直接在 HTML 網頁當中嵌入,
就像你在編輯 HTML 網頁一樣的簡單。所以說, PHP 是一種『程式語言』,這種程式語言可以直接在網頁當中編寫,
不需要經過編譯即可進行程式的執行。由於具有:自由軟體、跨平台、容易學習及執行效能高等優點,
目前是很熱門的一個設計網頁的咚咚喔!你可以在市面上找到很多相關的書籍來參考的。
事實上,如果光學會 Linux 與架站,對你自己的競爭力還是不夠的,可以的話,多學一些 MySQL 的 SQL 語法,以及類似
PHP, JSP 等跨平台的網頁程式語言,對你的未來是很有幫助的喔!
20.1.4 https: 加密的網頁資料 (SSL)
及第三方公正單位
關於 HTTP 這個傳輸協定當中,你必需要知道的是:『這個傳輸協定傳輸資料是以明碼傳送的』,
所以你的任何資料封包只要被監聽竊取的話,那麼該資料就等於是別人的啦!那想一想,
你有過上線刷卡的經驗嗎?上線刷卡只要輸入你信用卡的卡號與相關的截止日期後,就能夠進行交易了。
如果你的資料在 Internet 上面跑時是明碼的情況下,真要命!那你的信用卡不就隨時可能會被盜用?
雖然大多數 Internet 上面的 WWW 網站所提供的資料是可以隨意瀏覽的,不過如同上面提到的,
一些物流交易網站的資料以及關於你個人的重要機密資料當然就不能這樣隨意傳送啦!
這個時候就有需要用到 https://hostname 這種連線的方式啦!這種方式是透過
SSL 加密的機制喔!
Secure Socket Layer (SSL)
還記得我們在當中介紹過他連線的機制吧?
就是利用非對稱的 key pair (Public + Private kye) 來組成金鑰,然後透過公鑰加密後傳輸,
傳輸到目標主機後再以私鑰來解密,如此一來資料在 Internet 上面跑就以加密的方式,
想當然爾,這些資料自然就比較安全啦!SSL 就是利用在 WWW 傳輸上面的加密方式之一啦!
當瀏覽器端與 WWW 伺服器端同時支援 SSL 的傳輸協定時,在連線階段瀏覽器與伺服器就會產生那把重要的金鑰!
產生金鑰後就能夠利用瀏覽器來傳送與接收加密過的重要資料啦!要達成這樣的機制,
你的 WWW 伺服器必需要啟動 https 這個重要的傳輸協定,而瀏覽器則必需要在網址列輸入 https://
開頭的網址,那兩者才能夠進行溝通與連線。要注意的是,在某些很舊的瀏覽器上面是不支援 SSL 的,
所以在那些舊的瀏覽器上就無法達成 https 的連線啦!
Certificate Authorities (CA)
想一想 SSL 這個機制有什麼問題?他的問題就是:『那把 Public key
是伺服器產生且任何人都能取得的』!這是什麼問題?因為 public key 可讓任何人取得,
若被釣魚網站取得並且製作一個很類似你網路銀行的網站,並且騙你輸入帳密,要命了!因為你不知道該網站是詐騙集團製作的,
以為 https 就是安全的,如此一來,即使你的資料有加密,但結果,在釣魚網站伺服器端還是能夠取得你輸入的帳密啊!
這個時候就需要第三方公正單位來幫忙啦!
所謂的 CA 就是一個公認的公正單位,你可以自行產生一把金鑰且製作出必要的憑證資料並向 CA 單位註冊
(講到註冊你就要知道...這東西是要錢的意思!),那麼當用戶端的瀏覽器在瀏覽時,該瀏覽器會主動的向 CA
單位確認該憑證是否為合法註冊過的,如果是的話,那麼該次連線才會建立,如果不是呢?那麼瀏覽器就會發出警告訊息,
告知使用者應避免建立連線啊。所以說,如此一來 WWW 伺服器不但有公正單位的背書,使用者在建立連線時也比較有保障!
更多關於 SSL 以及 CA 的介紹,可以約略參考一下:
Apache 的 SSL:
CA 組織之一:
20.1.5 用戶端常見的瀏覽器
咱們前面談到 WWW 伺服器是 Server/Client 的架構,而用戶端使用的軟體就是瀏覽器啊!
目前比較知名的自由軟體瀏覽器主要有兩款,包括 Mozilla 基金會管理的 firefox (火狐狸)
以及 Google 自行推出的 chrome。至於市佔率較高的還有 windows 的 IE。
由於瀏覽器可以連結到網際網路上,所以瀏覽器也有可能被攻擊!
其中由於 IE 直接內嵌至 Windows 的核心當中,所以如果 IE 有漏洞時,對於系統的損害是很大的!
因此無論如何,請記得『務必要隨時更新到最新版本的瀏覽器』才行。建議你可以使用 firefox 或 chrome
這些小巧玲瓏的瀏覽器啊!
除了視窗介面的瀏覽器軟體之外,其實還有幾個可以在文字介面底下進行瀏覽與網頁下載的程式,分別是:
:文字介面的瀏覽器;
:文字介面下使用來擷取檔案的指令。
這幾個指令我們已經在談過了,請自行前往參考喔!
20.2 WWW (LAMP) 伺服器基本設定
從前面的說明當中,我們知道在 Linux 上面要達成網頁伺服器需要 Apache 這套伺服器軟體吶!不過 Apache
僅能提供最基本的靜態網站資料而已,想要達成動態網站的話,那麼最好還是需要 PHP 與 MySQL 的支援才好。所以底下我們將會以
LAMP 作為安裝與設定的介紹,加油吧! ^_^
20.2.1 LAMP 所需軟體與其結構
既然我們已經是 Linux 作業系統,而且使用的是號稱完全相容於 Red Hat Enterprise Linux 的 CentOS 版本,
那當然只要利用 CentOS 本身提供的 Apache, PHP, MySQL 即可!不建議你自行利用
tarball 安裝你的 LAMP 伺服器。因為自行安裝不但手續麻煩,而且也不見得比系統預設的軟體穩定。
除非你有特殊的需求 (例如你的某些 Apache 外掛程式需要較高的版本,或者是 PHP, MysQL 有特殊版本的需求),
否則請使用
來進行軟體的安裝即可。
那麼我們的 LAMP 需要哪些東西呢?你必需要知道的是,PHP 是掛在 Apache 底下執行的一個模組,
而我們要用網頁的 PHP 程式控制 MySQL 時,你的 PHP 就得要支援 MySQL 的模組才行!所以你至少需要底下幾個軟體:
httpd (提供 Apache 主程式)
mysql (MySQL 客戶端程式)
mysql-server (MySQL 伺服器程式)
php (PHP 主程式含給 apache 使用的模組)
php-devel (PHP 的發展工具,這個與 PHP 外掛的加速軟體有關)
php-mysql (提供給 PHP 程式讀取 MySQL 資料庫的模組)
要注意, Apache 目前有幾種主要版本,包括 2.0.x, 2.2.x 以及 2.3.x 等等,至於 CentOS 6.x 則是提供
Apache 2.2.x 這個版本啦。如果你沒有安裝的話,請直接使用 yum 或者是原本光碟來安裝先:
# 安裝必要的 LAMP 軟體: php-devel 可以先忽略~
[root@www ~]# yum install httpd mysql mysql-server php php-mysql
先來瞭解一下 Apache 2.2.x 這個版本的相關結構,這樣才能夠知道如何處理我們的網頁資料啊!
/etc/httpd/conf/httpd.conf (主要設定檔)
httpd 最主要的設定檔,其實整個 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 『首頁』所在目錄啦!當你輸入『http://localhost』時所顯示的資料,
就是放在這個目錄當中的首頁檔 (預設為 index.html)。
/var/www/error/
如果因為伺服器設定錯誤,或者是瀏覽器端要求的資料錯誤時,在瀏覽器上出現的錯誤訊息就以這個目錄的預設訊息為主!
/var/www/icons/
這個目錄提供 Apache 預設給予的一些小圖示,你可以隨意使用啊!當你輸入『http://localhost/icons/』
時所顯示的資料所在。
/var/www/cgi-bin/
預設給一些可執行的 CGI (網頁程式) 程式放置的目錄;當你輸入『http://localhost/cgi-bin/』
時所顯示的資料所在。
/var/log/httpd/
預設的 Apache 登錄檔都放在這裡,對於流量比較大的網站來說,這個目錄要很小心,
因為以鳥哥網站的流量來說,一個星期的登錄檔資料可以大到 700MBytes
至 1GBytes 左右,所以你務必要修改一下你的 logrotate 讓登錄檔被壓縮,否則...
/usr/sbin/apachectl
這個就是 Apache 的主要執行檔,這個執行檔其實是
他可以主動的偵測系統上面的一些設定值,好讓你啟動 Apache 時更簡單!
/usr/sbin/httpd
呵呵!這個才是主要的 Apache 二進位執行檔啦!
/usr/bin/htpasswd (Apache 密碼保護)
在某些網頁當你想要登入時你需要輸入帳號與密碼對吧!那 Apache 本身就提供一個最基本的密碼保護方式,
該密碼的產生就是透過這個指令來達成的!相關的設定方式我們會在 WWW 進階設定當中說明的。
至於 MySQL 方面,你需要知道的幾個重要目錄與檔案有:
這個是 MySQL 的設定檔,包括你想要進行 MySQL 資料庫的最佳化,或者是針對 MySQL 進行一些額外的參數指定,
都可以在這個檔案裡面達成的!
/var/lib/mysql/
這個目錄則是 MySQL 資料庫檔案放置的所在處啦!當你有啟動任何 MySQL 的服務時,
請務必記得在備份時,這個目錄也要完整的備份下來才行啊!
另外,在 PHP 方面呢,你應該也要知道幾個檔案喔:
/etc/httpd/conf.d/php.conf
那你要不要手動將該模組寫入 httpd.conf 當中?不需要的,因為系統主動將 PHP 設定參數寫入這個檔案中了!
而這個檔案會在 Apache 重新啟動時被讀入,所以 OK 的啦!
/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 或其他版本的資料,請依照你的 distribution 管理軟體的指令 (rpm 或 dpkg) 去查詢一下,
應該就能夠知道各個重要資料放置在哪裡啦!這些資料很重要,你必需要對放置的地點有點概念才行喔!
20.2.2 Apache 的基本設定
在開始設定 Apache 之前,你要知道由於主機名稱對於 WWW 是有意義的,所以雖然利用 IP 也能架設 WWW 伺服器,
不過建議你還是比較好。
如果是暫時測試用的主機所以沒有主機名稱時,那麼至少確定測試用主機名稱為 localhost 且在你的 /etc/hosts 內需要有一行:
[root@www ~]# vim /etc/hosts
localhost.localdomain localhost
這樣在啟動你的 Apache 時才不會發生找不到完整主機名稱 (FQDN) 的錯誤訊息。此外,
Apache 只是個伺服器平台而已,你還需要瞭解 HTML 以及相關的網頁設計語法,
如此才能豐富你的網站。對於想要設計網頁的朋友來說,應用軟體或許是很好入門,
不過想要完整的瞭解網站設計的技巧,還是研究一下基礎的 HTML 或 CSS 比較妥當。
如果你真的對於一些基礎語法有興趣,並且也想要開發一些所謂的『無障礙網頁空間』的話,那麼可以造訪一下
所列舉的標準語法,或者是行政院的無障礙網頁空間申請規範
相信會有所收穫的啦!
終於要來談一談如何設定 Apache 這個 httpd.conf 設定檔了!再次強調,每個 distribution
的這個檔案內容都不很相同,所以你必需要自行找出相關的設定檔才行喔!那麼這個 httpd.conf
的設定為何呢?他的基本設定格式是這樣的:
&設定項目&
此設定項目內的相關參數
...........
&/設定項目&
舉例來說,如果你想要針對我們的首頁 /var/www/html/ 這個目錄提供一些額外的功能,那麼:
&Directory "/var/www/html"&
Options Indexes
...........
&/Directory&
幾乎都是這樣的設定方式喔!特別留意的是,如果你有額外的設定時,不能隨便在 httpd.conf
裡頭找地方寫入!否則如果剛好寫在 &Directory&...&/Directory& 裡面,呼呼!
那麼就會發生錯誤啦!需要前前後後的找一找喔!或者是在檔案的最後面加入也行!好啦,底下咱們先來聊一聊 Apache
伺服器的基礎設定吧!
事實上在 Apache 的網頁有提供很多詳細的文件資料,真的是很詳細啦!
鳥哥在底下僅是介紹一些慣用的設定項目的意義而已。有興趣的話,請務必要前往查閱:
針對伺服器環境的設定項目
Apache 針對伺服器環境的設定項目方面,包括回應給用戶端的伺服器軟體版本、主機名稱、伺服器設定檔頂層目錄等。
底下咱們就來談一談:
[root@www ~]# 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
&==啟動 httpd 時,喚醒幾個 PID 來處理服務的意思
MinSpareServers
&==最小的預備使用的 PID 數量
MaxSpareServers
&==最大的預備使用的 PID 數量
ServerLimit
&==伺服器的限制
MaxClients
&==最多可以容許多少個用戶端同時連線到 httpd 的意思!
MaxRequestsPerChild
&/IfModule&
&IfModule worker.c&
StartServers
MaxClients
MinSpareThreads
MaxSpareThreads
ThreadsPerChild
MaxRequestsPerChild
&/IfModule&
上面的 prefork 及 worker 其實是兩個與伺服器連線資源有關的設定項目。預設的項目對於一般小型網站來說已經很夠用了,
不過如果你的網站流量比較大時,或許可以修訂一下裡面的數值呢!這兩個模組都是用在提供使用者連線的資源
(process),設定的數量越大代表系統會啟動比較多的程序來提供 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 這個程序模組的參數值,如同上面的說明,這個
MaxClients 設定值可以控制『同時連上 WWW 伺服器的總連線要求』數量,亦即想成最高即時線上人數啦。
不過你要注意的是,MaxClients 的數量不是越高越好,因為他會消耗實體記憶體 (與 process
有關嘛),所以如果你設定太高導致超出實體記憶體能夠容許的範圍,那麼效能反而會降低
(因為系統會使用速度較慢的 swap 啊),此外, MaxClients 也在 Apache 編譯時就指定最大值了,所以你也無法超出系統最大值,
除非...你重新編譯 Apache 啦!
除非你的網站流量特別大,否則預設值已經夠你使用的了。而如果你的記憶體不夠大的話,那麼 MaxClients
反而要調小一點,例如 150 ,否則效能不佳。那,apache 到底是使用那個模組啊?prefork 還是 worker ?事實上 CentOS
將這兩個模組分別放到不同的執行檔當中,分別是:
/usr/sbin/httpd:使用 prefork 模組;
/usr/sbin/httpd.worker:使用 worker 模組。
那如何決定你使用的是哪一支程式?你可以去查閱一下 /etc/sysconfig/httpd ,
就能夠知道系統預設提供 prefork 模組,但你可以透過修改 /etc/sysconfig/httpd 來使用 worker 模組的。
如果你很有好奇心,那麼可以分別試著啟動這兩種模組啊!接下來,繼續瞧瞧其他的伺服器環境設定參數吧!
# 與監聽介面有關,預設開放在所有的網路介面啊!也可修改埠口,如 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 80 已經被使用掉了,導致
Apache 無法啟動在預設的埠口。那麼你可以透過 Listen 這個設定值來修改埠口喔!這也是個很重要的設定值。
此外,你也可以將自己的額外設定指定到 /etc/httpd/conf.d/*.conf
內,尤其是虛擬主機很常使用這樣的設定,在移機時會很方便的!
針對中文 big5 語系編碼的設定參數修改
目前的網際網路傳輸資料編碼多是以萬國碼 (UTF-8) 為主,不過在台灣還是有相當多的網站使用的是 Big5
的繁體中文編碼啊!如果你的 Apache 預設是以 UTF-8 編碼來傳輸資料,但你 WWW 的資料卻是 big5 ,
那麼用戶端將會看到『亂碼』!雖然可以透過調整瀏覽器的編碼來讓資料正確顯示,不過總是覺得很討厭。
此時,你應該可以調整一下底下的參數喔!
[root@www ~]# vim /etc/httpd/conf/httpd.conf
# 找到底下這一行,應該是在 747 行左右
# AddDefaultCharset UTF-8
&==請將她註解掉!
這個設定值的意義是說,讓伺服器傳輸『強制使用 UTF-8 編碼』的訊息給用戶端瀏覽器,因此不論網頁內容寫什麼,
反正在用戶端瀏覽器都會預設使用萬國馬來顯示的意思。那如果你的網頁使用的是非萬國碼的語系編碼,
此時就會在瀏覽器內出現亂碼了!非常討厭~所以這裡當然需要註解掉。
你必須要注意的是,如果你已經在用戶端上面瀏覽過許多頁面,那麼你修改過這個設定值後,仍然要將瀏覽器的快取 (cache)
清除才行!否則相同頁面仍可能會看到亂碼!網友們已經回報過很多次了,
這不是 Apache 的問題,而是用戶端瀏覽器的快取所產生的啦!記得處理處理!
語系編碼已經取消預設值,那我怎麼知道我的網頁語系在用戶端會顯示的是哪一個?其實在網頁裡面本來就有宣告了:
&meta http-equiv="Content-Type" content="text/ charset=big5" &
....(其他省略)....
你應該要修訂的是上述的特殊字體處,而不是透過 Apache 提供預設語系才對!
網頁首頁及目錄相關之權限設定 (DocumentRoot 與 Directory)
我們不是講過 CentOS 的 WWW 預設首頁放置在 /var/www/html 這個目錄嗎?為什麼呢?因為 DocumentRoot
這個設定值的關係啦!此外,由於 Apache 允許 Internet 對我們的資料進行瀏覽,
所以你當然必須要針對可被瀏覽的目錄進行權限的相關設定,那就是 &Directory&
這個設定值的重要特色!先讓我們來看看預設的主網頁設定吧!
[root@www ~]# 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) 用戶端皆可瀏覽啦!這部份我們會在
當中再提及滴。
除了這些資料之外,跟網站資料相關性高的還有底下的幾個咚咚:
[root@www ~]# vim /etc/httpd/conf/httpd.conf
DirectoryIndex index.html index.html.var
&==首頁『檔案的檔名』設定!
如果用戶端在網址列只輸入到目錄,例如 http://localhost/ 時,那麼 Apache 將拿出那個檔案來顯示呢?就是拿出首頁檔案嘛!
這個檔案的檔名在 Apache 當中預設是以 index.* 為開頭的,但 Windows 則以 default.* 之類的檔名為開頭的。如果你想要讓類似
index.pl 或 index.cgi 也可以是首頁的檔名,那可以改成:
DirectoryIndex index.html index.htm index.cgi
index.pl ...
那如果上面的檔名通通存在的話,那該怎辦?就按照順序啊!接在 DirectoryIndex 後面的檔名參數,越前面的越優先讀取。
那如果檔名通通不存在呢?就是說沒有首頁時,該如何讀取?這就與剛剛談到的 Options 裡面的 Indexes 有關喔!
這樣有沒有將兩個參數串起來?
[root@www ~]# vim /etc/httpd/conf/httpd.conf
網址列延伸
實際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&
來規定權限了吧! ^_^
[root@www ~]# vim /etc/httpd/conf/httpd.conf
# 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 程式喔!
這樣大概就 OK 了啦!接下來準備一下看看還有哪些額外的設定檔需要處理的呢?
20.2.3 PHP 的預設參數修改
我們前面稍微提過 PHP 是 Apache 當中的一個模組,那在談了 Apache 的 httpd.conf 之後,『我們怎麼沒有講到 PHP
這個模組的設定啊?』不是不講啦!而是因為目前 Apache 很聰明的將一些重要模組給他拆出來放置到 /etc/httpd/conf.d/*.conf
檔案中了,所以我們必須要到該目錄下才能瞭解到某些模組是否有被加入啊!底下先來瞧瞧吧!
[root@www ~]# cd /etc/httpd/conf.d
[root@www conf.d]# ll *.conf
-rw-r--r--. 1 root root 674 Jun 25 15:30 php.conf
&==提供 PHP 模組的設定
-rw-r--r--. 1 root root 299 May 21
2009 welcome.conf
&==提供預設的首頁歡迎訊息
# 如果你是按照剛剛鳥哥說的幾個模組去安裝的,那麼這個目錄下至少會有這兩個資料,
# 一個是規範 PHP 設定,一個則是規範『如果首頁不存在時的歡迎畫面』囉。
我們主要來看看關於 PHP 的設定檔吧:
[root@www conf.d]# 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 ,這個檔案內容有某些地方可以進行一些小修改,
也有某些地方你必須要特別留意,免得被用戶端誤用你的 PHP 資源。底下先介紹一下 PHP 常見的與資安方面較相關的設定:
[root@www ~]# vim /etc/php.ini
register_globals = Off
# 這個項目請確定為 Off (預設就是 Off),因為如果設定為 On 時,
# 雖然程式執行比較不容易出狀況,但是很容易不小心就被攻擊。
log_errors = On
ignore_repeated_errors = On
&==這個設定值調整一下 (因預設為 Off)
ignore_repeated_source = On
&==這個設定值調整一下
# 這三個設定項目可以決定是否要將 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 ()
就是利用 perl 寫成的。要讓你的 WWW 支援該程式語言,
你就得要安裝這些東西啦!(但不是所有的軟體都安裝!請安裝你需要的即可!)
PHP 提供的上傳容量限制
我們未來可能會使用 PHP 寫成的軟體來提供用戶上傳/下載檔案資料,那麼 PHP 有沒有限制檔案容量呢?
答案是有的!那麼容量限制是多大?預設是 2M 左右。你可以修改它的,假設我們現在要限制成為 16MBytes
時,我們可以這樣修訂:
[root@www ~]# vim /etc/php.ini
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 資訊可能還含有其它的額外資訊,所以當然要比檔案容量大才行!所以在設計這個設定檔時,
這兩個值得要特別注意喔!
20.2.4 啟動 WWW 服務與測試 PHP
OK!最單純簡易的 WWW 伺服器設定搞定的差不多了,接下來就是要啟動啦!啟動的方法簡單到不行,用傳統的方式來處理:
[root@www ~]# /etc/init.d/httpd start
&==立刻啟動啦!
[root@www ~]# /etc/init.d/httpd configtest
&==測試設定檔語法
[root@www ~]# chkconfig httpd on
&==開機啟動 WWW 啦!
另外,其實 Apache 也自行提供一支 script 可以讓我們來簡單的使用,那就是 apachectl 這支程式啦!
這支程式的用法與 /etc/init.d/httpd 幾乎完全一模一樣喔!
[root@www ~]# /usr/sbin/apachectl start
&==啟動啦!
[root@www ~]# /usr/sbin/apachectl stop
&==關閉 WWW 啦!
一般建議你可以稍微記一下 apachectl 這支程式,因為很多認證考試會考,而且他也是 Apache
預設提供的一個管理指令說!好了,來看看有沒有啟動成功?
# 先看看 port 有沒有啟動啊!
[root@www ~]# netstat -tulnp | grep 'httpd'
Proto Recv-Q Send-Q Local Address
Foreign Address State
PID/Program name
LISTEN 2493/httpd
# 再來看看登錄檔的資訊記錄了什麼!這個確實建議瞧一瞧!
[root@www ~]# tail /var/log/httpd/error_log
[notice] SEL httpd running as context unconfined_u:system_r:httpd_t:s0
[notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[notice] Digest: generating secret for digest authentication ...
[notice] Digest: done
[notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.3.2 configured -- resuming normal operations
# 第一行在告知有使用 SELinux(強調一下),最後一行代表正常啟動了!
這樣應該就成功啟動了 Apache 囉!比較重要的是還有啟動 SELinux 的相關說明,這底下我們還得要注意注意呢!
接下來測試看看能不能看到網頁呢?首先看看 /var/www/html 有沒有資料?咦?沒有~沒關係,因為 CentOS
幫我們造了一個測試頁了 (Apache 的 welcome 模組功能),所以你還是在瀏覽器上面輸入你這部主機的 IP 看看先:
圖 20.2-1、啟動 Apache 之後,所看到的預設首頁
你可以在伺服器上面啟動圖形介面來查閱,也可以透過客戶端電腦來連線 (假設防火牆問題已經克服了)。
鳥哥這裡假設伺服器為 runlevel 3 的純文字介面,因此使用外部的用戶端電腦連線到伺服器的 IP 上,如上圖畫面中的箭頭 1
處。如果你是在伺服器本機上面啟動的瀏覽器,那直接輸入『 http://localhost 』即可。同時看到畫面中的箭頭 2
所指處,你就可以發現首頁的位置是在 /var/www/html/ 底下囉!但如果想要知道有沒有成功的驅動 PHP
模組,那你最好先到 /var/www/html 目錄下去建立一個簡單的檔案:
[root@www ~]# vim /var/www/html/phpinfo.php
phpinfo ();
要記住,PHP 檔案的副檔名一定要是 .php 結尾的才行喔!至於內容中,那個『 &?php ... ?& 』是嵌入在 HTML
檔案內的 PHP 程式語法,在這兩個標籤內的就是 PHP 的程式碼。那麼 phpinfo(); 就是 PHP
程式提供的一個函式庫,這個函式庫可以顯示出你 WWW 伺服器內的相關服務資訊,
包括主要的 Apache 資訊與 PHP 資訊等等。這個檔案建置完畢後,接下來你可以利用瀏覽器去瀏覽一下這個檔案:
圖 20.2-2、測試 Apache 能否驅動 PHP 模組
注意看網址的部分喔!因為我們 phpinfo.php 是放置在首頁目錄底下,因此整個 URL 當然就成為上述箭頭 1 當中的模樣了。
這個 phpinfo() 函數輸出的內容還挺機密的,所以測試完畢後請將這個檔案刪除吧!從上頭的畫面你可以知道 PHP
模組的版本以及 Apache 相關的重要資料啦!自己仔細瞧瞧吧!如此一來,你的 Apache 與 PHP 就 OK 的啦!
那萬一測試失敗怎麼辦?常見的錯誤問題以及解決之道可以參考:
網路問題:雖然在本機上沒有問題,
但不代表網路一定是通的!請確認一下網路狀態!例如 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 的問題喔!
20.2.5 MySQL 的基本設定
在 LAMP 伺服器裡面,Linux, Apache, PHP 已經處理完畢,那麼 MySQL 呢?所以,接下來就是要處理這個資料庫軟體囉。
在啟動 MySQL 前其實系統並沒有幫我們建立任何的資料庫。當你初次啟動 MySQL 後,系統才會針對資料庫進行初始化的建立啊。
不相信的話你可以先看看 /var/lib/mysql/ 這個目錄,裡面其實沒有任何資料的啦。
啟動 MySQL (設定 MySQL root 密碼與新增 MysQL 用戶帳號)
首先得要啟動 MySQL 才行,啟動的方法還是很簡單啊!
[root@www ~]# /etc/init.d/mysqld start
[root@www ~]# chkconfig mysqld on
# 如果是初次啟動,螢幕會顯示一些訊息且 /var/lib/mysql 會建立資料庫。
[root@www ~]# netstat -tulnp | grep 'mysql'
Proto Recv-Q Send-Q Local Address
Foreign Address
PID/Program name
0 0.0.0.0:3306
2726/mysqld
# 底下在測試看能否以手動的方式連上 MySQL 資料庫!
[root@www ~]# mysql -u root
Welcome to the MySQL monitor.
Your MySQL connection id is 2
Server version: 5.1.52 Source distribution
Type '' or '\h' for help. Type '\c' to clear the current input statement.
mysql& exit
MySQL 預設監聽的埠口在 port 3306,從上面看來我們的 MySQL 似乎是啟動了,不過剛剛初始化的
MySQL 資料庫管理員並沒有任何密碼,所以很可能我們的資料庫是會被使用者搞爛掉的~所以你最好對 MySQL
的管理員帳號設定一下密碼才好。 另外,上面那個 root 與我們 Linux
帳號的 root 是完全無關的!因為 MySQL 資料庫軟體也是個多人的操作環境,在該軟體內有個管理者恰好帳號也是
root 而已。
那麼如何針對 MySQL 這個軟體內的 root 這個管理者設定他的密碼呢?你可以這樣做:
[root@www ~]# mysqladmin -u root password 'your.password'
# 從此以後 MySQL 的 root 帳號就需要密碼了!如下所示:
[root@www ~]# mysql -u root -p
Enter password:
&==你必須要在這裡輸入剛剛建立的密碼!
mysql& exit
如此一來 MySQL 資料庫的管理方面會比較安全些啦!其實更好的作法是分別建立不同的使用者管理不同的資料庫。
舉例來說,如果你要給予 vbirduser 這個使用者一個 MySQL 的資料庫使用權,假設你要給他的資料庫名稱為
vbirddb,且密碼為 vbirdpw 時,你可以這樣做:
[root@www ~]# mysql -u root -p
Enter password:
&==如前所述,你必須要輸入密碼嘛!
mysql& cre
&==注意每個指令後面都要加上分號 (;)
Query OK, 1 row affected (0.01 sec)
mysql& grant all privileges on vbirddb.* to vbirduser@localhost
identified by 'vbirdpw' ;
Query OK, 0 rows affected (0.00 sec)
+--------------------+
| Database
+--------------------+
| information_schema |
| &==用來記錄 MySQL 帳號、主機等重要資訊的主要資料庫!
| &==我們剛剛建立的資料庫在此
+--------------------+
4 rows in set (0.00 sec)
mysql& select * from user where user = 'vbirduser';
# 上面兩個指令在查詢系統有沒有 vbirduser 這個帳號,若有出現一堆東西,
# 那就是查詢到該帳號了!這樣就建置妥當囉!
mysql& exit
然後你可以利用『 mysql -u vbirduser -p 』這個指令來嘗試登入 MySQL 試看看,嘿嘿!就知道 vbirduser
這個使用者在 MySQL 裡面擁有一個名稱為 vbirddb 的資料庫啦!其他更多的用法就得請你自行參考
SQL 相關的語法囉!不在本文的討論範圍啦!
效能調校 /f
由於 MySQL 這個資料庫系統如果在很多使用者同時連線時,可能會造成某些效能方面的瓶頸,
因此,如果你的資料庫真的好大好大,建議可以改用 postgresql 這套軟體,這套軟體的使用與 mysql 似乎差異不大。
不過,我們還是提供一些簡單的方式來處理小站的 MySQL 效能好了。相關的資料鳥哥是參考這一篇簡單的中文說明:
[root@

我要回帖

更多关于 虚拟主机使用教程 的文章

 

随机推荐