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