web-dev-qa-db-ja.com

nginx httpからhttpsへのリダイレクト-単に機能していません

私はubuntu 17.10でnginxを使用して自分のウェブサーバーを実行しています。ポート80と443を開きました。

HTTPからHTTPSへのリダイレクトを機能させようとしましたが、私が試みたように見えるすべてが失敗します。 HTTPサイトに直接移動すると、まだ400 Bad Request The plain HTTP request was sent to HTTPS port errorが表示されます。

誰かが私の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

ここにあるのはnginx confではなく、sites confファイルです。 httpからhttpsへの301リダイレクトは正しいように見えますが、httpsを介して接続を受け入れる前に安全な接続が必要であるため、400エラーがトリガーされます。

ssl on;行をコメントアウトするだけです:

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

またはオフに設定:

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

また、http2をipv4ブロックに追加することをお勧めします。

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

詳細情報 こちら

2
David K.

サーバーがIpV6経由で接続されておらず、標準のipV4エントリのみが必要な場合があります。

  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