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

1.获取nginx 过程pid

执行

ps aux | grep nginx

你会失去如下输入,找到master的pid

[root@VM-8-3-centos /]# ps aux | grep nginxroot      6958  0.0  0.0 112812   968 pts/0    R+   09:10   0:00 grep --color=auto nginxroot     19193  0.0  0.3 109440  6360 ?        Ss   Jun08   0:00 nginx: master process nginxroot     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 heap5581bf774000-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.strhttp {    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 headerVary: Accept-Encoding    gzip_vary on;    # 

本人批改下格局之类的,就OK了

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

放进编辑器查看,会找到之前的配置,同样也是留神下格局