it-swarm.com.de

Nginx http zu https umleiten - funktioniert einfach nicht

Ich betreibe meinen eigenen Webserver mit Nginx unter Ubuntu 17.10. Ich habe die Ports 80 und 443 geöffnet.

Der Versuch, die HTTP-zu-HTTPS-Umleitung zum Laufen zu bringen, schlägt fehl, aber alles, was ich versucht zu haben scheint, schlägt fehl. Ich erhalte immer noch die 400 Bad Request Die einfache HTTP-Anforderung wurde an HTTPS-Portfehler gesendet, wenn ich direkt zur http-Site navigiere.

Ich hoffe, jemand kann das Problem in meiner Nginx-Konfigurationsdatei erkennen.

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

Was Sie hier haben, ist nicht die nginx conf, sondern die sites conf-Datei. Ihre 301-Umleitung von http zu https scheint korrekt zu sein, Sie benötigen jedoch eine sichere Verbindung, bevor Sie die Verbindung über https akzeptieren können, und lösen so einen 400-Fehler aus.

Kommentieren Sie einfach die ssl on; -Zeile wie folgt aus:

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

oder auf off setzen:

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

Ich empfehle außerdem, http2 zum ipv4-Block hinzuzufügen:

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

Weitere Informationen hier .

2
David K.

möglicherweise ist Ihr Server nicht über IPV6 verbunden, und Sie benötigten nur die Standard-IPV4-Einträge:

  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