Dump di nginx config dal processo in esecuzione?


42

Apparentemente, non avrei dovuto passare la notte insonne a provare a eseguire il debug di un'applicazione. Volevo riavviare il mio nginx e ho scoperto che il suo file di configurazione è vuoto. Non ricordo di averlo troncato, ma le dita grasse e l'attenzione ridotta probabilmente hanno fatto la loro parte.

Non ho il backup di quel file di configurazione. So che avrei dovuto farlo.

Bene per me, l'attuale demone nginx è ancora in esecuzione. C'è un modo per scaricare la sua configurazione in un file di configurazione che capirà in seguito?

Risposte:


53

È necessario un gdb installato per scaricare le aree di memoria del processo in esecuzione.

# 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_*

Dovresti ottenere qualcosa del tipo "Corrispondenze file binari mem_086cb000". Apri questo file nell'editor, cerca config (es. Direttiva "worker_connections"), copia e incolla. Profitto!

Aggiornamento: questo metodo non è del tutto affidabile. Si basa sul presupposto che il processo nginx leggerà la configurazione e non sovrascriverà / riutilizzerà quest'area di memoria in un secondo momento. Il processo master nginx ci offre le migliori possibilità per quello che immagino.


2
Grazie, ma questo è troppo hardcore per me. Riscriverò il file di configurazione da zero :)
Sergio Tulentsev,

1
Un file mmap'd implica un filehandle di ope. Consulta per un modo più semplice per recuperarne uno: serverfault.com/questions/45237/link-to-a-specific-inode
Jeff Ferland

@JeffFerland nginx non tiene aperto fd per il file di configurazione.
kupson,

Sì, la maggior parte delle applicazioni non ... pensavo di aver modificato il mio commento dopo per includere la menzione. Ops.
Jeff Ferland,

1
Sembra così hardcore! Sono ufficialmente un hacker ora. Leggere la memoria per ritrovare le tue configurazioni. Grazie per aver spiegato @kupson
adriaan il

12

Questo non aiuterà su questa richiesta, ma potrebbe aiutare altri a raggiungere qui per lo stesso motivo. Le versioni nginx più recenti hanno l'opzione -T per scaricare la configurazione di nginx da tutti i file di configurazione di nginx , non dalla memoria:

nginx -T

Ciò può essere utile per confermare la lettura di un file di configurazione, per confrontarlo con altri server o per cercare configurazioni.

Ancora una volta, questo non scaricherà la configurazione dal processo in esecuzione , ma solo ciò che verrebbe caricato da un nuovo processo.


2

Ngx_conf_t è un tipo di struttura utilizzata per l'analisi della configurazione. Esiste solo durante l'analisi della configurazione e ovviamente non è possibile accedervi una volta completata l'analisi della configurazione.


2
È 'ovviamente' inaccessibile solo perché apparentemente non esiste una tale struttura implementata in nginx; altri programmi dispongono di tali servizi, come postconf -nPostfix o exim -bPExim o (il nome sbagliato) testparm -vper Samba, ecc.
Josip Rodin,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.