Aplicativo WSGI, “AH01630: cliente negado pela configuração do servidor”, mas o cliente recebe a página de qualquer maneira

1

Estou executando um aplicativo WSGI. Ao acessar uma URL do aplicativo, por exemplo do meu navegador, eu recebo a página que estou pedindo. Mas também recebo um erro nos arquivos de log.

URL:

https://api.example.com/api/v0/api-docs/api-docs.json

Mensagem de erro:

[Tue Mar 07 17:43:52.331186 2017] [authz_core:error] [pid 23997] [client my.client.ip:59666] AH01630: client denied by server configuration: /var/www/html/api-docs

Este é o conteúdo do arquivo de configuração do apache do meu aplicativo.

<VirtualHost *:80>
    ServerName api.example.com
    Redirect permanent / https://api.example.com/
</VirtualHost>

<VirtualHost *:443>

    ServerName api.example.com

    SSLEngine On
    SSLCipherSuite HIGH:MEDIUM
    SSLCertificateFile /etc/ssl/localcerts/apache.pem
    SSLCertificateKeyFile /etc/ssl/localcerts/apache.key

    # We may run multiple API versions in parallel
    # http://stackoverflow.com/questions/18967441/add-a-prefix-to-all-flask-routes

    # API v0

    WSGIDaemonProcess api-v0 threads=5
    WSGIScriptAlias /api/v0 /path/to/application/application.wsgi
    WSGIPassAuthorization On

    <Location /api/v0>
        WSGIProcessGroup api-v0
    </Location>

    <Directory /path/to/application/>
        Options FollowSymLinks
        WSGIProcessGroup api-v0
        WSGIApplicationGroup %{GLOBAL}
        # WSGIScriptReloading On
        Require all granted
    </Directory>

    # API v1
    # ...
    # I don't have a v1 yet on the server.
    # This is not something I stripped for the example.

</VirtualHost>

Estou usando um certificado autoassinado, aceito no navegador do cliente. Eu não acho que deveria fazer alguma diferença ...

Apache 2.4.

A mensagem de erro é lida como se o apache estivesse buscando os arquivos em /var/www/html/ . Nesse caso, o erro seria compreensível. Exceto WSGIScriptAlias é entendido corretamente desde que eu recebo o conteúdo da página, então o apache deve estar procurando em /path/to/application/ .

Editar

Consegui remover o aviso adicionando uma diretiva DocumentRoot ao VirtualHost .

<VirtualHost *:443>

    DocumentRoot /path/to/application

    ServerName api.example.com

Eu li os documentos sobre DocumentRoot e ainda não está claro para mim

  • por que funcionou sem ele
  • por que recebi esse erro nos logs enquanto o cliente realmente obteve o conteúdo de qualquer maneira
  • por que outro host virtual aparentemente não precisa dele (por exemplo, eu também hospedo uma instância do Redmine que não tem essa diretiva)
  • por que funciona em outra máquina sem ele (embora na porta 80, mas isso importa?)

A configuração padrão para * .443 (ssl) tem o padrão

DocumentRoot /var/www/html
    
por Jérôme 07.03.2017 / 18:03

0 respostas