TLS1.3 是现在最新的 HTTPS 加密版本,网上很多教程为了兼容老版本,会写一大堆配置。本文给一个精简的开启且只开启 TLS1.3 的配置,适用于不用考虑兼容性的个人网站。
user www-data;
pcre_jit on;
events { multi_accept on; }
http {
sendfile on;
tcp_nopush on;
include mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1.3;
ssl_early_data on; # 0-RTT,若担心安全问题可关掉
ssl_stapling on; # 如果用CDN的证书需去掉这两行
ssl_stapling_verify on;
ssl_certificate certs/yoursite.com.crt; # 如果有多个虚拟主机可不放这里
ssl_certificate_key certs/yoursite.com.key; # 为相对于/etc/nginx的路径
# 真正的虚拟主机配置
server {
listen [::]:443 ssl http2;
server_name yoursite.com;
root /var/www/html;
add_header Strict-Transport-Security "max-age=15768000" always; # 根据自己需要修改
}
# www跳转apex
server {
listen [::]:443 ssl http2;
server_name www.yoursite.com;
return 301 $scheme://yoursite.com$request_uri;
}
# http跳转https
server {
listen [::]:80;
server_name yoursite.com *.yoursite.com;
return 301 https://$host$request_uri;
}
# 禁止Host不匹配的访问
server {
listen [::]:80 default_server reuseport ipv6only=off; # 想分开监听V4就去掉ipv6only
listen [::]:443 ssl default_server reuseport ipv6only=off;
ssl_certificate certs/selfsigned.crt; # 使用openssl生成的自签证书
ssl_certificate_key certs/selfsigned.key;
return 444;
}
}
缩进稍微处理了一下,以便缩小宽度。
还要简单解释几句。
ssl_session_cache是不需要使用的,此指令用于老浏览器不支持其它方式的TLS会话复用,靠它来启用服务端的。TLS1.3也不会使用它来会话复用。
ssl_ciphers无需指定,默认就会使用aes128和256-gcm以及chacha20。
ssl_prefer_server_ciphers不要启用,在有aes硬件加速的设备上,aes加密的效率比chacha20高。应让现代浏览器来选择加密方式,在不支持aes加速的设备上它会自动选择chacha20,若支持则自动选择aes。