Apache 如何查看完整的httpd配置?
我试图弄清楚什么是httpd设置的完整配置 所有配置文件分散在不同的文件中(/etc/httpd/conf.d、httpd.conf、各种mod config) 有没有办法列出最终的httpd配置?Apache 如何查看完整的httpd配置?,apache,centos,apache2,webserver,server,Apache,Centos,Apache2,Webserver,Server,我试图弄清楚什么是httpd设置的完整配置 所有配置文件分散在不同的文件中(/etc/httpd/conf.d、httpd.conf、各种mod config) 有没有办法列出最终的httpd配置? 与单个文件中的整个运行安装配置一样?如arco444所述,您可以使用apachectl-S显示当前从配置运行的虚拟主机的概览,和apachectl-M来显示所有当前加载的模块-我不知道有什么工具可以在启动httpd时显示所有解析的配置的详细输出(以及它们解析的顺序),但我建议您熟悉httpd配置文件
与单个文件中的整个运行安装配置一样?如arco444所述,您可以使用
apachectl-S
显示当前从配置运行的虚拟主机的概览,和apachectl-M
来显示所有当前加载的模块-我不知道有什么工具可以在启动httpd时显示所有解析的配置的详细输出(以及它们解析的顺序),但我建议您熟悉httpd配置文件的一般结构:
/etc/httpd/conf/httpd.conf
(CentOS 6中包含的repos的默认httpd安装的第221行区域,我假设您是根据post标记使用的),“补充”配置文件位于/etc/httpd/conf.d
中,需要明确包含在主配置文件中。例如,如果您在httpd.conf
文件中搜索术语“Include
”,您将发现行Include conf.d/*.conf
,它按字母顺序包含子目录conf.d
中所有扩展名为.conf
的文件,因此,如果可能的话,您需要在某个时候熟悉配置文件解析的重要性
另一方面,如果您使用的是基于shell的文本编辑器(如vim),我建议您在默认情况下启用行号和语法高亮显示,以便这样长的配置文件更易于自己解析和导航-对于vim,您可以在主目录中创建一个名为.vimrc
(或附加到现有行)并添加以下行:
set nu
syntax on
为此,请使用mod_信息: 唯一的缺点是,如果您需要它来恢复已删除的配置,并且还没有加载模块,它将不会对您有多大帮助,如中所述 如果设置了config define-DDUMP\u config,mod\u info将转储 在服务器启动期间对标准输出进行预解析的配置
httpd -DDUMP_CONFIG -k start
DUMP\u CONFIG
需要启用mod\u 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, LoadModule和LoadFile
- 控制配置文件本身的指令,如Include,未列出,但包含 配置指令是
- 未列出注释。(这可能被视为一项功能。)
- 未列出.htaccess文件中的配置指令(因为它们不构成永久服务器配置的一部分)
- 通常会列出容器指令,如,但mod_info无法计算出关闭的行号
- 由第三方模块(如mod_perl)生成的指令可能不会列出
当我不得不维护太多的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执行。我有一个脚本(唉,在Perl中;请原谅,它是旧的)可以展平配置文件,删除注释(默认情况下)并包含#FILE
注释,以便您可以确定哪个文件包含您可能要查找的内容
我已经用apachehttpd编写了它,尽管它也被用于Oracle OHS
特别适用于使用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-Bbapachectl-S
对于运行配置,apachectl-M
显示加载的模块,除了apachectl-S
既不提供“完整配置”,也不提供“单个文件中的整个运行设置配置”.related:Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎与主题无关,因为它与编程或开发无关。请参阅帮助中心。也许,或者是一个更好的提问地方。@imme我觉得你的第一个“相关”问题很有趣链接就是这个问题。我也觉得很有趣的是,你在所有引用的链接上复制/粘贴了相同的评论。有趣的是:)我们在CentOS上使用的是apache 2.2。但是,apachectl不可用。它不支持IncludeOptional指令。
diff -Bb <(httpd-dump-config) <(ssh root@revproxy2 httpd-dump-config)
meld <(httpd-dump-config) <(ssh root@revproxy2 httpd-dump-config) &