突然发现这个服务器的apache没有开启h2和keepalive,难怪总觉得打开页面特别慢
其实影响最大的还是keepalive,keepalive的核心就是复用连接,相当于是proxy里的多路复用,省去了重复tls握手的时间。
另外发现Cache-Control设置是no-cache,顺便把这个也改了
最后看了一眼,发现并没有真正开启http2,响应头里的h2是因为开启了mod http2后,http2的mod自带的config里自动设置的header所以看起来开了h2,实际在Protocol里就可以看到还是http/1.1,真正的h2在响应头里是没有这个upgrade字段的,主要是因为mpm_prefork不兼容http2,需要改成mpm_event+php-fpm,但是修改mpm_prefork又需要先禁用mod php,又是一个大工程。
加载时间对比
- http/1.1 no-cache:20.75 s
- http/1.1 + keepalive no-cache:5.52 s
- http/2 no-cache:5.85 s
- http/2 cached:667 s
- http/1.1 + keepalive cached:681 ms
发现h2和keepalive其实并不能共存,突然醒悟,h2的tcp复用不就是keepalive么。。。并且从实际测试结果来看,http/2和http/1.1 + keepalive的加载时间非常接近。虽然h2宣称从本质上解决了拥塞问题,但是实际并没看出区别。
know more
enable http2
1 2 3 4 5 6 7 |
a2dismod php7.4 mpm_prefork a2enmod mpm_event apt install php-fpm libapache2-mod-fcgid -y a2enmod proxy_fcgi setenvif && a2enconf php7.3-fpm a2enmod http2 apachectl configtest service apache2 restart |
(optional)/etc/apache2/sites-available/blog.minirplus.com.conf
1 2 3 4 5 |
... <IfModule mod_http2.c> Protocols h2 h2c http/1.1 </IfModule> ... |
enable keepalive
/etc/apache2/apache2.conf
1 2 3 4 5 |
... KeepAlive On MaxKeepAliveRequests 500 KeepAliveTimeout 15 ... |
enable cache
/etc/apache2/sites-available/blog.minirplus.com.conf
1 2 3 4 5 |
... <IfModule mod_headers.c> Header set Cache-Control "max-age=84600, public" </IfModule> ... |
There are no comments yet