手记

Web服务器 - apache篇(一)

好久前就有写博客的想法了,但怕写不好,所以一直没敢写。昨天晚上有一位同学买了阿里云的服务器,让我帮忙装一下网站的运行环境。我打算把这个过程写成我的第一篇博客,迈出我写博客的第一步,妙笔生花的文字我写不出来,记流水账我总会吧。

什么是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还好点,都是微软一家开发的,很多依赖关系根本不需要用户解决,毕竟用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/*"

最后

行了,一篇简单的博客。看了看时间,虽然写这篇博客大约花了我三个多小时,但收货也是巨大的。第一篇博客加油!!

70人推荐
随时随地看视频
慕课网APP

热门评论

博主,加油,话说你文中说的Apache的配置文件是Windows下的。。。

哇 ,Linux 大神, 给讲讲Windows 内核呗。 好流弊啊,Windows 都是小白。

确实很多干货  apache的知识其实很多用途但是很多人都不注意 以为没什么用途

查看全部评论