自己做站长----LINUX服务器架设篇之WWW
xinglight
|
1#
xinglight 发表于 2008-04-20 06:23
自己做站长----LINUX服务器架设篇之WWW
+++++++++++++++++++++++++++++++++++++++++++
正文 +++++++++++++++++++++++++++++++++++++++++++ 如果您是一位Linux爱好者,您可能已经掌握了基本的Linux的知识与操作,毫无疑问,您并不会去满足这样小小的成就;Linux为何如此的流行?其最大的特点莫过于功能强大,性能稳定的服务器应用了。像WWW,MAIL,FTP, DNS和SMB等;在本文中,我们从Web服务器的一些最基本的操作入手,从初学者使用的态度,让大家学会用linux假设一个自己的服务器来使用. 1. 关于WWW和URL; WWW是World Wide Web的缩写,翻译过来就是全球广域网,它可以接合文字、图形、影像及声音等多媒体,并通过超文本(HyperText)的方式,将信息通过Internet传递到世界各处; 例如:在浏览器的地址栏上输入“http://www.linuxsir.org”,就可以登录的linuxsir的网站上浏览信息,其中“http://www.linuxsir.org”是URL(Uniform Resource Locator ,同一资源定位器),“www.linuxsir.org”是主机名称,也就是DNS中的FQDN(Fully Qualified Domain Name,完全符合标准的域名),即主机名称加上域名所得的一个独一无二的Internet上面的名字。由于计算机仅识别网络中的IP,所以,linuxsir站的真实IP就是通过DNS解析www.linuxsir.org而找到的,然后经过www的协议将数据传到你的眼前; 1.1 URL的格式; <协议>://<主机地址>[:端口]/<目录> 1.1.1 协议; 包括http,ftp,news,gopher和telnet几种常见的协议。其中,http是利用“主机的http端口,通常为80端口”,ftp是利用“主机的ftp端口,通常为21端口”。注意:80和21都是主机所提供的服务,而不是客户端的端口。 1.1.2 主机地址; 当输入主机名(域名)时,必须要让该主机名称可以经由翻译器得到对应的IP。翻译器是/etc/hosts或者是/etc/resolv.conf里面的设置对外提供正常的www服务器时,主机名称就必须要让大家可以翻译到IP,这就需要去申请一个合法的域名; 1.1.3 目录; 也就是URI(Uniform Resource Indicator ,统一资源定位符),如果你要去的网站网页在主页所在目录的下面,那么你直接输入目录与网页的名称,就可以直接取得那个网页的数据。若只输入目录与网页的名称,并没有输入网页名称,则服务器端会自动地判断(跟服务器自己的设置有关),该目录下是否有设置为默认的网页名称; 1.1.4 端口; 当连接某个网站时,输入 “http://that.host.name”就会主动地利用端口80来尝试连接对方的主机,但如果不想使用该端口呢。举个例子来说,例如您的网站使用的是8080端口来进行www的服务,那么除非您使用了防火墙进行端口对应,否则直接在地址栏输入“http://your.host.name”结果将无法连接到你的www服务器,因为它会主动连接到端口80,所以这里就要告诉浏览器,向服务器请求服务的是哪个端口。即写成“http://your.host.name:8080”才可以连接到对方的端口8080; 2. www主机系统的类型; 大致上可以分两种: 一种是Windows系统的IIS+MS的SQL+ASP WWW服务器,这种www主机假设上比较容易,不过由于windows的某些特性,所以很容易被黑客所破坏; 另外一种则是Linux系统上的Apache+MySQL(PostgreSQL)+PHP的www服务器(简称LAMP),这种服务器架设上有一定程度的困难,尤其是在升级与维护方面,但是架设妥当的话,它的硬件要求、性能、安全性等方面,则相对较佳,下面我们就来主要介绍一下Apache的架设; 2.1 Apache的历史与前景; 1995年,美国国家计算机安全协会(NCSA)的开发者创建了NCSZ全球网络服务软件,其最大的特点是HTTP精灵程序,它比当时的CERN服务器更容易由源码来配置和创建,又由于当时其他服务器软件的缺乏,他很快流行起来。但是后来,该服务器的核心开发人员几乎都离开了NCSA,一些使用者们自己成立了一个组织来管理他们编写的补丁,于是Apache Group应运而生。他们把该服务器软件称为Apache。Apache源于A patchy server的读音,意思是充满补丁的服务器。如今Apache慢慢地已经成为Internet上最流行的Web服务器软件了。在所有的Web服务器软件中,Apache占据绝对优势,远远领先排名第二的Microsoft IIS。如果你对它感兴趣,你可以访问Apache的官方网站:http://www.apache.org。Apache作为自由软件之一,像其他自由软件一样,他们都是由许许多多的自由开发人员投入了大量的时间和精力来实现并逐步完善的,所以我们有理由相信Apache的发展前景会更好。 2.2 Apache 2的安装; 软件的安装并不困难,您可以在www.apache.org上下载源码包进行安装,也可以使用各操作系统自带的软件包管理软件进行安装,如何下载安装可以参考我以前发过的一篇帖子,那么就可以在终端中输入: qiong@qiong-love:~$ sudo apt-get install apache2 不同的系统有自己的软件包管理方式,其实都大同小异; 2.2.1 使用源代码安装; (1) 获得源代码 qiong@qiong-love:~# lynx http://www.apache.org/dist/httpd/httpd-2_0_NN.tar.gz NN表示当前所用的版本号 (2) 解压缩 qiong@qiong-love:~# gzip -d httpd-2_0_NN.tar.gz 或者 qiong@qiong-love:~# tar xvf httpd-2_0_NN.tar (3) 配置. qiong@qiong-love:~httpd-2_0_NN# ./configure --prefix= /usr/local/apache 表示Apache将安装在/usr/local/apache目录下 (4) 编译与安装 qiong@qiong-love:~httpd-2_0_NN# make qiong@qiong-love:~httpd-2_0_NN# make install (5) 测试 qiong@qiong-love:~httpd-2_0_NN# /usr/local/apache/bin/apachectl start 3. Apache 2 的配置; 安装完apache2后,可以在/etc/apache2/目录下查看文件: qiong@qiong-love:/etc/apache2$ ls -lh 总用量 35K -rw-r--r-- 1 root root 24K 2007-01-16 02:10 apache2.conf drwxr-xr-x 2 root root 104 2007-06-12 21:07 conf.d -rw-r--r-- 1 root root 895 2007-01-16 02:11 envvars -rw-r--r-- 1 root root 0 2007-05-17 17:34 httpd.conf drwxr-xr-x 2 root root 2.5K 2007-07-18 08:43 mods-available drwxr-xr-x 2 root root 608 2007-05-17 17:36 mods-enabled -rw-r--r-- 1 root root 10 2007-05-17 17:34 ports.conf drwxr-xr-x 2 root root 72 2007-05-19 16:47 sites-available drwxr-xr-x 2 root root 80 2007-05-17 17:34 sites-enabled 3.1 apache2.conf; Apache 2.0的主配置文件为apache2.conf; 我的配置文件保存在/etc/apache2/apache2.conf; 查看此文件会在第184行附近发现下面的内容: # Include module configuration: Include /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf # Include all the user configurations: Include /etc/apache2/httpd.conf # Include ports listing Include /etc/apache2/ports.conf # Include generic snippets of statements Include /etc/apache2/conf.d/ 可以看出apache2 根据配置功能的不同, 对配置文件进行了分割, 这样更利于管理; 3.2 conf.d ; 下为配置文件的附加片断,默认情况下, 仅提供了 charset 片断, qiong@qiong-love:/etc/apache2/conf.d$ cat charset AddDefaultCharset UTF-8 如有需要我们可以将默认编码修改为 GB2312, 即文件的内容为: AddDefaultCharset GB2312 3.3 httpd.conf ; 通常是一个空文件,以后设置时可以加入以下指令; 下面我们来看一下httpd.conf中的几条指令,“#”后加入了注释说明; Port 80 #定义了web服务器的侦听端口,默认值为80,它是TCP网络端口之一。若写入多个端口,以最后一个为准。 User apache #一般情况下,以nobody用户和nobody组来运行web服务器,因为web Group apache # 服务器发出的所有的进程都是以root用户身份运行的,存在安全风险。 ServerAdmin root@localhost #指定服务器管理员的E-mail地址。服务器自动将错误报告到该地址。 ServerRoot /etc/httpd #服务器的根目录,一般情况下,所有的配置文件在该目录下 ServerName new.host.name:80 #web客户搜索的主机名称 KeepAliveTimeout 15 #规定了连续请求之间等待15秒,若超过,则重新建立一条新的TCP连接 MaxKeepAliveRequests 100 #永久连接的HTTP请求数 MaxClients 150 #同一时间连接到服务器上的客户机总数 ErrorLog logs/error_log #用来指定错误日志文件的名称和路径 PidFile run/httpd.pid #用来存放httpd进程号,以方便停止服务器。 Timeout 300 #设置请求超时时间,若网速较慢则应把值设大。 DocumentRoot /var/www/html # 用来存放网页文件 3.4 magic ; 文件中包含的是有关mod_mime_magic模块的数据, 一般不需要修改它; 3.5 ports.conf ; 则为服务器监听IP和端口设置的配置文件, qiong@qiong-love:/etc/apache2$ cat ports.conf Listen 80 3.6 mods-available ; 目录下是一些.conf和.load 文件, 为系统中可以使用的加载各种模块的配置文件, 而mods-enabled目录下则是指向这些配置文件的符号连接, 从配置文件apache2.conf 中可以看出, 系统通过mods-enabled目录来加载模块, 也就是说, 系统仅通过在此目录下创建了符号连接的mods-available 目录下的配置文件来加载模块。同时系统还提供了两个命令 a2enmod 和 a2dismod用于维护这些符号连接。这两个命令由 apache2-common 包提供。命令各式也非常简单: a2enmod [module] 或 a2dismod [module] 3.7 sites-available ; 目录下为配置好的站点的配置文件, sites-enabled 目录下则是指向这些配置文件的符号连接, 系统通过这些符号连接来起用站点 sites-enabled目录下的符号连接附有一个数字前缀, 如000-default, 这个数字用于决定启动顺序, 数字越小, 启动优先级越高. 系统提供了两个命令 a2ensite 和 a2dissite 用于维护这些符号连接。这两个命令由 apache2-common 包提供; 3.8 /var/www ; 默认情况下将要发布的网页文件应该置于/var/www目录下,这一默认值可以同过主配置文件中的DocumnetRoot 选项修改 4. Apache的管理; 4.1 启动和停止Apache; root@qiong-love:/#/etc/init.d/apache2 start root@qiong-love:/#/etc/init.d/apache2 stop 4.2 Apache的日志文件; Apache的日至文件主要包括访问日志和错误日志。访问日志记录了该服务器所有的请求的过程,主要记录的是客户的信息,通过它我们可以知道什么人访问了该网站,什么时候访问的,访问的内容是什么等等。错误日志则是记录了服务器出错的细节和如何处理等。日志文件的位置是由上述主配置文件httpd.conf来规定的。下面举一个例子来说明它的格式: 一条错误信息: [Mon sep 22 14:32:52 2003] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test 下面我们来看看这个错误信息都表示什么: [Mon sep 22 14:32:52 2003] #错误发生的时间 [error] #表示错误的级别。有debug,info,notice,warn,error,crit,alert,emerg,这些级别由低到高表示了错误的严重性 [client 127.0.0.1] #表示客户端IP地址 client denied by server configuration: /export/home/live/ap/htdocs/test #标是错误的具体信息 访问日志的写法: 127.0.0.1 - qiong [22/sep/2007:13:55:36 -0800] "GET /apache_pb.gif HTTP/1.0" 200 2326 注: 127.0.0.1 #表示访问这台服务器的客户端IP地址。 qiong #表示用户的登录名。 [22/sep/2003:13:55:36 -0800] #服务器完成客户端请求的时间,格式为[日/月/年:小时:分钟:秒 时区] "GET /apache_pb.gif HTTP/1.0" #表示客户端访问该资源所使用的方法 200 #记录的是服务器返回给客户的状态码; 200表示成功,以4打头的表示访问出错 2326 #表示发给客户端的总字节数。若是“—”表示没有找到访问资源 但在实际应用中,对于大型网站,日志文件往往增长的很快,不利于我们查询,降低服务器的效率,而且占用大量的磁盘空间,所以我们必须对日志进行定期的维护; 5. 配置虚拟主机; 虚拟主机是在一台www服务器上为多个单独的域名提供www服务,每个域名具有自己的目录和配置,相当于将一台主机分为多台主机,虚拟主机技术对于主机数量不足,但又想为不同的用户提供独立的Web服务的需求非常有效。而对于一个公司,利用价格昂贵的服务器只提供一种域名服务,似乎是不明智的,而现在越来越多的公司喜欢在一台服务器上使用多个域名服务,架设不同的网站,这样做的好处是显而易见。 Apache有两种方式支持虚拟主机,一种是基于IP的虚拟主机,另一种是基于名字的虚拟主机。基于名字的虚拟主机使用相同的IP地址来配置不同的虚拟主机,这就弥补了因IP地址不足而带来的问题。基于名字的虚拟主机的配置相当简单,你只需配置你得DNS服务器使每个主机名对应正确的IP地址,然后再配置 Apache HTTP Server使它能认识不同的主机名就可以了。 假设我们组建了一家多媒体制作公司,有一台Apache服务器和一个IP地址:192.168.1.1 要运行两种业务,一种为电子商务网站,域名为www.business.media.com ,另一种为教学网站,域名为www.teaching.media.com 。先在DNS服务器中把域名www.business.media.com和www.teachin....conf就可以了。 NameVirtualHost 192.168.0.1 <VirtualHost 192.168.0.1> ServerName www.business.media.com DocumentRoot /var/www/html/business </VirtualHost> <VirtualHost 192.168.0.1> ServerName www.teaching.media.com DocumentRoot /var/www/html/teaching </VirtualHost> 而基于IP的虚拟主机则要求使用不同的IP地址来区别不同的虚拟主机,这就要求使用多块网卡,把不同的IP地址捆绑到不同的网卡上,或者在一块网卡上捆绑多个IP地址。假设我们主机的IP地址为192.168.0.1(www.media.com),另外有两个IP地址别: <VirtualHost 192.168.0.2> ServerAdmin webmaster@ business.media.com DocumentRoot /var/www/html/business ServerName www.business.media.com ErrorLog /var/www/html/business/logs/error_log TransferLog /var/www/html/business/logs/access_log </VirtualHost> <VirtualHost 192.168.0.3> ServerAdmin webmaster@teaching.media.com DocumentRoot /var/www/html/teaching ServerName www.teaching.media.com ErrorLog /var/www/html/teaching/logs/error_log TransferLog /var/www/html/teaching/logs/access_log </VirtualHost> 6. 配置Apache代理; 代理服务器是网络信息服务的中转站。如果我们把Apache代理服务器形象地比喻成代理商的话,消费者向代理商购买东西时,如果代理商有的话,可直接卖给消费者,若没有,则代理商向厂家进货,再卖给消费者。 这样做有以下几点好处: (1)提高了访问速度; (2)充当防火墙,增加了安全性; (3)可以过滤一些不良网站; (4)具有缓存功能; (5)节省IP开销; 代理服务器可分为两种类型:客户端代理和服务器端代理; 下面我们在讲解几个指令后举例说明各自的配置方法; ProxyRequest On/Off #启用或者禁用Apache代理服务。 CacheRoot "/etc/httpd/proxy" #代理缓存的根目录。 CacheSize 5 #代理缓存的大小。 CacheGcInterval 4 #设定运行管理缓存的无用数据搜集程序的时间间隔 CacheMaxExpire 24 #文件过期时间。 CacheDefaultExpire 1 #指定未包含过期信息文件的有效期。 NoCache a-domain.com another-domain.edu #该网站的文件将不被缓存。 6.1 客户端代理的配置; (1) 修改/etc/httpd/conf/httpd.conf中的相关指令 (2) 修改/etc/httpd/conf/httpd.conf,添加对代理目录的访问控制 Order deny,allow Deny from all Allow from .your-domain.com (3) 重启httpd 6.2 服务器端代理的配置; 服务器端代理与客户端代理不同,它是在防火墙上安装Apache服务器,使用它提供对WWW服务器的代理访问。这种方法把WWW服务器与外部隔开,提高了安全性,而对用户来说,好像没有变化一样。假设在内部局域网中WWW服务器的IP地址为192.168.0.2,防火墙主机内部IP地址为 192.168.0.5,外部IP地址为192.9.202.1。 6.2.1 配置防火墙上的Apache; (1) 在/etc/httpd/conf/httpd.conf中添加虚拟主机。 <VirtualHost 192.9.201.1> ServerAdmin webmaster@business.media.com DocumentRoot /www/docs/business.media.com ServerName www.business.media.com ErrorLog logs/business.media.com-error_log CustomLog logs/business.media.com-log_common </VirtualHost> (2) 配置局域网中的DNS服务器,把www.business.media.com指向192.9.201.1。 6.2.2 配置局域网内部WWW服务器; 在Linux环境下,有一个非常流行的代理服务器软件——Squid。他的功能非常的强大,支持HTTP,FTP,Gopher,SSL,和WAIS等协议的代理,而且设置简单,只需再配置文件中稍稍改动就可以了; 7. 关于本文; 本文只是简单的说了一下www服务器的原理及简单应用,没有涉及到高级应用,主要是方便初学者,里面的不足之处还请大家多指教; 8. 更新日志; 9. 参考文档; 《apache2 安装与配置》 10. 相关文档; 《apache2 安装与配置》 |