Determinando o ambiente de execução do Apache

2

Estou com este erro:

[Mon Dec 05 10:22:23 2011] [warn] mod_rewrite: Running external rewrite maps without defining a RewriteLock is DANGEROUS!
[Mon Dec 05 10:22:23 2011] [error] (13)Permission denied: mod_rewrite: could not start RewriteMap program /etc/httpd/conf.d/upsell_by_id.py

Este erro está associado a esta linha: RewriteMap upsells prg:/etc/httpd/conf.d/upsell_by_id.py

Eu percebo que isso provavelmente significa que o usuário de execução do apache não pode executar esses arquivos. Como faço para determinar o que o ambiente de execução ment é para o apache? Como eu faço este arquivo upsell_by_id.py executável para o apache?

I get this error when I try to run the upsell_by_id.py as apache:
Traceback (most recent call last):
  File "/etc/httpd/conf.d/upsell_by_id.py", line 8, in <module>
    keyword_groups = pickle.load(open("/home/zumodo/upsell_backup/upsells.pkl", "rb" ) )
IOError: [Errno 13] Permission denied: '/home/zumodo/upsell_backup/upsells.pkl'

Isso ocorre apesar do fato de que o arquivo upsells.pkl parece ter toda a permissão necessária:

-rwxrwxrwx.  1 skline skline 6.4M Dec  5 08:50 upsells.pkl
    
por Spencer 05.12.2011 / 21:42

2 respostas

2

Você realmente tem dois erros lá. As permissões primeiro:

O Apache precisará de permissões apropriadas em cada um dos diretórios que levam ao arquivo upsells.pkl , bem como no próprio arquivo.

Tente isto para determinar quais permissões os diretórios têm (note que os espaços são importantes):

ls -ld /home/ /home/zumodo/ /home/zumodo/upsell_backup/

O usuário do Apache precisará da permissão x em cada um desses diretórios. /home geralmente tem as permissões necessárias, mas é bastante comum que tudo em /home/* tenha o modo 750 ( rwxr-x--- ) ou até mesmo o modo 700 (rwx ------). Qualquer um deles causaria o seu problema. O problema de permissões pode facilmente estar no diretório upsell_backup .

Mova o arquivo upsells.pkl para um caminho mais apropriado (como /var/www/ ) ou altere as permissões no diretório restrito.

A mensagem de erro sobre o RewriteLock está correta; não ter um é perigoso .

O Apache é multi-threaded ou gera vários filhos, o que significa que qualquer um deles pode receber solicitações ao mesmo tempo. O RewriteLock é usado internamente pelo Apache para garantir que apenas um filho ou thread esteja conversando com o processo externo por vez. Se você não especificar um, a saída do programa pode acabar sendo misturada, bagunçando completamente suas regras de reescrita e, possivelmente, todo o seu servidor. O resultado mais provável é que, quando o servidor ficar ocupado, você gerará muitas respostas 500 . Resultados significativamente piores são possíveis.

    
por 05.12.2011 / 23:46
1

Por enquanto, desative RewriteMap upsells line e veja se o apache inicia ou não. Se for iniciado, verifique o usuário executando o apache.

Execute o seguinte comando.

ps axho user,comm|grep -E "httpd|apache"|uniq|grep -v "root"|awk 'END {print $1}'

Este comando lhe dará usuário executando o servidor apache. Em seguida, verifique a propriedade e as permissões do arquivo. Eu acho que o arquivo deve ser executável para o usuário executando o processo apache / httpd.

Em seguida, usando o seguinte comando, defina as permissões apropriadas e a propriedade do arquivo.

chown root.apache /etc/httpd/conf.d/upsell_by_id.py

chmod +x /etc/httpd/conf.d/upsell_by_id.py

    
por 05.12.2011 / 22:12