Nginx配置信息损毁又无备份时如何恢复
worker_processes *;
本文介绍在Nginx配置信息出现问题后,在没有备份的情况下,如何利用Nginx进程的虚拟内存恢复配置信息。
问题背景
假设 /etc/nginx/site-available 下有 a.example.com.conf、b.example.com.conf 两个配置文件,用于对两个域名做代理。
当不小心拷贝了以下数据,粘贴后习惯性的敲了回车键,由于命令中包含了重定向命令 "->",会直接覆盖文件,从而导致数据全部丢失。

下面做个简单测试,创建文件test;
执行命令 a.example.com.conf -> test。
由于普通文本中带有 -> test,虽然报了命令没找到,但 -> test 还是执行了,导致 test 文件数据被清空。
[root@centos]echo hello > test
[root@centos]# a.example.com.conf -> test
-bash: a.example.com.conf: 未找到命令
恢复配置
恢复思路是看Nginx进程的内存中有没有存储配置信息,如果有那能不能dump出来。一搜还真有,文章 Dump Current Nginx Config 提供了个小脚本 dump.sh,这个脚本需要 GDB: The GNU Project Debugger 工具的支持。
yum install gdb 安装gdb之后,找到Nginx master的进程ID,然后执行下面命令即可。
# 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_*
/proc/$pid/maps 文件包含了当前进程内存映射区域和访问权限信息,下面是部分样例数据。

最后 grep server_name mem_* 命令输出了包含 server_name 的文件。
[root@centos]# grep server_name mem_*
匹配到二进制文件 mem_558f03f58000
匹配到二进制文件 mem_558f0416f000
下载文件之后,用 Visual Studio Code (由于是二进制文件,不要用sublime之类的打开,会是乱码)打开,全局检索一下,以我的博客为例,就能看到熟悉的配置信息了。

将配置拷贝出来恢复nginx即可。
小结
本文介绍了一种利用Nginx的内存恢复数据的方式,虽然代理层问题不像DB数据问题那样致命,但影响也非常大。因此,除了关注数据安全之外,对于配置类的信息也要做好备份和版本管理。
作者:码代码的陈同学
链接:https://www.jianshu.com/p/1678b26fb98c
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
Nginx配置信息损毁又无备份时如何恢复的更多相关文章
- flask uwsgi和nginx配置信息
1. 安装 pip3 install uwsgi 2. uwsgi配置信息 创建一个uwsgi.ini文件 [uwsgi] socket=/opt/script/uwsgi.sock #启动程序时所使 ...
- [转]Nginx配置信息详解
序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HTTP服务器,也 ...
- 无备份时用dbms_repair恢复坏块的方法
份的情况下可以直接使用备份来恢复. 对于通过备份恢复,Oracel为我们提供了很多种方式,冷备,基于用户管理方式,RMAN方式等等. 对于这几种方式我们需要实现基于数据库以及文件级别的恢复.RMAN同 ...
- 自己站点的nginx 配置信息
user www www; worker_processes auto; error_log /home/wwwlogs/nginx_error.log crit; pid /usr/local/ng ...
- nginx 配置信息
主配置文件: cat /etc/nginx/nginx.conf# For more information on configuration, see:# * Official English Do ...
- Oracle备份恢复之无备份情况下恢复undo表空间
UNDO表空间存储着DML操作数据块的前镜像数据,在数据回滚,一致性读,闪回操作,实例恢复的时候都可能用到UNDO表空间中的数据.如果在生产过程中丢失或破坏了UNDO表空间,可能导致某些事务无法回滚, ...
- redis.conf配置信息详解
redis.conf配置信息详解 配置文件 # Redis 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写) # # 1k =& ...
- nginx配置ssl证书实现https访问
一,环境说明 服务器系统:ubuntu16.04LTS 服务器IP地址:47.89.12.99 域名:bjubi.com 二,域名解析到服务器 在阿里云控制台-产品与服务-云解析DNS-找到需要解析的 ...
- 阿里云 nginx配置ssl证书实现https访问
一,环境说明 服务器系统:ubuntu16.04LTS 服务器IP地址:47.89.12.99 域名:bjubi.com 二,域名解析到服务器 在阿里云控制台-产品与服务-云解析DNS-找到需要解析的 ...
随机推荐
- 【SpringMVC】Validation校验
一.概述 二.步骤 2.1 引入 Hibernate Validator 2.2 配置 2.3 创建CustomValidationMessages 2.4 校验规则 2.5 捕获错误 2.6 在页面 ...
- 你的系统需要SMB2或者更高版本,才能访问共享
- Android笔记(十二)AndroidManiFest.xml
AndroidManiFest.xml清单文件是每个Android项目所必须的,它是整个Android应用的全局描述文件.AndroidManiFest.xml清单文件说明了该应用的名称.所使用的图标 ...
- Windows Server 2008搭建单域环境
前言 一个典型的单域环境由主机,DC(Domain Controller域控制器).DNS服务器组成.DNS.DC都可以有多个,以实现负载均衡和容错 域中的计算机通过DNS解析域控制器,然后向域控制器 ...
- JavaScript函数封装调用
举个列子:我们在写前端页面,经常会使用到Jquery文本框内容,来判断一下输入值是否符合,常见的写法: <script> function test(){ $("#ID" ...
- 关于前端 jQuery 面试的知识点
参考一个博主整理的一些前端 jQuery 的一些面试题 参考博客:https://www.cnblogs.com/dashucoding/p/11140325.html 参考博客:https://ww ...
- Greenplum 行存、列存,堆表、AO表的原理和选择
转载自: https://github.com/digoal/blog/blob/master/201708/20170818_02.md?spm=a2c4e.11153940.blogcont179 ...
- Linux Swap是干嘛的?
swap是干嘛的? 在Linux下,SWAP的作用类似Windows系统下的“虚拟内存”.当物理内存不足时,拿出部分硬盘空间当SWAP分区(虚拟成内存)使用,从而解决内存容量不足的情况. SWAP意思 ...
- Ubuntu18.04开机动画(bootsplash)安装
一.搜索喜欢的主题 1.通过软件源搜索,这个比较简单但是没有太喜欢的.-----------------------------------------------------------pipci@ ...
- Our Journey of Dalian Ends && Our Journey of Xian Ends 最小费用最大流
2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛Our Journey of Dalian Ends 题意:要求先从大连到上海,再从上海打西安,中途会经过其他城市,每个城市只能去一次,出一次, ...