web-dev-qa-db-ja.com

Nginxで「可能であれば次のリダイレクトチェーンを削除する」

私は1つのプレーンHTMLファイルサイトでPingdomテストを実行しましたが、これに対するFレーティングが得られました。

可能であれば、次のリダイレクトチェーンを削除します。

http://example.com/
http://www.example.com/
https://www.example.com/

そして、私が持っている私の.confでの唯一のリダイレクトは:

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

次のブロックはSSLで、残りはブロックです。

server {
  listen 443 ssl http2;
  etc...
}

他の構成はありません。私が必要なのは、非wwwをwwwにリダイレクトし、常にhttpsのみをリダイレクトしてテストに合格することだけです。

更新:完全な.conf

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

server {
  listen 443 ssl http2;

  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers 'EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5';
  ssl_dhparam /etc/nginx/ssl/dhparams.pem;
  ssl_session_timeout 1d;
  ssl_session_cache shared:SSL:50m;
  ssl_stapling on;
  ssl_stapling_verify on;
  add_header Strict-Transport-Security max-age=15768000;

  root /var/www/example.com/htdocs;

  server_name example.com www.example.com;

  location / {
    autoindex on;
    try_files $uri $uri/ =404;
  }

  location ~* /img/.*\.gif$ {
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public";
  }
}
3
user3108268

$schemehttpsに変更するだけです。ユーザーがそうでない限り、ポート80でhttp以外のものを取得する可能性が低いため、そもそもなぜそれが存在するのかわかりません。変なことをしている。

編集:欠落しているhttps-> httpsリダイレクトを追加します。

実際には明示的なdefault_serverがないことに気づかなかった。何かに沿って行きます:

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

Ashishの答えはうまくいくかもしれませんが、私はifからできるだけ離れたままにします(読み取り If is Evil )。

0
Ginnungagap