记一次从内存中恢复Nginx配置的操作

背景

在公司维护自己的组件页面时，为了图方便直接在服务器上调试的 Nginx.conf
好不容易调的差不多了，Nginx 也跑起来了，习惯性的要删除一些临时的文件
结果手滑 直接一发 rm -rf nginx* 把服务器 Nginx 配置啥的都删了。
而且本地也没备份 也没推 GIT..
好在网上有高人啊，算是整回来了。特此记录一下

实操

yum install gdb 安装 gdb 之后，找到 Nginx master 的进程 ID

执行下面命令

Copy
# Set pid of nginx master process here
pid=339

# generate gdb commands from the process's memory mappings using awk
cat /proc/$pid/maps | awk '$6 !~ "^/" {split ($1,addrs,"-"); print "dump memory mem_" addrs[1] " 0x" addrs[1] " 0x" addrs[2] ;}END{print "quit"}' > gdb-commands

# use gdb with the -x option to dump these memory regions to mem_* files
gdb -p $pid -x gdb-commands

# look for some (any) nginx.conf text
grep worker_connections mem_*
grep server_name mem_*

最后 grep server_name mem_* 命令输出了包含 server_name 的文件。

Copy
[root@centos]# grep server_name mem_*
匹配到二进制文件 mem_558f03f58000
匹配到二进制文件 mem_558f0416f000

下载文件之后，用 Visual Studio Code (由于是二进制文件，不要用 sublime 之类的打开，会是乱码) 打开，全局检索一下，就能看到熟悉的配置信息了。

文件开始大概位置可以用 http { 定位

6. 虽然不能直接复制粘贴的使用，但是也算找回来了，谁让自己手欠呢 QAQ

参考链接