web-dev-qa-db-fra.com

Nginx http to https redirect - ne fonctionne tout simplement pas

J'utilise mon propre serveur Web avec nginx sous Ubuntu 17.10. J'ai ouvert les ports 80 et 443.

Essayer de faire fonctionner la redirection HTTP vers HTTPS, mais tout semble avoir échoué. Je reçois toujours le 400 requêtes incorrectes. La requête HTTP simple a été envoyée à l'erreur de port HTTPS lorsque je navigue directement sur le site http.

En espérant que quelqu'un puisse repérer le problème dans mon fichier de configuration nginx.

server {
    listen 80;
    listen [::]:80;
    server_name  example.com www.example.com;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl; # managed by Certbot
    listen [::]:443 ssl http2; # managed by Certbot
    server_name  example.com www.example.com;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    root /var/www/html/wordpress;
    index  index.php index.html index.htm;

    client_max_body_size 100M;

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

    location ~ \.php$ {
         include snippets/fastcgi-php.conf;
         fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
    }

    # Deny access to .htaccess files, if Apache's document
    # root concurs with nginx's one

    location ~ /\.ht {
        deny all;

    }

    location ^~ /.well-known/acme-challenge/ {
        auth_basic off;
        autoindex on;
    }

}
3
zuzu76

Ce que vous avez ici n’est pas la configuration nginx, mais le fichier de configuration des sites. Votre redirection 301 de http vers https semble correcte, mais vous avez besoin d’une connexion sécurisée avant d’accepter la connexion via https, ce qui provoque une erreur 400.

Commentez la ligne ssl on; comme ceci:

server {
    listen 443 ssl;
    listen [::]:443 ssl http2;
    server_name example.com www.example.com;
    #ssl on;
    ...

ou éteint:

server {
    listen 443 ssl;
    listen [::]:443 ssl http2;
    server_name example.com www.example.com;
    ssl off;
    ...

Je vous recommande également d’ajouter http2 au bloc ipv4:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com www.example.com;
    ssl off;
    ...

Plus d'informations ici .

2
David K.

peut-être que votre serveur n'est pas connecté via IpV6 et que vous n'aviez besoin que des entrées ipV4 standard:

  server{
         listen 80;
         server_name example.com www.example.com;
         return 301 https://www.example.com$request_uri;
             }
     server {
        listen 443 ssl http2;
        server_name example.com www.example.com;
        root   /var/www/html/example.com/;
        index index.php index.html index.htm;

          .....the rest of your port 443 arguments....

         }
2
drtechno