http 2与centos 7.0,nginx和一个nodejs应用程序(鬼)

我试图让一个幽灵博客运行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

有什么build议么?

使用现代浏览器的HTTP / 2需要ALPN ,它需要OpenSSL 1.0.2。 CentOS 7随OpenSSL 1.0.1一起提供,不支持ALPN。 它只支持其前身NPN,当SPDY变成HTTP / 2时,它的使用已被弃用。

我通过将Web服务器迁移到目前拥有OpenSSL 1.0.2的Fedora来处理这个问题,并将在几个月内转移到1.1.0。 由于拥有最近的软件和六个月的发布周期,这比CentOS有一些额外的pipe理负担 ,但是Web服务通常还是需要最新的软件。

正如迈克尔·汉普顿(Michael Hampton)回答我的问题,CentOS 7不附带ALPN,这是运行HTTP2所必需的,这是正确的答案。

这让我search了一下,发现了这个:

https://gist.github.com/moneytoo/ab3f34e4fddc2110675952f8280f49c5

有了这个要点,它将向您展示如何自己构build一个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。 🙂