问题
为了提高网站访问速度,在nginx中启用http2协议,配置完成后通过浏览器访问站点无法显示页面,提示“ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY”。
nginx部分配置如下:
http {
include mime.types;
default_type application/octet-stream;
server_tokens off;#隐藏版本号
sendfile on;
tcp_nopush on;
keepalive_timeout 100;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
#gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png
;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
server {
listen 80;
listen 443 ssl http2;
server_name pre.test.com;
client_max_body_size 100m;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_certificate /etc/ssl/pre/fullchain.crt;
ssl_certificate_key /etc/ssl/pre/private.pem;
ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;#加密套件组
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
if ($server_port = 80) {
rewrite ^(.*)$ https://$host$1 permanent;
}
#charset koi8-r;
#access_log logs/host.access.log main;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /fxld {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_next_upstream off;
proxy_connect_timeout 30;
proxy_read_timeout 300;
proxy_send_timeout 300;
}
}
}
问题分析
根据错误提示“ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY”,可以看出是增加的HTTP2导致的问题,尝试删除“listen 443 ssl http2;”中的http2,重启nginx后可以正常访问网站。错误提示安全性不足,所以怀疑是ssl的加密算法存在问题。
解决方案
ssl_ciphers参数用于设置ssl协议的加密套件组,使用不同的加密套件组,生成的密码强度也不一样。尝试更换加密套件组,选择一个加密强度更大的加密套件组:
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
修改后,重新启用http2协议,然后重启nginx,访问网站发现页面可以正常显示,查看请求明细可以看出HTTP2协议已经生效。