Nginx

Nginx 上的“如果可能,請刪除以下重定向鏈”

  • February 20, 2017

我在我的 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";
 }
}

只需更改$schemehttps,我一開始不知道為什麼會出現這種情況,因為http除非您的使用者正在做一些奇怪的事情,否則您不太可能獲得除埠 80 以外的任何東西。

編輯:添加缺少的 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;
}

ifAshish 的回答可能有效,但我會盡可能遠離(閱讀If is Evil)。

引用自:https://serverfault.com/questions/833567