Question

J'ai un serveur Nginx/Gunicorn/Django déployé sur une machine Centos 6 avec uniquement le port SSL (443) visible du monde extérieur.Donc, à moins que le serveur ne soit appelé avec le https://, vous n'obtiendrez aucune réponse.Si vous l'appelez avec un http://domain:443, vous recevrez simplement un message 400 Bad Request.Le port 443 est le seul moyen d'accéder au serveur.

J'utilise Nginx pour servir mes fichiers statiques (CSS, etc.) et toutes les autres requêtes sont traitées par Gunicorn, qui exécute Django sur http://localhost:8000.Alors, en naviguant vers https://domain.com fonctionne très bien, tout comme les liens dans le site d'administration, mais lorsque je soumets un formulaire dans l'administrateur de Django, le https est perdu lors de la redirection et je suis envoyé vers http://domain.com/request_uri qui ne parvient pas à atteindre le serveur.L'action POST fonctionne néanmoins correctement et la base de données est mise à jour.

Mon fichier de configuration est répertorié ci-dessous.L'emplacement location / La section est l'endroit où j'ai l'impression que la solution devrait être trouvée.Mais il ne semble pas que proxy_set_header X-* les directives n’ont aucun effet.Est-ce qu'il me manque un module ou quelque chose comme ça ?J'utilise nginx/1.0.15.

Tout ce que je peux trouver sur Internet pointe vers X-Forwarded-Protocol https comme si ça devait faire quelque chose, mais je n'obtiens aucun changement.Je ne parviens pas non plus à faire fonctionner le débogage sur le serveur distant, même si ma prochaine étape devra peut-être consister à compiler localement avec le débogage activé pour obtenir plus d'indices.Le dernier recours consiste à exposer le port 80 et à tout rediriger... mais cela nécessite quelques formalités administratives.

[http://pastebin.com/Rcg3p6vQ](Mes arguments de configuration nginx)

server {
    listen       443 ssl;

    ssl on;
    ssl_certificate /path/to/cert.crt;
    ssl_certificate_key /path/to/key.key;
    ssl_protocols       SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    server_name  example.com;

    root /home/gunicorn/project/app;
    access_log /home/gunicorn/logs/access.log;
    error_log /home/gunicorn/logs/error.log debug;

    location /static/ {
        autoindex on;
        root /home/gunicorn;
    }

    location / {
        proxy_pass http://localhost:8000/;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Protocol https; 
    }

}
Était-ce utile?

La solution

Je n'ai pas encore eu le temps de comprendre exactement ce que font ces deux lignes, mais les supprimer a résolu mes problèmes :

    proxy_redirect off;
    proxy_set_header Host $host;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top