关闭

Ubuntu 网络应用服务器 Apache 配置基础

437人阅读 评论(0) 收藏 举报
配置文件

官方发布的 Apache 的主配置文件是 httpd.conf, 服务器还会读取一个包含 MIME 文件类型的文件,其文件名由 TypesConfig 指令确定,默认值是mime.types 。

Ubuntu/Debian 下的 Apache 的主配置文件是 /etc/apache2/apache2.conf, 包含 MIME 文件类型的文件是 /etc/mime.types 。

此外,为了按逻辑分割配置,还可以用 Include 指令和通配符附加许多其他配置文件。Ubuntu 下附加了如下的配置文件:

# 包含动态模块的配置:
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
 
# 包含用户自己的配置:
Include /etc/apache2/httpd.conf
 
# 包含端口监听的配置:
Include /etc/apache2/ports.conf
 
# 包含一般性的配置语句片断:
Include /etc/apache2/conf.d/[^.#]*
 
……
 
# 包含虚拟主机的配置指令:
Include /etc/apache2/sites-enabled/[^.#]*

配置文件的语法

    *
      每一行包含一个指令,在行尾使用反斜杠”/”可以表示续行
    *
      配置文件中的指令不区分大小写,但是指令的参数 (argument) 通常区分大小写
    *
      以 ”#” 开头的行被视为注解并在读取时被忽略。注解不能出现在指令的后边
    *
      空白行和指令前的空白字符将在读取时被忽略,因此可以采用缩进以保持配置层次的清晰

无论是主配置文件还是用 Include 语句包含的配置文件,都应该遵从 Apache 的配置语法。
Apache 的模块

Apache 是模块化的服务器,它有两种编译方式:

    *
      静态编译:将核心模块和所需要的模块一次性编译
          o
            优点:运行速度快
          o
            缺点:要增加或删除模块必须重新编译整个 Apache
    *
      动态编译:只编译核心模块和 DSO (动态共享对象)模块 — mod_so
          o
            优点:各模块可以独立编译,并可随时用 LoadModule 指令加载,用于特定模块的指令可以用 <IfModule> 指令包含起来,使之有条件地生效。
          o
            缺点:运行速度稍慢

Ubuntu 中的 Apache 是动态编译的。在 Ubuntu 下配置模块:

   1.
      视需要修改 mods-available/ 目录下相关模块的配置文件
   2.
      使用 a2enmod 命令启用模块; 使用 a2dismod 命令停用模块

例如: 启用 rewrite 模块可以用如下命令:

sudo a2enmod rewrite

停用 cgi 模块可以用如下命令:

sudo a2dismod cgi

指令的作用域

从指令的作用域来划分,Apache 中有两类指令:

    *
      普通指令:普通指令对整个服务器都有效
    *
      容器指令:可以放置在容器内对特定的访问资源实施额外的配置,它只对特定的访问资源有效

Apache 中常用的容器包括:

    *
      <Directory> 和 <DirectoryMatch> : 用于对指定的目录实施额外的配置
    *
      <Files> 和 <FilesMatch> : 用于对指定的文件实施额外的配置
    *
      <Location> 和 <LocationMatch> : 用于对指定的 URL 实施额外的配置

    *
      容器都是成对出现的,所有在容器中使用的配置指令都应该放置在 <> 和 </> 内,如:

<Directory 路径名>
……
</Directory>

    *
      以上所有带 “Match” 的容器指令与其相应的不带 “Match” 的容器指令功能相同,只是在描述资源时可以使用正则表达式
    *
      这些容器还可以进行嵌套,以进行更精细的配置

此外,Apache 还具备同时支持多个站点的能力,称为虚拟主机。放置在 <VirtualHost> 容器中的指令仅对特定虚拟主机有效。
虽然大多数指令可以包含在任意的容器中,但是也用特例。要查询一个指令可以被应用于哪些配置段中,可以在 Apache 手册中查看该指令的 作用域 项。
基于目录的配置文件

Apache 除了使用主配置文件之外,还可以使用分布在整个网站目录树中的特殊文件来进行分散配置。这样的特殊配置文件称为基于目录的配置文件, 这些特殊的文件通常叫 .htaccess ,但是也可以用 AccessFileName 指令来改变它的名字。

显然,基于目录的配置文件 (.htaccess 文件)中指令的作用域是存放它的那个目录及其所有子目录。

    *
      .htaccess 文件的语法与主配置文件相同。放在 <Directory> 容器中的指令都可以出现在 .htaccess 文件中,具体能出现哪些指令由主配置文件中的 AllowOverride 指令来决定
    *
      由于客户对服务器的每次访问请求都会读取.htaccess文件,所以对这些文件的修改会立即生效,即无需使服务器加载配置文件或重新启动。

基本配置指令
服务器标识指令

    *
      ServerName : 服务器用于辨识自己的主机名和端口号
    *
      ServerAdmin : 服务器返回给客户端的错误信息中包含的管理员邮件地址
    *
      ServerSignature : 配置服务器生成页面的页脚(错误信息、mod_proxy的ftp目录列表、mod_info的输出)
    *
      ServerTokens : 控制了服务器回应给客户端的”Server:“应答头是否包含关于服务器操作系统类型和编译进的模块描述信息
    *
      UseCanonicalName : 决定 Apache 如何构造 URL 中 SERVER_NAME 和 SERVER_PORT 的指令。

文件定位指令

    *
      DocumentRoot : 组成网络上可见的主文档树的根目录
    *
      ErrorLog : 存放错误日志的位置
    *
      LockFile : 当 AcceptMutex 指令的值是 fcntl 或 flock 的时候,Apache 使用的锁文件的位置
    *
      PidFile : 设置服务器用于记录父进程(监控进程) PID 的文件。
    *
      ScoreBoardFile : 存储子进程协调数据(coordination data)的文件(Apache 使用 scoreboard 在父进程和子进程之间进行通信)
    *
      ServerRoot : 指定服务器安装的基础目录

收紧 Ubuntu 下的 Apache 配置

对于实际的产品服务器,应该首先收紧 Apache 的配置。为此可以在 /etc/apache2/conf.d/ 目录下创建一个新的 local_configs.conf 文件添加如下的配置:

/etc/apache2/conf.d/local_configs.conf

# 设置 ServerName
ServerName www.jamond.net
# 对 / 进行保护
<Directory />
        # Forbid default access to file system locations
        Order Deny,Allow
        Deny from all
        # prevent use of .htaccess files in all directories
        # apart from those specifically enabled.
        AllowOverride None
</Directory>
 
# 限制显示服务器的可用信息
ServerSignature Off
ServerTokens production

Apache 的管理工具

Apache 套件中包含了许多可执行程序,其中一部分是管理工具,本节仅介绍 apache2ctl。
apache2ctl

apache2ctl 是 Apache2 服务器的前端程序。他可以帮助管理员控制 Apache2 后台守护进程的功能。

apache2ctl脚本有两种操作模式:

    *
      作为简单的 apache2 的前端程序,设置所有必要的环境变量,然后启动 apache2,并传递所有的命令行参数。
    *
      作为 SysV 初始化脚本,接受简单的一个单词的参数,如:start, restart, stop ,并把他们翻译为适当的信号发送给 apache2 。

    *
      在 Ubuntu 的 Apache2 启动脚本 /etc/init.d/apache2 中,就是调用 apache2ctl 实现控制的。

apache2ctl 有两种语法格式:

apache2ctl -参数
apache2ctl 动作选项

使用 apache2ctl 的命令参数

    *
      显示 apache 的版本

apache2ctl -v

    *
      显示 apache 的版本和编译参数

apache2ctl -V

    *
      输出一个可用的命令行选项的简要说明

apache2ctl -h

    *
      输出一个静态编译在服务器中的模块的列表。它不会列出使用 LoadModule 指令动态加载的模块

apache2ctl -l

    *
      输出一个指令的列表,并包含了各指令的有效参数和使用区域

apache2ctl -L

    *
      仅对配置文件执行语法检查。。如果还指定了”-D DUMP_VHOSTS”,则会显示虚拟主机配置的详细信息

apache2ctl -t

    *
      显示从配置文件中读取并解析的设置结果 (目前仅显示虚拟主机的设置)

apache2ctl -S

使用 apache2ctl 的动作选项

    *
      启动 apache2 后台守护进程。如果已经启动,则产生一个错误。

apache2ctl start

    *
      停止 apache2 后台守护进程。

apache2ctl stop

    *
      重新启动 apache2 后台守护进程。如果守护进程尚未运行,则启动它。在重新启动守护进程之前,此命令会使用 configtest 自动检查配置文件,以确保 Apache 不会死掉。

apache2ctl restart

    *
      显示一个简要的状态报告。

apache2ctl status

    *
      优雅地重新启动 apache2 后台守护进程。如果守护进程尚未启动,则启动它。它和标准重新启动的不同之处在于:不会中断当前已经打开的连接,也不会立即关闭日志。这意味着,如果在日志滚动脚本使用它,则在处理日志之前必须加入一个实实在在的延迟,以确保老的日志文件在被处理前已经关闭。在重新启动守护进程之前,此命令会使用 configtest 自动检查配置文件,以确保 apache 不会死掉。

apache2ctl graceful

    *
      优雅地停止 apache2 后台守护进程。它和标准停止的不同之处在于:不会中断当前已经打开的连接,也不会立即关闭日志。

apache2ctl graceful-stop

    *
      执行一次配置文件语法检查。它解析配置文件,并报告 Syntax Ok 或者是特定的语法错误详细信息。

apache2ctl configtest
0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:164364次
    • 积分:2319
    • 等级:
    • 排名:第16078名
    • 原创:59篇
    • 转载:45篇
    • 译文:0篇
    • 评论:55条
    最新评论