web-dev-qa-db-ja.com

Nginx:httpをhttpsにリダイレクトしています(エラー:リダイレクトが多すぎます)

Nginxを実行してリダイレクトしようとしています:

wwwから非www

httpからhttps

似たようなスレッドがあることはわかっていますが、同じシナリオのスレッドはありません。

Webmin/Virtualmin、およびFast-CGIをインストールしました。このサーバーには多くのアカウント/サイトがあります。 mysiteの場合、これはサーバーブロックです。

server {
    listen my_server_IP;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
    root /home/example/public_html;
    index index.html index.htm index.php;
    access_log /var/log/virtualmin/example.com_access_log;
    error_log /var/log/virtualmin/example.com_error_log;
    fastcgi_param GATEWAY_INTERFACE CGI/1.1;
    fastcgi_param SERVER_SOFTWARE nginx;
    fastcgi_param QUERY_STRING $query_string;
    fastcgi_param REQUEST_METHOD $request_method;
    fastcgi_param CONTENT_TYPE $content_type;
    fastcgi_param CONTENT_LENGTH $content_length;
    fastcgi_param SCRIPT_FILENAME /home/example/public_html$fastcgi_script_name;
    fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    fastcgi_param REQUEST_URI $request_uri;
    fastcgi_param DOCUMENT_URI $document_uri;
    fastcgi_param DOCUMENT_ROOT /home/example/public_html;
    fastcgi_param SERVER_PROTOCOL $server_protocol;
    fastcgi_param REMOTE_ADDR $remote_addr;
    fastcgi_param REMOTE_PORT $remote_port;
    fastcgi_param SERVER_ADDR $server_addr;
    fastcgi_param SERVER_PORT $server_port;
    fastcgi_param SERVER_NAME $server_name;
    fastcgi_param HTTPS $https;
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/php-nginx/148180748420424.sock/socket;
    }
    # htaccess
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    #
    listen my_server_IP:443 ssl;
    ssl_certificate /home/example/ssl.cert;
    ssl_certificate_key /home/example/ssl.key;
}

さて、今のように見える設定は、#htaccessビット(Wordpressで「きれいなリンク」を有効にするためにApacheの.htaccessから変換された)と「return301」行を除いて、私のしていることではありません。

違いが生じる場合、SSL証明書はLetsEncryptからのものです。

Nginxを保存して再起動しました。

Chromeでサイトをリクエストすると、「ERR_TOO_MANY_REDIRECTS」と表示されます

私は何が間違っているのですか?何かを追加または削除する必要がありますか?

2
Trace DeCoy

これは、現在の構成の簡略化されたバージョンであり(現在、コンテンツに関して何も実行しないすべてのビットを除く)、何が起こっているかを確認できるようにいくつかのメモが追加されています。最後の2行は、物事を最初に送り返し続けています。したがって、多くのリダイレクトエラーに。

server {
    listen my_server_IP; #listen on IP x.x.x.x
    listen my_server_IP:443 ssl; #listen on IP x.x.x.x on 443
    server_name example.com www.example.com; #Of the requests on IP x.x.x.x look for those with with one of these headers. send to line below       
    return 301 https://example.com$request_uri; #Send everything to the line above
    } 

これが必要なものです。ifステートメントを使用できますが、今回は使用できません。これにより、何が起こっているかを明確に確認できます。そのより多くの行が、それは動作します。

server {
    listen my_server_IP;
    server_name example.com www.example.com; #Listen for non-https requests 
    return 301 https://example.com$request_uri; #Send to the correct https address
    }
server {
    listen my_server_IP:443 ssl;
    server_name www.example.com; #Listen for https (www) requests
    return 301 https://example.com$request_uri; #Send to the correct https 
    ssl_certificate /home/example/ssl.cert;
    ssl_certificate_key /home/example/ssl.key;
    }
server {
    listen my_server_IP:443 ssl;
    server_name example.com;
    ssl_certificate /home/example/ssl.cert;
    ssl_certificate_key /home/example/ssl.key;
    <Rest of your config from above, fastcgi etc>
    }
3
Drifter104