作者:小P
来自:LinuxSir.Org
摘要:Linux为何如此的流行,其最大的特点莫过于功能强大,性能稳定的服务器应用了。像WWW,MAIL,FTP,DNS和SMB等;在这篇文章中,我们从Web服务器的一些最基本的操作入手。。。


1. 关于WWW和URL; 1.1 URL的格式; 1.1.1 协议; 1.1.2 主机地址; 1.1.3 目录; 1.1.4 端口; 2. www主机系统的类型; 2.1 Apache的历史与前景; 2.2 Apache 2的安装; 2.2.1 使用源代码安装; 3. Apache 2 的配置; 3.1 apache2.conf; 3.2 conf.d ; 3.3 httpd.conf ; 3.4 magic ; 3.5 ports.conf ; 3.6 mods-available ; 3.7 sites-available ; 3.8 /var/www ; 4. Apache的管理; 4.1 启动和停止Apache; 4.2 Apache的日志文件; 5. 配置虚拟主机; 6. 配置Apache代理; 6.1 客户端代理的配置; 6.2 服务器端代理的配置; 6.2.1 配置防火墙上的Apache; 6.2.2 配置局域网内部WWW服务器; 7. 关于本文; 8. 更新日志; 9. 参考文档; 10. 相关文档;


+++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++

如果您是一位Linux爱好者,您可能已经掌握了基本的Linux的知识与操作,毫无疑问,您并不会去满足这样小小的成就;Linux为何如此的流行?其最大的特点莫过于功能强大,性能稳定的服务器应用了。像WWW,MAIL,FTP, DNS和SMB等;在本文中,我们从Web服务器的一些最基本的操作入手,从初学者使用的态度,让大家正确充分的认识Apache等服务器;


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上下载源码包进行安装,也可以使用各操作系统自带的软件包管理软件进行安装,比如我的系统是Ubuntu,那么就可以在终端中输入:

xiaop@xiaop-laptop:~$ sudo apt-get install apache2

不同的系统有自己的软件包管理方式,其实都大同小异;

2.2.1 使用源代码安装;

(1) 获得源代码

xiaop@xiaop-laptop:~# lynx http://www.apache.org/dist/httpd/httpd-2_0_NN.tar.gz

NN表示当前所用的版本号

(2) 解压缩

xiaop@xiaop-laptop:~# gzip -d httpd-2_0_NN.tar.gz

或者

xiaop@xiaop-laptop:~# tar xvf httpd-2_0_NN.tar

(3) 配置.

xiaop@xiaop-laptop:~httpd-2_0_NN# ./configure --prefix= /usr/local/apache

表示Apache将安装在/usr/local/apache目录下

(4) 编译与安装

xiaop@xiaop-laptop:~httpd-2_0_NN# make

xiaop@xiaop-laptop:~httpd-2_0_NN# make install

(5) 测试

xiaop@xiaop-laptop:~httpd-2_0_NN# /usr/local/apache/bin/apachectl start


3. Apache 2 的配置;

安装完apache2后,可以在/etc/apache2/目录下查看文件:

xiaop@xiaop-laptop:/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 片断,

xiaop@xiaop-laptop:/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和端口设置的配置文件,

xiaop@xiaop-laptop:/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@xiaop-laptop:/#/etc/init.d/apache2 start

root@xiaop-laptop:/#/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 - xiaop [22/sep/2007:13:55:36 -0800] "GET /apache_pb.gif HTTP/1.0" 200 2326


注:

127.0.0.1 #表示访问这台服务器的客户端IP地址。

xiaop #表示用户的登录名。

[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 安装与配置》

Web 服务器 之 简易WWW服务器的架设相关推荐

  1. 本地计算机架设http服务器,Http File Server(简易Http服务器服务端)

    如果您感觉配置IIS和apache等web服务端太麻烦的话,不妨试试Http File Server,Http File Server是一套简易的Http服务器服务端系统,它无需安装,运行后简单配置一 ...

  2. RHEL5系统 sendmail+qpopper 架设简易邮件服务器

    转自 "小蜗牛技术之家" 博客  原稿: http://snailwarrior.blog.51cto.com/680306/139098 [小蜗牛奋力之作 ] 目标:在RHEL5 ...

  3. python局域网大文件_[源码]Python简易http服务器(内网渗透大文件传输含下载命令)...

    Python简易http服务器源码 import SimpleHTTPServer import SocketServer import sys PORT = 80 if len(sys.argv) ...

  4. Serv-U组建个人FTP服务器, ——完全图解教程:FTP架设、端口映射、动态域名申请...

    serv-u组建个人ftp服务器, --完全图解教程:ftp架设.端口映射.动态域名申请(一) 为了支持"共享小组事务"的胜利开设,我花了两天时间,参考网上众老鸟文章之长,由我这小 ...

  5. 【Python】快速创建一个简易 HTTP 服务器(http.server)

    引言 http.server 是 socketserver.TCPServer 的子类,它在 HTTP 套接字上创建和监听,并将请求分派给处理程序.本文是关于如何使用 Python 的 http.se ...

  6. python3编写简易统计服务器

    打点这个功能总是美其名曰"帮助提升用户体验",其实说白了就是记录用户做了哪些操作.目前国内很多通用软件都做了相关功能,像360.QQ等这样的以用户体验出众的软件,其打点的面自然也很 ...

  7. [投稿]通过Web界面在多台服务器上批量创建文件

    最近在EDAS产品上发现了一个有意思的功能,能够在Web界面上向多台服务批量下发命令执行,觉得这个功能能够极大的提升效率,因此想分享给其他小伙伴. 这里我以"通过Web界面在多台服务器上批量 ...

  8. Eclipse利用Maven的插件部署web项目到远程tomcat服务器

    使用maven的自动部署功能可以很方便的将maven工程自动打包并且部署到远程tomcat服务器,省去一些繁琐的操作,节省大量时间. 我使用的tomcat版本是8.5,tomcat7和tomcat8都 ...

  9. Web服务器和应用程序服务器有什么区别

    Web服务器和应用程序服务器有什么区别 [ 来源:javaworld.com | 作者:佚名 | 时间:2006-10-12 14:08:30 | 浏览:人次 ] 问:什么是应用程序服务器,什么是We ...

最新文章

  1. 刘强东宣布: 未来京东将减员50%,每天工作3小时!无人公司来了……
  2. asp.net搜索关键词高亮显示函数
  3. layer关闭当前窗口并刷新父窗口
  4. AIDL 发生异常的原因 Android java.lang.SecurityException: Binder invocation to an incorrect interface...
  5. 【风电功率预测】基于matlab粒子群算法优化LSTM风电功率预测【含Matlab源码 941期】
  6. 微信小程序实例源码下载
  7. 全志F1C100s使用记录:u-boot linux rootfs 编译与烧录测试(基于SD卡)
  8. 曲线平滑算法 matlab,matlab学习之降噪平滑算法
  9. 两相四线混合式步进电机用双H桥驱动电路之Multisim仿真及优化
  10. 用js两张图片合并成一张图片
  11. 极力推荐收藏的几个高清免费图片素材网站
  12. 【软件架构文档之SOC篇】
  13. 杭州地铁首末站周边停车场正酝酿停车收费优惠
  14. 漫步在洛杉矶的春天里
  15. 权限和归属关系解析与新手小白操作教程
  16. 前端团队研发效能提升的探索与实践
  17. spring boot 快速入门
  18. 浅析exit()和atexit()函数
  19. 吴恩达 OpenAI 的Prompt教程笔记 - ChatGPT Prompt Engineering for Developers
  20. Linux 开机自启动

热门文章

  1. vector int string 化
  2. opensuse-KDE桌面下自定义快捷键,ctrl+alt+t打开konsole
  3. C++学习笔记24,方法重写与方法隐藏
  4. app开发外包的流程、需求、报价,需要知道的细节!
  5. JavaScript:事件冒泡和事件委托
  6. Squid代理服务器安装设置
  7. DHCP之一 DHCP的部署安装
  8. X86中的RDTSC指令
  9. showModalDialog和showModelessDialog使用心得
  10. 数据访问层之数据库访问设计(转)