2017-09-25 1 views
0

Je veux rediriger tout mon trafic http pour rediriger vers https. J'utilise letsencrypt. J'ai lu en ligne que return 301 https://$server_name$request_uri; redirigerait tout le trafic vers mon site Web à https mais à la place il en résulte ERR_TOO_MANY_REDIRECTS.ERR_TOO_MANY_REDIRECTS avec nginx

Tout fonctionne correctement sans l'instruction de mention ci-dessus, mais je dois spécifier spécifiquement https dans l'URL. Voici mon fichier /etc/nginx/sites-available/default:

server { 
     listen 80 default_server; 
     listen 443 ssl default_server; 

     ssl_certificate /etc/letsencrypt/live/mywebsite.me/fullchain.pem; 
     ssl_certificate_key /etc/letsencrypt/live/mywebsite.me/privkey.pem; 

     root /home/website/mywebsite/public; 

     index index.html index.htm index.php; 

     server_name mywebsite.me www.mywebsite.me; 

     return 301 https://$server_name$request_uri; 

     location/{ 
       try_files $uri $uri/ /index.php$is_args$args; 
     } 

     location ~ \.php$ { 
       include snippets/fastcgi-php.conf; 
       fastcgi_pass unix:/var/run/php/php7.1-fpm.sock; 
     } 
} 

Où est-ce que je vais mal?

Répondre

3

Changer votre config ci-dessous

server { 
     listen 80 default_server; 
     server_name mywebsite.me www.mywebsite.me; 

     return 301 https://$server_name$request_uri; 
} 

server { 

     listen 443 ssl default_server; 

     ssl_certificate /etc/letsencrypt/live/mywebsite.me/fullchain.pem; 
     ssl_certificate_key /etc/letsencrypt/live/mywebsite.me/privkey.pem; 

     root /home/website/mywebsite/public; 

     index index.html index.htm index.php; 

     server_name mywebsite.me www.mywebsite.me; 

     location/{ 
       try_files $uri $uri/ /index.php$is_args$args; 
     } 

     location ~ \.php$ { 
       include snippets/fastcgi-php.conf; 
       fastcgi_pass unix:/var/run/php/php7.1-fpm.sock; 
     } 
} 

Votre config actuelle réoriente sur les deux http et https https. Donc, il devient une boucle infinie à cause de la déclaration de retour. Vous voulez une déclaration de retour uniquement lorsque la connexion est http. Donc, vous le diviser en deux blocs de serveur

0

même situation avec un proxy nginx. Je suis confus par proxy_pass http: // ou https: //

server { 
    listen 80; 
    listen [::]:80; 

    root /var/www/tomato.mysite.com/html; 
    index index.html index.htm index.nginx-debian.html; 

    server_name tomato.mysite.com; 

    location/{ 
     proxy_pass http://tomato.mysite.com:4000/; # meteor server at port 4000 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
     proxy_set_header Host $http_host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forward-Proto http; 
     proxy_set_header X-Nginx-Proxy true; 
     proxy_redirect off; 
    } 

    listen 443 ssl; 
    ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem; 
    include /etc/letsencrypt/options-ssl-nginx.conf; 
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 

    if ($scheme != "https") { 
     return 301 https://$host$request_uri; 
    } # managed by Certbot 
} 
+0

mettre http et https dans un des blocs distincts comme indiqué dans la première solution. Cela a fonctionné pour moi. –

+0

@PritamBohra ne peut pas fonctionner. Comme vous le voyez, j'ai besoin de proxy au même nom de serveur avec un autre port. Ma config fonctionne bien quand l'application derrière sans SSL forcé. Quand 'http: 4000' fonctionne, 'https:' fonctionne bien, sinon quand 'http: 4000' se redirige vers 'https:', alors la configuration ne peut pas fonctionner. C'est un problème populaire dans l'application Meteor que j'ai vu dans beaucoup de discussions. Peut-être que j'ai besoin de configurer l'application météore pour utiliser ssl, pas seulement le nginx. – sitexa