我正在尝试通过 SSL 和 http2 运行幽灵博客。SSL 运行正常,但它始终在 HTTP1.1 上提供服务。我试图弄清楚为什么这种情况一直发生。
我的 nginx conf 文件如下所示:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com-0001/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com-0001/privkey.pem;
ssl_dhparam /etc/letsencrypt/live/example.com-0001/dhparam.pem;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
add_header Strict-Transport-Security max-age=31536000;
add_header X-Frame-Options DENY;
location / {
proxy_pass http://localhost:2368;
proxy_set_header Host $http_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 $scheme;
proxy_buffering off;
}
}
server {
listen 80;
listen [::]:80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
node.js 应用程序在端口 2368 上运行。每当我加载域时,都会通过 SSL 呈现它,因此这部分可以正常工作。但它始终通过 http/1.1。我正在运行nginx version: nginx/1.11.5
。
有什么建议么?
答案1
现代浏览器的 HTTP/2 需要阿尔及利亚国家铁路网络,这需要 OpenSSL 1.0.2。CentOS 7 附带 OpenSSL 1.0.1,不支持 ALPN。它仅支持其前身 NPN,当 SPDY 变为 HTTP/2 时,NPN 的使用已被弃用。
我通过将 Web 服务器迁移到 Fedora 来解决这个问题,它目前使用的是 OpenSSL 1.0.2,几个月后将迁移到 1.1.0。这有一些额外的行政负担由于其拥有最新的软件和六个月的发布周期,因此比 CentOS 更受欢迎,但 Web 服务通常无论如何都需要最新的软件。
答案2
正如迈克尔·汉普顿回答我的问题一样,CentOS 7 没有附带 ALPN,而 ALPN 是运行 HTTP2 所必需的,这是正确答案。
这让我进行了更多搜索并发现了这一点:
https://gist.github.com/moneytoo/ab3f34e4fddc2110675952f8280f49c5
本文将向您展示如何自行构建一个 Nginx 版本。我试过了,效果不错。
在此之前,我还按照本教程将我的 OpenSSL 从原始 1.0.1e 升级到最新的 1.0.2. 版本。
https://syslint.com/blog/tutorial/how-to-upgrade-openssl-on-centos-7-or-rhel-7/
我不能说第一部分是否足够,因为我先做了 OpenSSL 部分。希望这可以帮助那些不想改用 Feodora 的人。:)