文档章节

Apache服务器编译安装以及配置详解

冷川
 冷川
发布于 2016/08/11 22:05
字数 2607
阅读 111
收藏 0

Apache服务器编译安装以及配置详解

简介

安装

下载

下载地址:https://httpd.apache.org/download.cgi,我这里下载的是httpd-2.2.31.tar.gz

安装Apache

  1. 解压
tar -zxvf httpd-2.2.31.tar.gz
cd httpd-2.2.31
  1. 配置
./configure

默认的安装路径是/usr/local/apache2,如果需要指定自己的安装目录,使用

./configure --prefix=_PREFIX_

比如:

./configure --prefix=/usr/bin/apache2
  1. 编译
make
  1. 安装
make install
  1. 配置
vi /usr/local/apache2/conf/httpd.conf

配置文件就在安装目录下,现在我们就只简单的配置下,只是修改ServerName:

ServerName localhost:80

  1. 测试
/usr/local/apache2/bin/apachectl -k start

我这里为了方便,就做了一个软连接

ln -s /usr/local/apache2/bin/apachectl /usr/bin/

直接用

apachectl -k start

启动,如果端口被占用,先把其它的停了或者修改下apache监听的端口号。 现在打开浏览器输入

http://localhost:80就可以看到apache启动了。

启动和停止Apache服务器

启动Apache

  1. httpd的主进程已root用户的权限运行,而它的子进程将会已一个较低权限的用户运行。
  2. 调用httpd可执行文件的推荐方法是使用apachectl控制脚本。apachectl里有一行:
   HTTPD='/usr/local/apache2/bin/httpd'

指向的是httpd可执行文件的位置,可以通过修改来指定要执行的httpd。或者使用-f 选项来指定配置文件

apachectl -f /usr/local/apache2/httpd.conf

  1. 启动:
apachectl -k start

开机启动Apache

如果需要开机启动Apache,需要把apachectl的调用过程加入到系统启动的文件中,在/etc/目录下,有很多 rcN.d文件夹和rc.local文件。

停止和重启Apache

  1. 立即停止:
apachectl -k stop

所有进行中的请求都会被强行终止,而且不在接受其它请求,不建议使用这种方式。

  1. 优雅的停止
apachectl -k graceful-stop

只有当进行中的请求都完成后才会退出,建议使用。

  1. 立即重启
apachectl -k restart

重新载入配置文件,重新打开日志文件。

  1. 优雅的重启
apachectl -k graceful

如果修改了配置文件,需要重新载入,建议使用graceful。

  1. 检查配置文件
apachectl configtest

或者

apachectl -t

修改了配置文件后,可以使用configtest选项来检查配置文件是否正确。

配置详解

主配置文件

Apache的主配置文件是httpd.conf,可以用Include指令和通配符附加其他配置文件,我们下面讲解的内容主要是针对httpd.conf。

配置文件语法

  1. Apache配置文件的每一行包含一个指令,配置文件中的指令是不区分大小写的。
  2. 可以用 apachectl configtest 或者命令行选项 -t 检查配置文件中的错误,而无须启动Apache服务器。

模块

  • Apache是模块化的服务器,这意味着核心中只包含实现最基本功能的模块。扩展功能可以作为模块动态加载。
  • 默认情况下,只有base组的模块被编译进了服务器。
  • 如果服务器在编译时包含了DSO模块,那么各模块可以独立编译,并可随时用LoadModule指令加载; 否则,要增加或删除模块必须重新编译整个Apache。
  • 用于特定模块的指令可以用< Ifmodule >指令包含起来,使之有条件地生效。
  • 用命令行参数 -l 可以查看已经编译到服务器中的模块。

指令的作用域

相关的模块:

<Directory>
<DirectoryMatch>
<Files>
<FilesMatch>
<Location>
<LocationMatch>
<VirtualHost>
  • 主配置文件中的指令对整个服务器都有效。如果你只想改变某一部分的配置,你可以把指令嵌入到 < directory >、< directorymatch >、< files >、< filesmatch >、< location >、< locationmatch >配置段中,这样就可以限制指令的作用域为文件系统中的某些位置或特定的URL。这些配置段还可以进行嵌套,以进行更精细的配置。
  • Apache还具备同时支持多个站点的能力,称为虚拟主机。 < virtualhost >配置段中的指令仅对该段中的特定站点(虚拟主机)有效。

服务器全局配置

  1. ServerRoot "/usr/local/apache2" -->Apache的安装位置。
  2. Listen 80 -->服务器监听的端口号,具体可以看地址和端口的绑定小节。
  3. ServerName www.lengchuan.com:80 -->站点名称,也就是我们网站的主机名。
  4. ServerAdmin you@example.com -->管理员邮箱地址。
  5. DocumentRoot "/www/lengchuan/test/" -->网站文件存储位置。

访问控制

  1. 我们只允许本机访问 我们的发布目录在/www/lengchuan/test/,我们需要使用< Directory />来配置:
<Directory '/www/lengchuan/test/'>
Order deny,allow
Deny from all
allow from 192.168.1.103
</Directory>

这样,就只有我们本机192.168.1.103才可以访问这个< Directory >

  1. 我们只允许一个网段内用户访问
<Directory '/www/lengchuan/test/'>
Order deny,allow
Deny from all
allow from 192.168.0.0/24
</Directory>

在网段192.168.0.0/24内的所有用户都可以访问。

< Directory >配置属性 详细的配置参考:https://httpd.apache.org/docs/2.2/mod/core.html#directory

<directory>
   Options FollowSymLinks
   AllowOverride None
   Order deny,allow
   Deny from all
</directory>
  • Options:配置在特定目录使用哪些特性,常用的有:

    1. ExecCGI: 在该目录下允许执行CGI脚本。
    2. FollowSymLinks: 在该目录下允许文件系统使用符号连接。
    3. Indexes: 当用户访问该目录时,如果用户找不到DirectoryIndex指定的主页文件(例如index.html),则返回该目录下的文件列表给用户。
    4. SymLinksIfOwnerMatch: 当使用符号连接时,只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问。
  • AllowOverride:允许存在于.htaccess文件中的指令类型(.htaccess文件名是可以改变的,其文件名由AccessFileName指令决定):

    1. None: 当AllowOverride被设置为None时。不搜索该目录下的.htaccess文件(可以减小服务器开销)。
    2. All: 在.htaccess文件中可以使用所有的指令。
  • Order:控制在访问时Allow和Deny两个访问规则哪个优先:

    1. Allow:允许访问的主机列表(可用域名或子网,例如:Allow from 192.168.0.0/24)。
    2. Deny:拒绝访问的主机列表。

地址和端口的绑定

Apache在启动时会默认监听本机所有的地址。但其实我们在使用的时候需要监听特定的地址或者地址与端口的组合, 当我们使用虚拟主机的时候,就必须对明确指定监听的端口或者地址。

  1. 让服务器接收来自80和8080端口的请求
Listen 80
Listen 8080
  1. 接收来自多个指定的地址+端口的组合:
Listen 123.45.67.89:80
Listen 111.12.23.6:8080
  1. IPV6地址需要用中括号括起来
Listen [2001:db8::a00:20ff:fea7:ccea]:80

主页文件设置

通过DirectoryIndex来设置默认的主页:

DirectoryIndex index.html index.jsp

日志文件

Apache的日志包括错误日志(Error Log)和访问日志(Access Log)。

错误日志

错误日志的配置由ErrorLog指定:

ErrorLog "logs/error_log"

访问日志

访问日志的配置由CustomLog指定:

CustomLog "logs/access_log" common

日志文件格式

LogFormat指令可以指定日志的输出格式。

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined

LogFormat "%h %l %u %t "%r" %>s %b" common

这里定义了两种日志的格式,combined和common。

参数含义

我这里有两条记录:

common:

%h %l %u %t "%r" %>s %b

127.0.0.1 - - [03/Aug/2016:16:05:18 +0800] "GET / HTTP/1.1" 200 44

combined:

%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"

127.0.0.1 - - [03/Aug/2016:17:17:40 +0800] "GET / HTTP/1.1" 200 44 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36"

  1. %h(127.0.0.1): 客户端的ip地址。如果HostnameLookups设为On ,则服务器会尝试解析这个IP地址的主机名, 并替换此处的IP地址, 但并不推荐这样做,因为它会显著拖慢服务器,最好是用一个日志后续处理器来判断主机名,比如logresolve 。如果客户和服务器之间存在代理,那么记录中的这个IP地址就是那个代理的IP地址,而不是客户机的真实IP地址。

  2. %l(-):这是由客户端identd进程判断的RFC1413身份(identity)。

  3. %u(-):这是HTTP认证系统得到的访问该网页的客户标识(userid),环境变量REMOTE_USER会被设为该值并提供给CGI脚本。如果状态码是401,表示客户未通过认证,则此值没有意义。如果网页没有设置密码保护,则此项将是"-"。

  4. %t([03/Aug/2016:16:05:18 +0800]):这是服务器完成请求处理时的时间,其格式是: [日/月/年:时:分:秒 时区] 日 = 2数字 月 = 3字母 年 = 4数字 时 = 2数字 分 = 2数字 秒 = 2数字 时区 = (+|-)4数字。 可以在格式字符串中使用 %{format}t 来改变时间的输出形式。

  5. "%r"("GET / HTTP/1.1"):引号中是客户端发出的包含许多有用信息的请求行。可以看出,该客户的动作是GET ,请求的资源是网站首页(/) ,使用的协议是HTTP/1.1 。另外,还可以记录其他信息,如:格式字符串"%m %U%q %H"会记录动作、路径、查询字符串、协议,其输出和"%r"一样。

  6. %>s (200):这是服务器返回给客户端的状态码。这个信息非常有价值,因为它指示了请求的结果,或者是被成功响应了(以2开头),或者被重定向了(以3开头),或者出错了(以4开头),或者产生了服务器端错误(以5开头)。

  7. %b(44):最后这项是返回给客户端的不包括响应头的字节数。如果没有信息返回,则此项应该是"-",如果希望记录为"0"的形式,就应该用%B

  8. "%{Referer}i" (-):"Referer"请求头。此项指明了该请求是被从哪个网页提交过来的,这个网页应该包含有我们网站的地址或者其连接。

  9. "%{User-agent}i" ("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36"): "User-Agent"请求头。此项是客户端提供的浏览器识别信息。

配置多个访问日志文件
        LogFormat "%h %l %u %t \"%r\" %>s %b" common

        CustomLog logs/access_log common

        CustomLog logs/referer_log "%{Referer}i -> %U"

        CustomLog logs/agent_log "%{User-agent}i"
条件日志
# 不记录本机发出的请求

SetEnvIf Remote_Addr "127.0.0.1" dontlog

# 不记录对robots.txt文件的请求

SetEnvIf Request_URI "^/robots.txt$" dontlog

# 记录其他请求

CustomLog logs/access_log common env=!dontlog

© 著作权归作者所有

冷川
粉丝 22
博文 18
码字总数 23332
作品 0
海淀
高级程序员
私信 提问
详解LAMP源码编译安装

实战:LAMP源码编译安装 家住海边喜欢浪:zhang789.blog.51cto.com 目录 详解LAMP源码编译安装 测试LAMP搭建开源数据web管理程序phpMyadmin 详解LAMP源码编译安装 LAMP简介 是当下非常流行的...

好笔记运维
2016/10/16
0
0
编译安装Apache2.4.12

一、准备工作 二、编译安装 三、相关文件路径配置 四、主配置文件常用配置信息详解 一、准备工作 安装编译环境 yum groupinstall "Development tools" 下载所需文件 [root@localhost ~]# mk...

youshine
2015/05/19
0
0
apache+mysql+php环境部署详解

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。 php是英文超文本预处理语言Hyp...

qq610148679
2018/06/28
0
0
《Linux应用大全 服务器架设》一书,讲述众多服务器配置

《Linux应用大全 服务器架设》介绍了Linux服务器配置各方面的知识,主要包括网络配置文件和网络命令、OpenSSH、VNC、NFS、Samba、DHCP、DNS、Apache、Tomcat、Nginx、SVN、Vsftpd、Sendmail、...

airfish2000
2015/12/22
0
0
Apache基础教程

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的A...

harries
2016/03/23
77
0

没有更多内容

加载失败,请刷新页面

加载更多

arcgis arcpy 克里金插值 掩膜 配置符号系统 自动生成图片

整体思路,最后要加载到mxd文件中,然后导出图片 首先加载mxd文件 mxd = mapping.MapDocument(r"./11.mxd") 然后读取数据 并加载到图层中 sr = arcpy.SpatialReference(4326) # 读取csv...

可达鸭Go
55分钟前
4
0
漂亮有创意的思维导图模板分享

相信很多人使用在绘制思维导图时很喜欢使用模板进行编辑,它能够让你在短时间内快速创造出一个风格明显好看的思维导图,对绘制时间以及使用够感受影响都是较为深刻的,下面为大家分享几款漂亮...

干货趣分享
今天
4
0
使用js实现对cookie的增删改查

简单的操作cookie 存储cookie(key为test;value为testValue): document.cookie = "test=testValue"; 存储多个cookie: document.cookie = "test1=testValue1";document.cookie = "test2=te......

被毒打的程序猿_先瑞
今天
4
0
ApacheCN 公众号文章汇总 2019.9

ApacheCN 优质博文推荐计划正式启动 接受以下主题的博文: 人工智能(论文解读,比赛心得,面经,知识点讲解) 环材化生劝退 CS 留学申请,IT 外企求职 每日从所有投稿中精选两篇,在 Apache...

ApacheCN_飞龙
今天
5
0
Intellij Idea显示回退和前进按钮的方法

方法1:使用快捷键: 回到上一步 ctrl + alt + <-(左方向键) 回到下一步 ctrl + alt + ->(右方向键) 方法2:在界面显示: View -> 勾选ToolBar 方法3(推荐): (1)Preferences -> Ap...

孟飞阳
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部