误删nginx.conf文件如何恢复

当你不小心误删或者错误操作导致nginx.conf文件丢失,而且***nginx处于在住运行的状态***,在这种情况下我们就可以在内存中获取配置文件

# 1.获取nginx 进程pid

执行

ps aux | grep nginx

你会得到如下输出,找到master的pid

[root@VM-8-3-centos /]# ps aux | grep nginx
root      6958  0.0  0.0 112812   968 pts/0    R+   09:10   0:00 grep --color=auto nginx
root     19193  0.0  0.3 109440  6360 ?        Ss   Jun08   0:00 nginx: master process nginx
root     22326  0.0  0.3 112200  7412 ?        S    01:47   0:01 nginx: worker process

如上所示,nginx的主要进程pid为19193

# 2.查找内存映射

接下来我们需要检查进程正在使用哪些内存映射

sudo cat /proc/19193/maps | grep heap
[root@VM-8-3-centos /]# sudo cat /proc/19193/maps | grep heap
5581bf774000-5581bf8b7000 rw-p 00000000 00:00 0                          [heap]
5581bf8b7000-5581bfa50000 rw-p 00000000 00:00 0                          [heap]

可以看到有2处地方,我们只需要关注heap部分。内存位于5581bf774000-5581bf8b70005581bf8b7000-5581bfa50000之间。

# 3.转储堆

然后需要转储堆。确保已gdb安装。使用连接到进程

sudo gdb -p 19193

你会得到一个(gdb)提示。现在在这个提示下使用我们之前记下的地址,地址前需要加0x

(gdb) dump memory /tmp/nginx-memory 0x5581bf774000 0x5581bf8b7000

# 4.从转储中获取字符串数据

现在我们的转储可用/tmp/nginx-memory,现在我们需要从中获取字符串数据

sudo strings  /tmp/nginx-memory > /tmp/nginx-memory.str

# 5.查找 Nginx 配置

现在有了内存转储。大多数配置都会有http {一行,现在可以测试下/tmp/nginx-memory.str

grep -A 20 "http {" /tmp/nginx-memory.str
[root@VM-8-3-centos /]# grep -A 20 "http {" /tmp/nginx-memory.str
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    gzip on;
    # 
gzip
    gzip_min_length 1k;
    # gzip 
1-10
    gzip_comp_level 6;
    # 
javascript
    # 
 mime.types 
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    # 
http header
Vary: Accept-Encoding
    gzip_vary on;
    # 

自己修改下格式之类的,就OK了

# 6.把/tmp/nginx-memory.str下载到本地

放进编辑器查看,会找到之前的配置,同样也是注意下格式

lastUpdate: 2/24/2023, 5:32:22 PM