centos 如何查看完整的httpd配置?

izkcnapc  于 2023-10-18  发布在  其他
关注(0)|答案(6)|浏览(145)

我试图弄清楚什么是httpd设置的完整配置。
所有的配置文件都分散在不同的文件中(/etc/httpd/conf.d,httpd.conf,各种mod文件)
有办法列出最终的httpd配置吗?
就像在一个文件中的整个运行设置配置?

eh57zj3b

eh57zj3b1#

正如arco 444所指出的,您可以使用apachectl -S来显示当前从SQL Server运行的VirtualServer的概述,并使用apachectl -M来显示所有当前加载的模块--我不知道有哪个工具可以显示解析的所有SQL Server的详细输出(以及它们被解析的顺序)在httpd启动时,但我建议你先熟悉一下httpd配置文件的一般结构:

特别注意你的问题:'main' apache配置文件位于/etc/httpd/conf/httpd.conf中(在CentOS 6中包含的repos中的默认httpd安装上的第221行区域中,我假设您正在使用基于您的post标签),'supplementary'配置文件位于/etc/httpd/conf.d中,并且需要显式地包含在主配置文件中。例如,如果您在httpd.conf文件中搜索术语“Include”,您将找到Include conf.d/*.conf行,它包含了conf.d文件夹中所有扩展名为.conf的文件-按字母顺序排列,因此如果可能的话,您需要熟悉配置文件解析的重要性。
顺便说一句,如果你使用的是基于shell的文本编辑器,比如Vim,我建议你默认启用行号和语法高亮,这样冗长的配置文件就更容易解析和导航了-在vim的情况下,你可以在你的主目录中创建一个名为.vimrc的文件(或者附加到现有的目录中),然后添加以下行:

set nu
syntax on
byqmnocz

byqmnocz2#

如Apache HTTP Server文档中所述
如果设置了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)生成的指令可能不会列出。
dzjeubhm

dzjeubhm3#

请使用mod_info:http://httpd.apache.org/docs/2.2/mod/mod_info.html
唯一的缺点是,如果你需要它来恢复一个删除的配置,并没有加载模块,它不会帮助你太多

amrnrhlw

amrnrhlw4#

我有一个脚本(唉,在Perl;原谅我,它的旧),它会删除配置文件,删除注解(默认情况下),并包括# FILE注解,这样你就可以弄清楚哪个文件包含你可能要找的东西。
我用Apachehttpd编写了它,尽管它也用于OracleOHS
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) &

这些年来,当我浏览一个包含数千行配置的配置文件时,我经常使用这个方法。

pbpqsu0x

pbpqsu0x5#

当我不得不维护太多的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执行。

0dxa2lsx

0dxa2lsx6#

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

cd /etc/httpd

有多个配置文件夹。

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

查看递归操作的详细文件user -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]#

相关问题