HTTP/2是HTTP协议的重大升级,能显著提升网站性能。以下是针对Nginx服务器的HTTP/2优化与安全配置方案。
server {
listen 443 ssl http2; # 在SSL基础上启用HTTP/2
server_name example.com;
# 其他配置...
}
ssl_protocols TLSv1.2 TLSv1.3; # 禁用旧版TLS
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
http2_chunk_size 8k; # 默认16k,可调整为8k以改善小文件传输
http2_max_concurrent_streams 128; # 默认128,可根据服务器性能调整
http2_max_field_size 16k; # 请求头字段最大大小
http2_max_header_size 64k; # 请求头最大总大小
location = /index.html {
http2_push /style.css;
http2_push /script.js;
http2_push /image.jpg;
}
keepalive_timeout 75s;
keepalive_requests 1000;
ssl_protocols TLSv1.2 TLSv1.3; # 禁用TLS 1.0和1.1
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
ssl_early_data on;
location ~* \.(js|css)$ {
http2_priority_highest;
}
location ~* \.(jpg|png|gif)$ {
http2_priority_low;
}
http2_idle_timeout 3m; # 保持空闲连接时间
log_format http2 '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'protocol:$server_protocol h2:$http2';
location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
http2_max_concurrent_streams 128;
http2_chunk_size 8k;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
location / {
root /var/www/html;
index index.html;
# 资源推送
http2_push /styles/main.css;
http2_push /scripts/app.js;
}
}
nginx -s reload
通过以上配置,您可以充分利用HTTP/2的多路复用、头部压缩和服务器推送等特性,同时确保连接的安全性。