從執行中的nginx 中找到nginx.conf
最近生產環境中的一個nginx的配置檔案被誤覆蓋了(刪除還能恢復,覆蓋恢復太困難了),google了一下,有從/proc中
dump mem 的方式,不能說完全恢復,但是全部執行的server_name都能找到,附上作者原話:
You should get something like "Binary file mem_086cb000 matches". Open this file in editor, search for config (e.g. "worker_connections" directive), copy&paste. Profit!
Update: This method isn't entirely reliable. It's based on assumption that nginx process will read configuration and don't overwrite/reuse this memory area later. Master nginx process gives us best chances for that I guess.
大意是:你應該得到一些像 “mem_086cb000” 類似的二進位制檔案 。在編輯器中開啟這個檔案,搜尋配置(例如“worker_connections”指令),複製和貼上。
更新:這個方法並不完全可靠。它是基於:假設nginx在執行過程中會讀取配置和不覆蓋/不再利用該儲存區。我想這是主nginx的程式中給了我們最好的機會。
方法如下(希望能幫到有需要的人):
找到執行中的nginx主程式號
# Set pid of nginx master process here
pid=8192
# 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_*
然後用vi或vim開啟這個mem_*檔案查詢server_name即可。
另外可以用vi -b mem_* 開啟,再用:%!xxd 轉換成16進位制,查詢server_name即可。
比較方便的是下載到本地,用一下二進位制閱讀工具來搜尋檢視,會友好一些。
From: http://serverfault.com/questions/361421/dump-nginx-config-from-running-process/436239
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14184018/viewspace-1813800/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- windows 中nginx奇葩報錯 nginx: [emerg] unknown directive "#" in nginx/conf/nginx.conf:3WindowsNginx
- Nginx官方推薦的nginx.conf標準配置Nginx
- Nginx 配置檔案 nginx.conf 中文詳解Nginx
- 詳解nginx伺服器的nginx.conf 中 root目錄設定問題Nginx伺服器
- nginx.conf 配置檔案詳解Nginx
- 解決nginx: [emerg] unknown directive “stream“ in /etc/nginx/nginx.conf問題Nginx
- nginx: [emerg] "user" directive is not allowed here in /etc/nginx/conf.d/nginx.conf:1Nginx
- Nginx基礎02:配置檔案nginx.conf(Part1)Nginx
- Nginx 與 PHP 的執行機制NginxPHP
- 從反序列化到命令執行 - Java 中的 POP 執行鏈Java
- 從Fresco原始碼中找到非侵入式的答案原始碼
- nginx+php執行請求的工作原理NginxPHP
- 從一道執行題,瞭解Node中JS執行機制JS
- 從原始碼的角度解析執行緒池執行原理原始碼執行緒
- Java中的執行緒安全:從synchronized到Lock的深入理解Java執行緒synchronized
- 伺服器模型——從單執行緒阻塞到多執行緒非阻塞(中)伺服器模型執行緒
- 從一道執行題,瞭解瀏覽器中JS執行機制瀏覽器JS
- MacBook 電腦 nginx 執行不起來MacNginx
- 做了反向代理和負載均衡的nginx配置檔案簡單示例(nginx.conf) HTTP負載均衡/TCP負載均衡負載NginxHTTPTCP
- SQL執行內幕:從執行原理看調優的本質SQL
- 如何從整數陣列中找到最大和最小數陣列
- 從Hash Join的執行計劃的細節中能看到點啥
- JVM中的執行緒行為JVM執行緒
- 執行緒的中斷執行緒
- Java中的執行緒Java執行緒
- MySQL 主從複製的執行流程MySql
- JavaScript 中的執行上下文和執行棧JavaScript
- Nginx + Docker 手動叢集方式執行 EMQNginxDockerMQ
- nginx執行請求的工作原理之location匹配詳解Nginx
- 從偽並行的 Python 多執行緒說起並行Python執行緒
- java中執行緒池的生命週期與執行緒中斷Java執行緒
- 如何從 Vim 中訪問 shell 或者執行外部命令
- 『中級篇』docker之執行nginx跳轉到本地的jar並配置https(番外篇)(80)DockerNginxJARHTTP
- Java中的多執行緒Java執行緒
- Java中的執行緒同步Java執行緒
- vscode中執行gulp的taskVSCode
- Java中的執行緒-1Java執行緒
- Android中的執行緒池Android執行緒
- JAVA中執行緒的建立Java執行緒