有没有什么方法可以让 Apache Web 服务器从内存中显示其当前运行的配置,即不通过解析配置目录中的文件?
我刚刚意外地覆盖了服务器上的 vhost 配置(是的,我知道,应该有备份!),虽然我可以相当轻松地重建它(非常新的服务器,如此简单的配置,因此还没有备份 - 这是明天的任务),想知道是否有任何方法可以让 Apache 显示其实时运行的配置,而不仅仅是解析文件(正如 httpd -S 似乎所做的那样)。
尝试过谷歌搜索和在 ServerFault 上搜索,但一无所获。我可以想象这可能会随着时间的推移拯救一些人。:)
答案1
这是从内存中恢复 Apache2 配置的方法:
- 获取此 serverfault 线程中提到的 dump-all-memory-of-pid.sh 脚本。
#!/bin/bash
grep rw-p /proc/$1/maps | sed -n 's/^\([0-9a-f]*\)-\([0-9a-f]*\) .*$/\1 \2/p' | while read start stop; do gdb --batch --pid $1 -ex "dump memory $1-$start-$stop.dump 0x$start 0x$stop"; done
- 将其放入文件(例如“dump-all-memory-of-pid.sh”)并使其可执行
- 用法:
./dump-all-memory-of-pid.sh [pid]
- 输出将打印到具有以下名称的文件中:
pid-startaddress-stopaddress.dump
- 依赖项:
gdb
获取 apache 进程的 pid
pgrep -uroot apache2
转储进程的内存
mkdir /tmp/apache_dump && cd /tmp/apache_dump sh /path/to/dump-all-memory-of-pid.sh <PID>
对所有转储文件进行 grep,查找您希望在 apache 配置文件中出现的内容。
grep DocumentRoot *
在 vim 中打开匹配的转储文件并搜索字符串。
vim 24374-7f159d56c000-7f159d72c000.dump
通过输入“/”进行搜索,例如“/DocumentRoot”,然后只需复制出您想要的文本。