{
"title": "记一次从内存中恢复Nginx配置的操作",
"tags": [
"post",
"Linux",
"Centos",
"Nginx"
],
"summary": "背景 在公司维护自己的组件页面时,为了图方便直接在服务器上调试的Nginx.conf\n 好不容易调的差不多了,Nginx也跑起来了,习惯性的要删除一些临时的文件\n 结果手滑 直接一发 rm -rf nginx* 把服务器Nginx配置啥的都删了。\n 而且本地也没备份 也没推GIT..…",
"sources": [
"xlog"
],
"external_urls": [
"https://daxin-6967.xlog.app/Nginx"
],
"date_published": "2023-03-25T05:12:00.975Z",
"content": "## 背景\n\n在公司维护自己的组件页面时,为了图方便直接在服务器上调试的Nginx.conf\n好不容易调的差不多了,Nginx也跑起来了,习惯性的要删除一些临时的文件\n结果手滑 直接一发 rm -rf nginx* 把服务器Nginx配置啥的都删了。\n而且本地也没备份 也没推GIT.. \n好在网上有高人啊,算是整回来了。特此记录一下\n\n## 实操\n1. yum install gdb 安装gdb之后,找到Nginx master的进程ID\n2. 执行下面命令\n```\n# Set pid of nginx master process here\npid=339\n\n# generate gdb commands from the process's memory mappings using awk\ncat /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\n\n# use gdb with the -x option to dump these memory regions to mem_* files\ngdb -p $pid -x gdb-commands\n\n# look for some (any) nginx.conf text\ngrep worker_connections mem_*\ngrep server_name mem_*\n```\n3. 最后 grep server_name mem_* 命令输出了包含 server_name 的文件。\n```\n[root@centos]# grep server_name mem_*\n匹配到二进制文件 mem_558f03f58000\n匹配到二进制文件 mem_558f0416f000\n```\n4. 下载文件之后,用 Visual Studio Code (由于是二进制文件,不要用sublime之类的打开,会是乱码)打开,全局检索一下,就能看到熟悉的配置信息了。\n5. 文件开始大概位置可以用 http { 定位\n\n![image](ipfs://bafkreihxxzkebzgazwkim5beaxqmholgu37ocktah65tejaujr4jb4n4qq)\n6. 虽然不能直接复制粘贴的使用,但是也算找回来了,谁让自己手欠呢 QAQ\n\n## 参考链接\nhttps://segmentfault.com/a/1190000040692850",
"attributes": [
{
"value": "Nginx",
"trait_type": "xlog_slug"
}
]
}