简体   繁体   English

如何使用 ubuntu 20.04 在 apache2 上启用 http/2?

[英]how to enable http/2 on apache2 using ubuntu 20.04?

I have VPS server running ubuntu 20.04 (apache2) and is using http/1.1 and I want to upgrade to http/2我有运行 ubuntu 20.04 (apache2) 的 VPS 服务器,并且正在使用 http/1.1,我想升级到 http/2

The domain is already configured using v-hosts (and has the ssl installed - lets encrypt).该域已经使用 v-hosts 进行了配置(并且安装了 ssl - 让我们加密)。

Testing the current protocol:测试当前协议:

$ curl -I https://my-domain.com
HTTP/1.1 200 OK
Date: Fri, 12 Mar 2021 17:32:01 GMT
Server: Apache/2.4.41 (Ubuntu)
Content-Type: text/html; charset=UTF-8

Steps that I done to upgrade to http/2:我升级到 http/2 的步骤:

1) sudo a2enmod http2

2) add in virtual host (ex: /etc/apache2/sites-enabled/my-domain.com-le-ssl.conf) the line:
Protocols h2 http/1.1     

3) check the config
sudo apache2ctl configtest

4) Restart the web server
sudo systemctl reload apache2

Test again the ptotocol:再次测试协议:

$ curl -I https://my-domain.com
HTTP/1.1 200 OK
Date: Fri, 12 Mar 2021 17:57:07 GMT
Server: Apache/2.4.41 (Ubuntu)
Upgrade: h2
Connection: Upgrade
Content-Type: text/html; charset=UTF-8

As you can see it still using the http/1.1如您所见,它仍在使用 http/1.1

I also updated the apache2 from 2.4.41 -> 2.4.46... but the same problem.我还从 2.4.41 -> 2.4.46 更新了 apache2 ......但同样的问题。

What did I miss???我错过了什么???

** UPDATE ** **更新**

apache2 loaded modules apache2 加载模块

 $ sudo apachectl -M
 Loaded Modules:
 core_module (static)
 so_module (static)
 watchdog_module (static)
 http_module (static)
 log_config_module (static)
 logio_module (static)
 version_module (static)
 unixd_module (static)
 access_compat_module (shared)
 alias_module (shared)
 auth_basic_module (shared)
 authn_core_module (shared)
 authn_file_module (shared)
 authz_core_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 expires_module (shared)
 filter_module (shared)
 headers_module (shared)
 http2_module (shared)
 mime_module (shared)
 mpm_prefork_module (shared)
 negotiation_module (shared)
 php7_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 socache_shmcb_module (shared)
 ssl_module (shared)
 status_module (shared)

php 7.4.3 installed php 7.4.3 已安装

php 
libapache2-mod-php 
php-mysql 
php-cli 
php-mbstring 
php-imagick 
php-xml 
php-gd 
php-zip 
php-curl 
php-opcache 
php-soap 
php-bcmath

vhost config:虚拟主机配置:

<VirtualHost *:80>
    ServerAdmin admin@my-domain.com
    ServerName my-domain.com
    ServerAlias www.my-domain.com
    DocumentRoot /var/www/my-domain.com/public

    Protocols h2 http/1.1 

    <Directory /var/www/my-domain.com/public/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =my-domain.com [OR]
RewriteCond %{SERVER_NAME} =www.my-domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

and the ssl config:和 ssl 配置:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin admin@my-domain.com
    ServerName my-domain.com
    ServerAlias www.my-domain.com
    DocumentRoot /var/www/my-domain.com/public

    Protocols h2 http/1.1 

    <Directory /var/www/my-domain.com/public/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/my-domain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/my-domain.com/privkey.pem
</VirtualHost>
</IfModule>

You should probably add the --http2 option to your curl command您可能应该在 curl 命令中添加 --http2 选项

  1. Replacing the mpm_prefork with mpm_event用 mpm_event 替换 mpm_prefork
  2. using php-fpm (libapache2-mod-fcgid) instead of (libapache2-mod-php)使用 php-fpm (libapache2-mod-fcgid) 而不是 (libapache2-mod-php)

solve the problems.解决问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM