Django SSL cert et médias statiques

Je construis une application Django qui aura besoin de SSL sur toutes les pages orientées vers l’utilisateur. Sur d’autres projets où SSL était requirejs, je suis confronté à des complications lors de la diffusion de fichiers multimédias à partir d’un hôte virtuel différent sur le même serveur. Par exemple, la page est la suivante: https://www.mysite.com mais elle fait référence à http://media.mysite.com/css/screen.css , et le navigateur affiche ensuite des avertissements de sécurité pour l’utilisateur.

Je pense que c’est la meilleure pratique de Django pour conserver des fichiers statiques sur au moins leur propre hôte virtuel, ce qui – pour autant que je sache – nécessite un sous-domaine tel que media.blahblah.com.

De toute évidence, il existe de nombreuses applications Django sur SSL, il me faut donc manquer quelque chose. Des conseils sur la façon dont cela est géré?

La réponse générale est que vous devez modifier l’URL que vous utilisez pour référencer vos fichiers statiques vers un fichier utilisant HTTPS. L’utilisation d’un chemin relatif (/static/css/screen.css) au lieu d’une URL absolue (http: // …) permet à votre média de basculer automatiquement de HTTP à HTTPS en fonction de la page de renvoi, mais force votre main à essayer servir selon les meilleures pratiques décrites ci-dessous.

Si vous utilisez Django 1.3 avec consortingb.staticfiles, il semblerait que vous deviez simplement modifier le paramètre STATIC_URL. Dans le cas contraire, vous devrez mettre à jour les chemins manuellement (ou toutefois, vous spécifiez vos actifs statiques).

Les meilleures pratiques pour les supports statiques tels que CSS et JavaScript exigent que vous les diffusiez depuis un serveur Web (pas seulement virtualhost) différent de celui qui héberge vos pages Django. L’idée est que vous pouvez utiliser un serveur Web à faible encombrement pour servir ces fichiers simples très rapidement. Si vous les servez du même serveur Web qui exécute votre site Django, il est fort probable qu’un certain nombre de modules supplémentaires soient chargés mais ne sont pas utilisés pour les requêtes où vous ne faites que servir un fichier statique.

Comme vous devez servir des fichiers statiques sécurisés, vous avez plusieurs options:

  1. Vous devrez soit obtenir un certificate SSL distinct (ou générique) pour votre serveur Web de fichiers statiques.
    • Con : coût supplémentaire pour le certificate
    • Con : vous devrez spécifier un domaine différent (au lieu des chemins relatifs décrits dans le premier paragraphe) pour diffuser vos fichiers statiques.
  2. Configurez SSL sur un proxy inverse qui gère toutes les demandes pour votre site. Vous êtes toujours en train de servir vos fichiers statiques et vos pages Django à partir de serveurs Web séparés, mais le proxy sait à qui se connecter en fonction de l’URL ou du chemin (ex: proxy “/ static” du serveur Web statique, tous du serveur web Django) .
    • Pro : vous permet d’utiliser des chemins relatifs vers votre média.
    • Con : Configuration système supplémentaire.