如何查看完整的httpd配置?

问题描述 投票:0回答:6

我试图弄清楚 httpd 设置的完整配置是什么。

所有配置文件都分散在不同的文件中(/etc/httpd/conf.d、httpd.conf、各种mod配置)

有没有办法列出最终的httpd配置?
喜欢单个文件中的整个运行设置配置吗?

apache centos apache2 webserver server
6个回答
58
投票

正如 arco444 所指出的,您可以使用

apachectl -S
显示当前从配置运行的 VirtualHosts 的概述,并使用
apachectl -M
显示所有当前加载的模块 - 我不知道有什么工具可以显示详细输出在 httpd 启动时解析的所有配置(以及它们解析的顺序),但我建议您熟悉 httpd 配置文件的一般结构

特别注意你的问题:“主”apache 配置文件位于

/etc/httpd/conf/httpd.conf
(在 CentOS 6 中包含的存储库中默认 httpd 安装的第 221 行区域中,我假设你根据你的情况使用它post 标签),“补充”配置文件位于
/etc/httpd/conf.d
中,并且需要明确包含在主配置文件中。例如,如果您在
httpd.conf
文件中搜索术语“
Include
”,您将找到行
Include conf.d/*.conf
,它包含子目录
.conf
中扩展名为
conf.d
的所有文件 - 按字母顺序排列,因此,如果可能的话,您将希望在某个时候熟悉配置文件解析的重要性。

顺便说一句,如果您使用基于 shell 的文本编辑器(例如 vim),我建议您默认启用行编号和语法突出显示,以便这样冗长的配置文件更容易自己解析和导航 - 在以下情况下vim,您可以通过在主目录中创建一个名为

.vimrc
的文件(或附加到现有文件)并添加以下行来完成此操作:

set nu
syntax on

36
投票

Apache HTTP 服务器文档

中所述

如果设置了配置定义-DDUMP_CONFIG,mod_info将转储 在服务器启动期间预先解析配置到标准输出。

httpd -DDUMP_CONFIG -k start

DUMP_CONFIG
需要启用
mod_info
a2enmod info

在 Ubuntu 中执行以下操作

sudo apache2ctl -DDUMP_CONFIG

如果你想删除行号,请这样做

sudo apache2ctl -DDUMP_CONFIG | grep -vE "^[ ]*#[ ]*[0-9]+:$"

或重定向到文件

sudo apache2ctl -DDUMP_CONFIG | grep -vE "^[ ]*#[ ]*[0-9]+:$" > /path/to/dump.conf

已知限制

mod_info 通过读取解析的配置来提供其信息, 而不是读取原始配置文件。有几个 解析配置树的方式造成的限制 创建:

  • 未列出立即执行而不是存储在解析配置中的指令。其中包括 ServerRoot、 加载模块和加载文件。
  • 控制配置文件本身的指令,如 Include,未列出,但包含 配置指令是。
  • 评论未列出。 (这可以被认为是一个功能。)
  • .htaccess 文件中的配置指令未列出(因为它们不构成永久服务器配置的一部分)。
  • 容器指令如正常列出,但 mod_info 无法找出结束的行号 .
  • 由第三方模块(例如 mod_perl)生成的指令可能不会列出。

17
投票

为此目的请使用 mod_info: http://httpd.apache.org/docs/2.2/mod/mod_info.html

唯一的缺点是,如果您需要它来恢复已删除的配置并且尚未加载模块,那么它不会对您有太大帮助


4
投票

我有一个脚本(唉,用 Perl 编写的;请原谅我,它很旧),它可以扁平化配置文件,删除注释(默认情况下)并包含

# FILE
注释,以便您可以找出哪个文件包含您可能要查找的内容.

我用 Apache httpd 编写了它,尽管它也与 Oracle OHS 一起使用

https://github.com/cameronkerrnz/scriptorium/blob/master/httpd-dump-config

对于使用 SSH 和 diff/meld/ 等比较不同机器上的配置特别有用。

示例:

httpd-dump-config | grep -i -e '# FILE:' -e servername -e serveralias
# FILE: /etc/httpd/conf/maintenance-curtain.conf
# FILE: /etc/httpd/conf.d/proxy.conf
# FILE: /etc/httpd/otago/secure-www.alias.conf
# FILE: /etc/httpd/conf.d/proxy.conf
    ServerName www.otago.ac.nz
    ServerAlias otago.ac.nz

这是使用 diff (CLI) 和 meld (GUI) 的示例:

diff -Bb <(httpd-dump-config) <(ssh root@revproxy2 httpd-dump-config)

meld <(httpd-dump-config) <(ssh root@revproxy2 httpd-dump-config) &

多年来,在导航分布在许多文件中的数千行配置的配置时,我经常使用它。


0
投票

当我不得不维护太多 Apache 配置时,我为自己配备了一个脚本来完成您的要求。对我帮助很大。

awk -v pc=$APCALL '

  NR == 1 {
    if (pf != "") {
      print "### End of "  pf  " ###"
    }
    print "### "  FILENAME  " ###"
    pf = FILENAME
  }
  { if (pc || ( $1 !~ "^#" && $0 != "" ) ) {
       printf "%5d %s\n", NR, $0
    }
  }
  $1 ~ /^Include(Optional)?$/ {
    $1 = ""
    system("for ACF in " $0 "; do apache_config.sh $ACF; done" )
  }
  END {
      print "### End of "  pf  " ###"
  }
' "$@"

如果你想查看注释和空行,你可以设置 APCALL 环境变量,但我大多没有这样做。注意:它必须从 ServerRoot 执行。


0
投票

/etc 目录中有主配置文件夹。

cd /etc/httpd

有多个配置文件夹。

[root@server httpd]# ls
conf  conf.d  conf.modules.d  logs  modules  run  state

要查看详细文件,请使用 -R 进行递归操作。

[root@server httpd]# ls -R
.:
conf  conf.d  conf.modules.d  logs  modules  run  state
./conf:
httpd.conf  magic
./conf.d:
autoindex.conf  README  userdir.conf  welcome.conf
./conf.modules.d:
00-base.conf  00-brotli.conf  00-dav.conf  00-lua.conf  00-mpm.conf  00-optional.conf  00-proxy.conf  00-systemd.conf  01-cgi.conf  10-h2.conf  10-proxy_h2.conf  README
[root@server httpd]#
© www.soinside.com 2019 - 2024. All rights reserved.