今天早上,我致力于让我所有的网站都通过 HTTPS 运行,我想借此机会切换到 HTTP2。
我的服务器运行的是 Debian 8。我已将 Apache 更新到 2.4.29 以获得 H2 支持。
我已经为我的所有域创建了 TLS 证书,它们都运行良好(TLS 1.2,使用 letsencrypt 创建)
我认为一切都已配置好让 apache 在 H2 中提供服务,但出于某种原因我只获得了 HTTP/1.1 协议(protocol)。
我启用了 http2 apache 模块:
a2enmod http2
我还创建了一个包含以下信息的 http2.conf(我也已启用):
Protocols h2 h2c http/1.1
H2Push on
H2PushPriority * after
H2PushPriority text/css before
H2PushPriority image/jpeg after 32
H2PushPriority image/png after 32
H2PushPriority application/javascript interleaved
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite 'EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS'
来源:https://www.shivering-isles.com/http-2-getting-ready-on-debian-with-apache2/
我也试过不使用这个 conf 文件并在主 apache conf 文件或虚拟主机中添加“Protocols h2 h2c http/1.1”,但它仍然是一样的。
知道为什么 Apache 使用 HTTP/1.1 而不是 H2 吗?
最佳答案
您是否正在使用 mpm_event 运行 apache2? 然后您还需要为 PHP 启用 fastcgi 处理程序,激活 PHP-fpm 的配置并禁用 PHP apache2 模块。
你的命令应该是这样的:
root@host:/etc/apache2# a2dismod php7.2
root@host:/etc/apache2# a2enmod proxy proxy_fcgi
root@host:/etc/apache2# a2enconf php7.2-fpm
root@host:/etc/apache2# a2dismod mpm_prefork
root@host:/etc/apache2# a2enmod mpm_event
Enabling module mpm_event.
To activate the new configuration, you need to run:
systemctl restart apache2
root@host:/etc/apache2# systemctl restart apache2
用您的版本替换 PHP 版本号(我使用 7.2)。如果您需要,请在评论中告诉我,PHP fcgi 配置有一些更深入的配置设置。
关于Apache 不提供 H2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49875304/