我想阻止用户使用http访问我的网站。相反,我想强制使用https。
通常,我的网站托管在供应商那里,他们只需勾选";强制https"。
在这种情况下,我有自己的Ubuntu(nginx(服务器。
我想知道我是否也可以在服务器范围内强制执行https,或者我是否必须在HSTS标头中使用预加载标志?
有人能给我指一份描述如何用我的配置解决这个问题的文档吗?
谢谢!
通常需要两个server
块,其中在纯HTTP端口上侦听的块将所有请求重定向到HTTPS:
server {
listen 80;
server_name example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/certificate;
ssl_certificate_key /path/to/privatekey;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
# all the other configuration
}
如果您还需要将所有非www域名请求重定向到www one(反之亦然(,请检查此答案。
@IvanShatsky的回答展示了如何在Nginx中实现HSTS(我相信这正是您所需要的(。
只是为了给答案添加一些上下文:
- 您希望同时拥有两个HTTP→HTTPS重定向和HSTS标头
- 为了防止所有易受攻击的情况,您希望HSTS标头包含
preload
属性(除非您的TLD已启用HSTS,如.dev
或.app
( - 为了将域添加到预加载列表中,您仍然需要在https://hstspreload.org.
由于启用preload
几乎是一张单程票,安全推出计划看起来像这样:
这个想法是从小处着手,逐渐增加有效期和入选标准。
- 查找您拥有的所有子域(请参阅DNS CNAME条目(。这些可能由您的服务器或第三方服务提供服务
- 确保根域和所有子域都可以通过SSL/TLS(可通过HTTPS访问(提供流量服务
- 确保HTTP→HTTPS重定向已配置
- 设置小的过期时间,例如最大使用年限=600(10分钟(,确保所有系统都可运行
- Add includeSubDomains指令
- 对最大年龄进行增量更改。目标是2年的价值
- 添加预加载指令并将域提交到HSTS预加载列表
HTTP严格传输安全性(HSTS(的终极指南。