很久以前就有写博客的想法,但怕写不好,一直没有开始写。任何事情,都得有个开始吧,都得要迈出第一步吧,所以今天写这篇Web服务器的文章,来迈出我写博客的第一步,妙笔生花的文字我写不出来,记流水账我总会吧。
什么是Web服务器
Web服务器一般是网站服务器,是安装在计算机中的一个程序,可以向浏览器等Web客户端发送文档,你可以在Web服务器上放置数据文件,让全世界的人来浏览。目前比较主流的几个Web服务器软件包括世界使用量排名第一的apache,轻量级,提供反向代理功能,支持高并发的nginx,还有微软的iis服务器,今天先来介绍apache服务器。
Apache简介
Apache服务器的全称是 Apache HTTP Server,支持多个平台,速度快,运行稳定,可以通过简单的api扩展,把php/Python等解释器加入到服务器中,所以Apache的应用十分广泛。
在Internet开始流行的时候,出现了http协议,美国的一所大学开始组织研究生编写基于http协议的Server端程序和Client,因为这个项目是出于学术的目的,进行了一段时间后解散了,并把项目开源了。由于Internet的发展,对http Server的需求越来越大,公开源码的项目成了研究的起点,很多黑客(顶尖的计算机高手)给程序提交代码,增加功能,并对出现的bug加以修复,这个服务器端程序不断完善,最终成为了今天的Apache服务器,而那个Client最终演变成了今天的firefox。
Apache名字的由来
Apache之父说:我选择apaceh这个名字是选择它所包含的积极的含义。阿帕奇族是最后一个屈服于美国政府的名族。当时我担心大公司迟早会参与竞争并‘教化’这块最早的互联网之地,所以在我看来,阿帕奇是一个很好的名字。
apache服务器的安装
linux下软件的安装方式有两种,源码安装和rpm安装,源码安装优点是用编译器编译后的代码更贴近硬件,运行效率更高,编译安装还能提供很多编译的参数,可以最大化定制软件,缺点就是编译过程比较耗时,编译过程中出现错误不好解决,像apache服务器是用c语言写的,编译时如果出现什么报错信息,就要去搜索引擎查明找原因,然后修改c语言的代码,对没有c语言基础的还是挺困难的。rpm(二进制文件)安装,已经提前帮你编译成了二进制代码,省去了编译时间,缺点就是相对于编译安装的软件运行效率稍低,不能定制安装时的一些参数。
如果你从apache官网下载apache安装也挺麻烦的,还要解决依赖关系的问题。什么是依赖关系呢,举个windows的例子,运行某个游戏它提示你缺少*.dll文件,安装某软件时要你安装.net库,一个程序的运行需要另一个程序提供一些支持,这就是依赖关系。windows还好点,都是微软一家开发的,很多依赖关系根本不需要用户解决。而linux就不同了,它的整个系统是由很多开发组共同完成的,linux的软件包是很灵活的,很多软件都不是必须的,有些功能可有很多软件提供。安装某个软件时可能需要另一个软件的功能支持,而这个软件可能还需要其他软件的功能支持,通常安装一个软件会依赖数十个文件,上百个都有可能,安装一个软件就要安装这么多软件,操作繁琐并且耗费时间的,有时还会碰上环形依赖。
好在各个linux系统都提供了依赖包管理工具,像RedHat和Centos下提供的的yum工具,他可以自动解决所有依赖关系,并全部下载安装,无须自己一次次繁琐地下载安装,安装apache只需要运行yum -y install apache
命令就可以完成apache的安装,-y
的意思是遇到所有提示都选yes。
其实除了源码安装和rpm安装外,还有一种安装方式,脚本安装。在windows下搭建网站环境运行环境也挺麻烦的,好在有wamp server或Xampp,phpstudy等软件包,安装了它们后那些常用的软件apache,mysql,php,phpmyadmin都集成了,不用你一个一个去下载,并配置关联它们。在linux下有没有这种程序呢,那就是shell脚本了,所谓脚本安装,就是别人把程序的安装过程都写在一个shell脚本里,他的本质还是用到了源码安装和rpm安装,所以没把它门归到那两类中。一个以前需要花一天时间安装的软件,用脚本安装包的话,运行一下脚本,进行一些简单的配置,它便帮你进行那一系列繁琐地安装过程。脚本安装的坏处就是不能定制,软件安装在哪,软件的一些参数设置,脚本的作者都已近帮你写好了,除非是你自己写的脚本或者是自己会修改脚本。在这里给大家推荐我自己用的一款脚本 名字叫oneinstack,大家自己搜索
apache主配置文件
前面啰嗦了那么一堆,写了一下apache的安装过程,现在开始写这篇文章中最重要的内容,apache的主配置文件httpd.config中一些常见的配置项。
主配置大约500多行,但其中只有一小部分的apache指令,大多数都是注释,去掉注释大约100多行,下面是配置文件的内容,通过翻译和搜索引擎,我给每条指令都加上了注释。
//是否显示apache的版本信息
ServerSignature On
//在出现错误页的时候不服务器操作系统的名称
ServerTokens Full
//整个配置文件的根路径
ServerRoot "G:/wamp/wamp/bin/apache/apache2.4.9"
Define APACHE24 Apache2.4
//监听的服务器和端口号
Listen 0.0.0.0:80
Listen [::0]:80
//apache是基于模块化设计的,在此设置加载一些动态模块
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule php5_module "G:/wamp/wamp/bin/php/php5.5.12/php5apache2_4.dll"
//设置apache运行账户及账户组
<IfModule unixd_module>
User daemon
Group daemon
</IfModule>
//管理员的邮箱,apache运行出现严重错误可以向管理员发邮件
ServerAdmin admin@example.com
//主机名
ServerName localhost:80
//是否进行域名的解析
HostnameLookups Off
//网站的根目录
DocumentRoot "G:/wamp/wamp/www/"
//apache下文件的访问权限,下面更具体的设置可以覆盖此处设置
<Directory />
//.htaccess是否可用
AllowOverride none
Require all denied
</Directory>
//网站的一些设置
<Directory "G:/wamp/wamp/www/">
//Indexes允许查看目录树,设置-Indexes可以关闭目录树
Options Indexes FollowSymLinks
//是否支持.htaccess
AllowOverride all
Require all granted
Order Deny,Allow
//允许谁访问
Allow from all
</Directory>
//定义一些首页文件
<IfModule dir_module>
DirectoryIndex index.php index.php3 index.html index.htm
</IfModule>
//单个文件的权限
<Files ".ht*">
Require all denied
</Files>
//错误日志
ErrorLog "G:/wamp/wamp/logs/apache_error.log"
//定义记录错误的级别
LogLevel warn
//定义写日志的一些格式
<IfModule log_config_module>
LogFormat "%h %l %u %t \\\\\\\\\\\\\\\\"%r\\\\\\\\\\\\\\\\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \\\\\\\\\\\\\\\\"%r\\\\\\\\\\\\\\\\" %>s %b
</IfModule>
//日常日志
CustomLog "G:/wamp/wamp/logs/access.log" common
</IfModule>
//在不同目录下有不同网站,但在同一个域名下,这时可以配置alias
<IfModule alias_module>
ScriptAlias /cgi-bin/ "G:/wamp/wamp/bin/apache/apache2.4.9/cgi-bin/"
</IfModule>
//文件夹权限的设置
<Directory "G:/wamp/wamp/bin/apache/apache2.4.9/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
//设置一些文件类型对应的处理方式
<IfModule mime_module>
TypesConfig conf/mime.types
AddEncoding x-compress .Z
AddEncoding x-gzip .gz .tgz
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php3
</IfModule>
EnableSendfile off
AcceptFilter http none
AcceptFilter https none
//引入一些配置文件,把一些配置项写入独立的文件,让主配置文件显得简洁
Include conf/extra/httpd-autoindex.conf
Include conf/extra/httpd-vhosts.conf
//进行条件判断,如果加载了proxy_html_module模块则包含
<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
//代表引入 G:/wamp/wamp/alias 下的所有文件
Include "G:/wamp/wamp/alias/*"
最后
行了,一篇简单的博客。虽然花了我三个多小时,但收获也是巨大的。第一篇博客,加油!!
文章同时发布在钟声的博客,感谢您的阅读。