我在我的 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";
}
}
答案1
只需更改$scheme
为https
,我无法说出为什么它首先在那里,因为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;
}
if
Ashish 的答案可能有用,但我会尽可能远离(阅读如果是邪恶的)。
答案2
我猜你的 godaddy cname 或 A 记录对于 nginx 来说没问题,请尝试下面的代码。
server {
listen 80 default_server;
listen [::]:80 default_server;
if ($http_x_forwarded_proto != 'https') {
rewrite ^(.*) https://www.example.com$1 redirect;
}
}
如果你想一次性完成,那么可以使用这种方式,但这是解决这个问题的非常糟糕的方法。在服务器 80 块上的配置和位置块顶部添加地图模块。
map $http_host $new {
'www.abc.com' '1';
}
server {
listen 80 default_server;
listen [::]:80 default_server;
if ($http_x_forwarded_proto != 'https') {
rewrite ^(.*) https://$host$1 redirect;
}
location / {
if ($new != '1') {
rewrite ^(.*) https://www.example.com$1 redirect;
}
}
}