如何查看完整的httpd配置?

时间:2014-11-26 15:29:08

标签: apache centos apache2 webserver server

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

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

有没有办法列出最终的httpd配置?
就像单个文件中的整个运行设置配置一样?

5 个答案:

答案 0 :(得分:37)

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

特别注意你的问题:' main' apache配置文件位于/etc/httpd/conf/httpd.conf(在CentOS 6中包含的repos的默认httpd安装的第221行的区域中,我假设您使用的是基于您的帖子标签),以及'补充'配置文件位于/etc/httpd/conf.d,并且需要明确包含在主配置文件中。例如,如果您在httpd.conf文件中搜索术语' Include',您会找到包含所有扩展名Include conf.d/*.conf的行.conf。 1}}在子目录conf.d中 - 按字母顺序排列,因此如果可能的话,您将希望熟悉配置文件解析的重要性。

顺便说一句,如果您使用的是基于shell的文本编辑器(如vim),我建议您默认启用行编号和语法突出显示,以便这样冗长的配置文件更容易解析自己并导航 - 在在vim的情况下,您可以通过在主目录中创建名为.vimrc的文件(或附加到现有文件)并添加以下行来执行此操作:

set nu
syntax on

答案 1 :(得分:10)

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

唯一的缺点是,如果您需要它来恢复已删除的配置并且尚未加载该模块,它将无法帮助您

答案 2 :(得分:6)

Apache HTTP Server Documentation

中所述
  

如果设置了config define -DDUMP_CONFIG,则mod_info将转储   服务器启动期间将预先配置的配置解析为stdout。

httpd -DDUMP_CONFIG -k start

DUMP_CONFIG需要启用mod_infoa2enmod 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,   LoadModule和LoadFile。
  •   
  • 控制配置文件本身的指令(例如Include),未列出,但包含在内   配置指令是。
  •   
  • 评论未列出。 (这可能被认为是一项功能。)
  •   
  • .htaccess文件中的配置指令未列出(因为它们不构成永久服务器配置的一部分)。
  •   
  • 如通常列出的容器指令,但是mod_info无法找出结束的行号   。
  •   
  • 由第三方模块(例如mod_perl)生成的指令可能不会列出。
  •   

答案 3 :(得分:1)

我有一个脚本(在Perl中为alas;请原谅,它很旧),该脚本可展平配置文件,删除注释(默认情况下)并包含# FILE注释,以便您可以确定哪个文件包含您所要的内容可能正在寻找。

我已经用Apache httpd编写了它,尽管它也可以在Oracle OHS中使用

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

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

示例:

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) &

多年来,我在导航配置时使用了很多这种配置,其中数千行配置分布在许多文件中。

答案 4 :(得分: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执行。