Je veux être sûr que pour une URL de mon site Web, SSL sera utile. J'ai déjà vu beaucoup de réponse déjà. P>
Force rediriger vers SSL pour toutes les pages à part de un p>
donc je pense que je vais utiliser Ma question est plus sur la façon de configurer l'hôte virtuel fort> pour exécuter mon est-ce un problème pour simplement dupliquer la configuration sur mod_rewrite code>. p>
http code> et sur
https code> sans problèmes. J'utilise
wsgi code>. P>
*: 443 code> et sur
*: 80 code>?
Que dois-je faire pour avoir la meilleure configuration? P>
4 Réponses :
En plus d'utiliser mod_rewrite, vous pouvez également utiliser Django pour contrôler les redirections SSL.
Voici une version modifiée d'un middleware à partir du Projet Satchmo . J'ai tendance à aimer cette méthode mieux que mod_rewrite car il est plus facile de gérer. P>
Pour l'utiliser, passez 'SSL': true dans votre URL Conf: p>
from django.conf import settings from django.http import HttpResponseRedirect, get_host SSL = 'SSL' def request_is_secure(request): if request.is_secure(): return True # Handle forwarded SSL (used at Webfaction) if 'HTTP_X_FORWARDED_SSL' in request.META: return request.META['HTTP_X_FORWARDED_SSL'] == 'on' if 'HTTP_X_SSL_REQUEST' in request.META: return request.META['HTTP_X_SSL_REQUEST'] == '1' return False class SSLRedirect: def process_request(self, request): if request_is_secure(request): request.IS_SECURE=True return None def process_view(self, request, view_func, view_args, view_kwargs): if SSL in view_kwargs: secure = view_kwargs[SSL] del view_kwargs[SSL] else: secure = False if settings.DEBUG: return None if getattr(settings, "TESTMODE", False): return None if not secure == request_is_secure(request): return self._redirect(request, secure) def _redirect(self, request, secure): if settings.DEBUG and request.method == 'POST': raise RuntimeError( """Django can't perform a SSL redirect while maintaining POST data. Please structure your views so that redirects only occur during GETs.""") protocol = secure and "https" or "http" newurl = "%s://%s%s" % (protocol,get_host(request),request.get_full_path()) return HttpResponseRedirect(newurl)
Ceci est utile aussi. Assurez-vous qu'il s'agit d'une connexion SSL. Pensez-vous qu'il est préférable de le gérer avec Django. Ou avec mod_rewrite?
Comme je l'ai mentionné, j'ai tendance à aimer le gérer à Django, car il est plus facile de voir quelles URL sont sécurisées via SSL. Si vous devez sécuriser une URL, mettez simplement à jour le fichier URLS.PY et vous avez terminé. Pas de règles Mod_rewrite non en désordre (puissant, Messier).
Je crois que le code ci-dessus manque la ligne finale de la fonction _redirect () ... La ligne finale de cette fonction doit être retour httpresponseredirect (newurl) code>
Je l'ai placé dans mon répertoire racine de projet dans un fichier appelé ssl_redirect.py code> et in
paramètres.py code> Ajout d'une ligne sur
middleware_classes code> pour
'ssl_redirect.ssLredirect' code>. Notez également que, dans Django 1.5, vous devez modifier l'appel get_host vers
demande.get_host () code> et supprimer l'importation get_host en haut, ou vous obtiendrez une erreur sur Important get_host.
Ce code fait confiance aux en-têtes fournis par l'utilisateur, qui est insécurisé b> sauf si vous êtes derrière un proxy qui lance des en-têtes inattendus. Vous devriez simplement vérifier .is_secure code> et configurer
secury_proxy_ssl_header code> de manière appropriée pour votre configuration.
Si vous utilisez Django et mettez uniquement des URL en tant que HTTPS, les données telles que votre session peuvent être divulguées. De plus, si vous le gérez par Django, vous devez utiliser le même décorateur partout et n'oubliez pas de l'utiliser lorsque vous créez une nouvelle vue. C'est beaucoup plus facile et plus sûr d'utiliser Apache / Nginx.
Nous avons utilisé des middleware simples pour vérifier les URL sur une liste des URL de base que doivent être em> en mode HTTPS, tous les autres sont forcés au mode HTTP. La grande mise en garde ici est que toutes les données postes peuvent être perdues à moins que vous ne preniez pas de soin supplémentaire (cela n'avait pas d'importance dans notre cas). Nous faisions cela sur des pages de jointure qui nécessitaient des numéros de carte de crédit, ainsi que de la sorte dès qu'ils étaient dans ce pipeline, nous les avons forcés dans HTTPS. P>
Si par WSGI, vous voulez réellement dire Apache / Mod_WSGI, alors que les applications WSGI montées sont normalement exécutées dans leurs propres sous-interprètes, la division 80/443 est un cas particulier et même si dans différents virtualhost tant que le point de montage pour WSGIScriptalias, et le nom de serveur est identique, ils seront fusionnés. Cela se produira également pour le mode Daemon, mais avec le mode Daemon, vous devez définir uniquement un seul groupe de processus Daemon dans la première définition VirtualHost et ensuite simplement se référer à celui des deux avec wsgiprocessgroup. p> Le WSGIPROCESSGROUP ne peut toucher que sur ce VirtualHost pour le même nom de serveur. P> Django fournit un IS_SECURE () Méthode de détermination Lorsque la demande est venue via HTTPS qui dérive de la variable WSGI avec demande appelée 'wsgi.url_scheme' qui est défini par mod_wsgi. p> Donc, vous auriez un seul fichier de script et des paramètres Django WSGI. déposer. Vous avez juste besoin de dupliquer le montage d'applications comme DecSribé dans la configuration Apache / Mod_WSGI. P> P>
Voici un décorateur de vue que vous pouvez appliquer aux vues qui devraient avoir https.
Je vous suggère de trouver la réponse sur serverfault.com.
Ok voilà, nous allons: ServerFault.com/Questtions/73257/...
Peut-être que ceci est associé: effabot.org/zone/django-multihost.htm