Apache, Permissão negada em mod_wsgi, corrigida com WSGISocketPrefix - Mas por quê?

6

No que parecia ser uma ocorrência aleatória, um site foi desativado esta noite e depois de dar uma olhada nos logs de erro do Apache, foi este problema:

 (13)Permission denied: mod_wsgi (pid=2751): Unable to connect to WSGI daemon process 'mysite.com-ssl' on '/var/run/apache2/wsgi.2579.0.2.sock' after multiple attempts.

Agora eu leio o wiki ConfigurationIssues para mod_wsgi, e a correção parece razoável. Não foi possível gravar nesse diretório, portanto, uma alternativa deve ser especificada com WSGISocketPrefix

Então eu defino:

WSGISocketPrefix /var/run/wsgi

Ele corrige o problema e o site pode ser carregado após a reinicialização do Apache.

No entanto, estou muito curioso - Por que esta dirctory deixou de estar disponível para gravação? Estou esquecendo de algo? O diretório /var/run/apache2 é de propriedade de root:root , mas os novos sockets que agora são executados em /var/run/wsgi*.sock são www-data:root .. Houve uma reinicialização do servidor, mas é isso. Talvez algo agora assuma as permissões desse diretório na inicialização?

Alguma ideia? Obrigado!

    
por Bartek 08.12.2011 / 05:00

1 resposta

8

O erro da sua serra também pode ocorrer como um problema transitório se você tiver feito uma reinicialização do Apache e um processo do Apache tiver conexões de soquete ainda ativas que ainda não foram chamadas para o processo do daemon mod_wsgi para solicitação inicial ou solicitação subseqüente manter vivo no socket.

Isso ocorrerá porque, na reinicialização normal, o processo do daemon mod_wsgi é reiniciado independentemente e, ao fazer isso, o caminho para o arquivo de soquete é alterado de forma diferente. Isso significa que os processos antigos de trabalho disponíveis para manipular as solicitações atuais e de keep-alive falharão ao se conectar ao daemon, pois eles ainda tentarão usar o caminho antigo para o arquivo de soquete.

Quanto ao diretório onde estão os arquivos de soquete, o importante é que o diretório seja legível para www-data. Os soquetes serão criados como root inicialmente com o perms 0600 e, em seguida, a propriedade deve ser alterada para www-data, para que os processos do www-data worker possam se conectar e nada mais. Isso depende do diretório ainda estar acessível para www-data.

A razão para o WSGISocketPrefix é que Redhat fez o diretório de logs onde a configuração do Apache diz para colocar este material como padrão, para não ser legível para os outros, para que o www-data não possa ver sockets no diretório. É por isso que no Redhat é necessário alterá-lo para / var / run.

Em que ponto as permissões do diretório são alteradas ou corrigidas e se pode acontecer sem a atualização do pacote Apache, não sei.

    
por 08.12.2011 / 06:18