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-找到需要解析的 ...
随机推荐
- 简单使用auth认证实现登录注册
1 添加路由 //注册 Route::get('/register',"RegisterController@index"); Route::post('/register',&q ...
- Android笔记(三) 使得Activity之间可以跳转---Intent
什么是Intent 一个APP肯定不单单由一个Activity构成,我们在使用过程中,经常需要在多个Activity中跳转,Android中Intent可以帮我们来完成在各个Activity中跳转的功 ...
- Python的range和xrange
range 函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列. range示例: >>> r ...
- 透过CountDownLatch窥探AQS
本文来自公众号“Kahuna”,可搜索Alitaba119,欢迎关注,转载请注明出处,非常感谢 “ A synchronization aid that allows one or more thre ...
- 第七届蓝桥杯C/C++程序设计本科B组决赛 ——棋子换位(代码补全题)
棋子换位 有n个棋子A,n个棋子B,在棋盘上排成一行.它们中间隔着一个空位,用“.”表示,比如: AAA.BBB 现在需要所有的A棋子和B棋子交换位置.移动棋子的规则是:1. A棋子只能往右边移动,B ...
- Java8新特性--日期和时间API
如何正确处理时间 现实生活的世界里,时间是不断向前的,如果向前追溯时间的起点,可能是宇宙出生时,又或是是宇宙出现之前, 但肯定是我们目前无法找到的,我们不知道现在距离时间原点的精确距离.所以我们要表示 ...
- 第119题:杨辉三角II
一. 问题描述 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] 二. 解题思路 ...
- 洛谷P2577 午餐【贪心】【线性dp】
题目:https://www.luogu.org/problemnew/show/P2577 题意:n个人每个人有一个打饭时间和吃饭时间,将他们分成两个队伍.每个人打到饭之后就马上去吃饭.问怎么安排可 ...
- 简单了解Web Workers API
1. 为什么使用Web Workers API 通过使用该API,web应用程序可以独立于主线程,运行一个单独的线程来处理脚本. 可以在独立的线程中解决耗时较长的任务,避免主线程阻塞. 2. 应用 1 ...
- Oracle 10g和11g中的自动统计任务
1) 先来看下oracle 10g中的自动统计任务的问题. 从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动 ...