关于nginx:误删nginxconf文件如何恢复

67次阅读

共计 1561 个字符,预计需要花费 4 分钟才能阅读完成。

当你不小心误删或者错误操作导致 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 局部。内存位于 5581bf7740005581bf8b70005581bf8b70005581bfa50000之间。

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 下载到本地

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

正文完
 0