Flask + mod_wsgi + httpd: toutes les ressources essayées sur DocumentRoot?

En bref

J’ai un script WSGI monté sur /app . Si je demande /app/resource , j’obtiens une réponse correcte. Mais je reçois également une entrée dans mon journal des erreurs comme si j’avais demandé /resource . Qu’est-ce qui pourrait causer ça?

En détail

J’ai une application Flask déployée avec Apache 2.4 + mod_wsgi sur AWS EC2:

  1. L’application vit à /my/app/path
  2. Le fichier app.wsgi trouve dans /var/www/wsgi et pointe vers /my/app/path
  3. La configuration Apache pour le site www.website.com pointe vers le script WSGI:
    WSGIScriptAlias /app /var/www/wsgi/app.wsgi

Lorsque je reçois www.website.com/app/some_resource/... , je reçois la réponse attendue pour cette ressource avec le code 200 .

Cependant, lorsque je vérifie les journaux d’erreur Apache, je trouve de nombreuses entrées pour les demandes refusées, par exemple:

[authz_core:error] [pid XXXXX] [client XXXXX] XXXXX: client denied by server configuration: /var/www/html/some_resource

Les erreurs consignées correspondent à 1 pour 1 avec les demandes qui, comme indiqué, reviennent 200 .

Maintenant, /var/www/html est le DocumentRoot par défaut, mais la demande est envoyée à l’emplacement /app et est correctement transmise et gérée par l’application WSGI via la directive alias.

Et donc: Pourquoi pourrais-je trouver ces entrées dans mes journaux d’erreurs, dans lesquels le chemin d’access /app est supprimé, et le chemin d’access de la ressource ajouté directement (et correctement refusé) à la racine?

Suivre

Pour répondre aux suggestions de Graham dans les commentaires:

  1. Il n’y a pas de règles de réécriture Apache définies.
  2. Apache n’est pas configuré avec MultiViews
  3. Ce sont des ressources JSON. les erreurs ne sont pas le résultat de sous-demandes provenant d’un document chargé.
  4. Le problème persiste sans liens symboliques.

Mettre à jour

Un collègue me dit qu’il a rencontré le même problème sur les instances AWS EC2.