私は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";
}
}
$scheme
をhttps
に変更するだけです。ユーザーがそうでない限り、ポート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 )。