O Apache tenta acessar os parâmetros wsgi-rest no DocumentRoot (AH01797)

1

Eu tenho a seguinte configuração apache2 / wsgi, que funciona bem, exceto que o apache mantém o registro:

[info] Initial (No.1) HTTPS request received for child 1 (server myserver:443)
[error] [client <IP>] client denied by server configuration: /empty/<API_CALL>

para todas as chamadas para o link '

<VirtualHost *:443>
  ServerName myserver:443
  DocumentRoot /empty/ 
  <Directory />
    Order allow,deny
    Deny from all
  </Directory>

  SSLEngine On
  SSLCertificateFile    /cert.pem
  SSLCertificateKeyFile /key.pem
  SSLVerifyClient optional_no_ca
  SSLOptions +StdEnvVars +ExportCertData

  WSGIDaemonProcess my.api processes=2 threads=1 display-name=%{GROUP} python-path=/API
  WSGIProcessGroup my.api
  WSGIScriptReloading On

  WSGIScriptAlias /rest /API/server.py

  <Directory /API/>
    <Files server.py>
      Order deny,allow
      Allow from all
      SetHandler wsgi-script
      Options ExecCGI
    </Files>
  </Directory>
</VirtualHost>

Por que o Apache está tentando acessar algo no DocumentRoot? Como posso parar isso?

Editar O mesmo problema com o Apache2.4:

AH01797: client denied by server configuration: /empty/<API_CALL>

Editar Atualizando a sintaxe do controle de acesso de:

<Directory />
    Order allow,deny
    Deny from all
</Directory>

<Directory /API/><Files server.py>
    Order deny,allow
    Allow from all
</Files></Directory>

para:

<Directory />
    Require all denied
</Directory>

<Directory /API/><Files server.py>
    Require all granted
</Files></Directory>

Corrigido o problema. Thx.

    
por x539 26.10.2015 / 17:05

2 respostas

4

  • Vou tentar cobrir a segunda parte da sua pergunta:

How can I stop this?

Eu segui parte da sua pergunta:

<VirtualHost *:443>
  ServerName myserver:443
  DocumentRoot /empty/ 
  <Directory />
    Order allow,deny
    Deny from all
  </Directory>

se /rest/API_CALL for o único URI que está sendo usado e por causa de WSGIScriptAlias , acredito que minha resposta eliminará o seguinte erro:

AH01797: client denied by server configuration

  • comentando DocumentRoot e <Directory> , o httpd do Apache assumirá o valor padrão de httpd.conf principal (dependendo da sua distribuição e / ou embalagem, a localização pode estar apontando para um local diferente, como um exemplo) vai ter lugar comum como /var/www/html ), também há valores padrão para <Directory> , o que deve satisfazer httpd de escrever um erro em error_log .

Eu recomendaria testar essas alterações no ambiente de teste antes de aplicá-las no ambiente ativo.

Além disso, ao responder a esta pergunta, eu realmente aprendo algo novo eu mesmo). Eu acho que é um erro comum para manys, então eu pensei em compartilhar com todos:

The DocumentRoot should be specified without a trailing slash.

    
por 29.04.2016 / 05:37
-1

Talvez eu esteja entendendo errado (depois de examinar os documentos do Apache, agora estou certo de que isso está correto) - mas o Apache não acha que está servindo arquivos do DocumentRoot? - isto não tem nada a ver com / rest (esta é a sua URL de código) - se você não estiver hospedando arquivos deste host virtual, apenas especifique o mesmo documentroot como sua raiz de documento padrão do apache. você está chamando o documento root aqui htps: // myserver: 443 e então fazendo proxy para a raiz / descanso do script.

sua solicitação http > docroot > negar > scriptalias > 200

O Apache tem um DocumentRoot e o WSGIScriptAlias é apenas um tipo de proxy, mantendo seus documentos e códigos separados.

Em Resumo - O Apache tem que ter uma raiz do Documento, (mesmo quando você desabilita a raiz do documento será o PREFIXO / htdocs) então este é um erro válido e esperado, aliases de script não substituem a raiz do documento mas o proxy off na URL definida WSGIScriptAlias /rest /API/server.py - > link .

ServerName myserver:443 DocumentRoot /empty/
Order allow,deny Deny from all

client denied by server configuration: /empty/

Acho que isso está correto:

<VirtualHost *:443>
  ServerName myserver:443
  **DocumentRoot /** 
  <Directory />
    Order allow,deny
    **allow from all**
  </Directory>

  SSLEngine On
  SSLCertificateFile    /cert.pem
  SSLCertificateKeyFile /key.pem
  SSLVerifyClient optional_no_ca
  SSLOptions +StdEnvVars +ExportCertData

  WSGIDaemonProcess my.api processes=2 threads=1 display-name=%{GROUP} python-path=/API
  WSGIProcessGroup my.api
  WSGIScriptReloading On

  **WSGIScriptAlias /** /API/server.py

  <Directory /API/>
    <Files server.py>
      Order deny,allow
      Allow from all
      SetHandler wsgi-script
      Options ExecCGI
    </Files>
  </Directory>
</VirtualHost>

O Document Root é uma opção fundamental e explícita que você não pode ter, mas pode negar acesso.

    
por 27.04.2016 / 16:18