erro de soquete de domínio nginx unix

18

Eu uso o fedora 17, e quando configuro o nginx com o uwsgi usando o soquete de domínio unix, quando coloco o soquete em um diretório com a permissão adequada, tudo bem, mas quando coloco o soquete no /tmpele causará um erro no nginx:

connect() to unix:/tmp/MySite.sock failed (2: No such file or directory) while connecting to upstream

O arquivo existe e possui permissão de leitura / gravação para o usuário nginx. Mas o que causa esse erro, realmente me deixa louco, alguém pode descobrir isso.

jeffgoku
fonte

Respostas:

33

Você não pode colocar soquetes destinados à comunicação entre processos /tmp.

Por razões de segurança, as versões recentes do Fedora usam diretórios temporários com espaço para nome , o que significa que todo serviço vê uma completamente diferente /tmpe só pode ver seus próprios arquivos nesse diretório.

Para resolver o problema, coloque o soquete em um diretório diferente, como /run(anteriormente conhecido como /var/run).

Michael Hampton
fonte
11
/ run não é gravável para um usuário comum
hostmaster
11
/runnão é gravável diretamente, mas você pode instruir o systemd a criar um diretório nele gravável pelos dois processos.
Michael Hampton
Para ajudar aqueles que pesquisam, isso também se aplica ao centos 7 e mover a pasta socket para / executar funcionou. Não é fácil encontrar esse problema, porque todas as contas podem ver a pasta e o arquivo em tmp (configure o 777 para testar); portanto, você nunca imaginaria que os processos não.
JosephK 30/03
0

SIM! Isso ajudou!

Estava vendo mensagens de check-startup-logs do uwsgi, mas não tinha dados nos logs de inicialização, não conseguiu descobrir o que estava acontecendo. Acabei precisando alterar o arquivo sock para um local não / tmp e adicionar:

catch-exceptions = true

para o arquivo ini do wsgi. Aconteceu que eu especifiquei o local do manipulador de arquivos de log em um diretório inexistente, para que não pudesse registrar os erros em primeiro lugar.

Kevin J. Rice
fonte