Nginx 设置HTTP 301重定向到HTTPS

前几天一直在折腾网站的HTTPS,毕竟HTTP容易被劫持。

但是,一般输入域名,很少有人带上http://https://,而浏览器一般默认访问http站点。

所以需要设置HTTP 301重定向到HTTPS。

ps:当初百度HTTPS认证恶心到我了

在Nginx配置文件里添加以下任意一种就行:

#方法1,凡是80端口的都301
server {
    listen 80;
    server_name idzd.top www.idzd.top;
    return 301 https://www.idzd.top$request_uri;
}

##其他的同时监听80、443端口的配置(比如宝塔面板)
server
{
    listen 80;
    listen 443 ssl http2; 
    server_name idzd.top www.idzd.top;    
    
    #方法2,判断443端口
    if ($server_port !~ 443){ return 301 https://www.idzd.top$request_uri;}
    #方法3,判断80端口
    if ($server_port = 80 ) {return 301 https://www.idzd.top$request_uri; }    
    #方法4,判断协议
    if ($scheme = http ) {return 301 https://www.idzd.top$request_uri; }   
    #方法5,判断ssl附加数据
    if ($ssl_protocol = "") { return 301 https://www.idzd.top$request_uri; }
    #方法6,判断域名(需要和其他方法搭配)
    if ($host != 'www.idzd.top') {return 301 https://www.idzd.top$request_uri; }

    #部分配置省略,请勿照搬!
}

Nginx 简单安全优化(启用HSTS、禁止嵌套、防XSS攻击、禁止自动解析资源类型)

在Nginx配置文件中添加以下代码即可

#开启HSTS
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
#添加 X-Frame-Options 头部,确保不会嵌入到frame 或 iframe,使得网站的内容不会嵌入到其他网站。
add_header X-Frame-Options "DENY";
#禁止服务器自动解析资源类型
add_header X-Content-Type-Options nosniff;
#防XSS攻击,mode=block
add_header X-Xss-Protection "1; mode=block";

Strict-Transport-Security

Strict-Transport-Security,用于告诉浏览器网站启用HTTPS了,要求浏览器总是通过HTTPS来访问它。而不是通过301/302重定向到HTTPS站点。

这项功能叫做HTTP Strict Transport Security,简称为HSTS

主要参数有三个

  • max-age,用于指定生效的时间(秒),一般我们都设定大于一年的时间,比如63072000(秒)
  • includeSubDomains(可选),用来指定是否作用于子域名。
  • preload(可选),浏览器使用内置的 HTTPS 域名列表处理。不是标准的一部分。ps:如果网站没有在这个列表里,那么理论上可以不添加这个参数。

当然Chrome内部预置了一个HSTS硬编码列表,你可以访问chrome://net-internals/#hsts,来进入HSTS管理界面。

如果想把自己的网站也加入到这列表里,可以访问https://hstspreload.org/


X-Frame-Options

X-Frame-Options,是为了减少点击劫持(Clickjacking)而引入的一个响应头。

该响应头支持三种配置:

  • DENY:不允许被任何页面嵌入;
  • SAMEORIGIN:不允许被本域以外的页面嵌入;
  • ALLOW-FROM uri:不允许被指定的域名以外的页面嵌入;

X-Content-Type-Options

这个响应头的值只能是 nosniff ,用来禁止浏览器自动猜测资源类型,防止他人被利用。


X-Xss-Protection

X-Xss-Protection,是用来防范XSS的。

该响应头支持三种配置:

  • 0:禁用XSS保护;
  • 1:启用XSS保护;
  • 1; mode=block:启用XSS保护,并在检查到XSS攻击时,停止渲染页面(例如IE8中,检查到攻击时,整个页面会被一个#替换);

效果

2019-12-27_142140.png2019-12-27_142140.png