Despeja a configuração do nginx do processo em execução?

34

Aparentemente, eu não deveria ter passado a noite sem dormir tentando depurar um aplicativo. Eu queria reiniciar meu nginx e descobri que seu arquivo de configuração está vazio. Não me lembro de truncá-lo, mas dedos gordos e atenção reduzida provavelmente desempenharam o seu papel.

Eu não tenho backup desse arquivo de configuração. Eu sei que deveria ter feito isso.

Bom para mim, o daemon nginx atual ainda está em execução. Existe uma maneira de despejar sua configuração em um arquivo de configuração que ele entenderá depois?

    
por Sergio Tulentsev 18.02.2012 / 07:49

4 respostas

47

Você precisa de um gdb instalado para despejar as regiões de memória do processo em execução.

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

Você deve obter algo como "Arquivo binário mem_086cb000 corresponde". Abra este arquivo no editor, pesquise por configuração (por exemplo, diretiva "worker_connections"), copie e cole. Lucro!

Atualização: Este método não é totalmente confiável. Baseia-se na suposição de que o processo nginx lerá a configuração e não sobrescreverá / reutilizará essa área de memória posteriormente. O processo nginx principal nos dá melhores chances para isso, eu acho.

    
por 18.02.2012 / 14:50
7

Isso não ajudará nessa solicitação, mas poderá ajudar outras pessoas a chegarem aqui pelo mesmo motivo. As versões nginx mais recentes têm a opção -T para descarregar a configuração nginx de todos os arquivos de configuração nginx , não da memória:

nginx -T

Isso pode ser útil para confirmar que um arquivo de configuração está sendo lido, para comparar com outro servidor ou para procurar por configurações.

Novamente, isso não despejará a configuração do processo em execução , apenas o que um novo processo carregaria.

    
por 27.10.2016 / 18:39
2

O ngx_conf_t é um tipo de estrutura usada para configuração análise. Só existe durante a análise de configuração e obviamente você não pode acessá-lo após a análise de configuração é completo.

    
por 07.11.2012 / 13:44
0

a maneira ideal é procurar a ngx_conf_t struct da imagem do processo nginx.

Está definido aqui

link

Meu C & gdb suga para casa alguém poderia chegar a uma solução.

    
por 09.10.2012 / 05:24

Tags