Eu configurei o uwsgi e o nginx para funcionar através do soquete (chmod 777) que está localizado no diretório inicial do usuário, mas o nginx não pode acessar o soquete (13: Permissão negada em error.log
). Tentei mover o soquete para /tmp/ com 777 chmod, mas recebi um erro2: No such file or directory
2021/09/21 19:40:16 [crit] 68278#0: *17 connect() to unix:///tmp/my.sock failed (2: No such file or directory) while connecting to upstream, client: ***, server: ***, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///tmp/my.sock:", host: "****"
2021/09/21 20:10:16 [crit] 517#0: *1 connect() to unix:/home/***/.deploy/my.sock failed (13: Permission denied) while connecting to upstream, client: ***, server: ***, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/home/***/.deploy/my.sock:", host: "***"
PS selinux desativado
Responder1
Antes de chegar à resposta, você deve fazer todos os esforços para quebrar os maus hábitos de segurança de usar o chmod 777 ou desabilitar o SELinux. Em vez disso, você deve aprender completamente o modelo de permissão do UNIX para sempre saber as permissões corretas e configurar seus serviços para funcionarem com o SELinux para se beneficiar das camadas adicionais de segurança que ele fornece.
Portanto, a razão pela qual seu soquete enterrado no diretório inicial de um usuário não funciona é que umpaias permissões do diretório proíbem o acesso necessário (neste caso, search x
). Use namei -l /home/***/.deploy/my.sock
para ver as permissões de todos os diretórios pais de uma vez e corrija aqueles que não permitem permissão de pesquisa (provavelmente é /home/***
).
chmod +x /as/needed
Lembre-se também de corrigir as permissões e propriedade no próprio soquete conforme necessário.
Para completar, o motivo pelo qual seu soquete /tmp
não foi encontrado é que o nginx executado como um serviço do sistema não pode acessar o /tmp
diretório do sistema. O Systemd inicia-o com PrivateTmp=true
o que faz com que um diretório privado exclusivo seja criado e /tmp
o namespace do nginx seja colocado nesse diretório. É para isso que /tmp/xxx-systemd-private-foo
servem todos esses diretórios.