DaXin Space

DaXin Space

5rKh6ZSZIOi/meaYr+S4gOS4qkJhc2U2NCDkvaDmmK/lr7nnmoQ=
github

内存からNginxの設定を復元する操作を記録する

背景#

自社のコンポーネントページをメンテナンスする際、便宜上サーバーで直接デバッグするための Nginx.conf を調整しました。
やっと調整がほぼ完了し、Nginx も起動しましたが、いつもの癖で一部の一時ファイルを削除しようとしました。
しかし、手が滑って rm -rf nginx* と入力してしまい、サーバーの Nginx の設定などがすべて削除されてしまいました。
しかも、ローカルにもバックアップもなく、GIT にもプッシュしていませんでした。
幸いにもオンライン上には有識者がいて、なんとか元に戻すことができました。ここに記録しておきます。

実践手順#

  1. yum install gdb を実行して gdb をインストールし、Nginx のマスタープロセスのプロセス ID を見つけます。
  2. 以下のコマンドを実行します。
# ここにNginxのマスタープロセスのpidを設定してください
pid=339

# awkを使用してプロセスのメモリマッピングからgdbコマンドを生成します
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

# -xオプションを使用してこれらのメモリ領域をmem_*ファイルにダンプするためにgdbを使用します
gdb -p $pid -x gdb-commands

# nginx.confのテキストを検索します
grep worker_connections mem_*
grep server_name mem_*
  1. 最後に、grep server_name mem_* コマンドで server_name を含むファイルが出力されます。
[root@centos]# grep server_name mem_*
二進数ファイル mem_558f03f58000 に一致しました
二進数ファイル mem_558f0416f000 に一致しました
  1. ファイルをダウンロードした後、Visual Studio Code(バイナリファイルなので、sublime などでは開かないでください。文字化けします)を使用して、グローバル検索を実行すると、慣れ親しんだ設定情報が表示されます。
  2. ファイルの開始位置はおおよそ http { の位置で特定できます。

image
6. 直接コピー&ペーストはできませんが、何とか元に戻すことができました。自分が手が滑ったせいです QAQ

参考リンク#

https://segmentfault.com/a/1190000040692850

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。