2 votes

Apache - http/2 activé mais utilise toujours http/1.1

J'exécute Apache/2.4.38 (Unix) OpenSSL/1.0.2k-fips sur CentOS 7, PHP 7.2.14, j'ai installé et activé http/2 en suivant le guide à l'adresse suivante https://www.tunetheweb.com/performance/http2/ . Aucune erreur n'est signalée et le module est chargé mais les pages restent servies par http/1.1.

Cela n'est pas dû à l'utilisation du mpm prefork (event est utilisé).

Il ne s'agit pas d'un problème de cache de navigateur (Chrome dev tools est ouvert et le cache est désactivé ; j'ai également utilisé la fonction https://tools.keycdn.com/http2-test ).

Le serveur a été redémarré plusieurs fois.

Les fichiers conf incluent la directive suivante plusieurs fois, dans le corps principal et dans les sections VirtualHost :

Protocols h2 http/1.1

La directive SSL Protocol est :

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

Sortie du journal des erreurs (défini au niveau de débogage) :

[Sun Feb 03 08:14:28.563204 2019] [ssl:warn] [pid 15944:tid 140617433143168] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Sun Feb 03 08:14:28.563263 2019] [http2:info] [pid 15944:tid 140617433143168] AH03090: mod_http2 (v1.11.4, feats=CHPRIO+SHA256+INVHD+DWINS, nghttp2 1.36.0), initializing...
[Sun Feb 03 08:14:28.567088 2019] [mpm_event:notice] [pid 15944:tid 140617433143168] AH00489: Apache/2.4.38 (Unix) OpenSSL/1.0.2k-fips configured -- resuming normal operations

Sortie de httpd -V :

Server version: Apache/2.4.38 (Unix)
Server built:   Jan 31 2019 09:55:17
Server's Module Magic Number: 20120211:83
Server loaded:  APR 1.6.5, APR-UTIL 1.6.1
Compiled using: APR 1.6.5, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     event
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/usr/local/apache2"
 -D SUEXEC_BIN="/usr/local/apache2/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

Sortie de apachectl -M :

Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_event_module (static)
 xsendfile_module (shared)
 access_compat_module (shared)
 actions_module (shared)
 alias_module (shared)
 allowmethods_module (shared)
 auth_basic_module (shared)
 auth_digest_module (shared)
 authn_anon_module (shared)
 authn_core_module (shared)
 authn_dbd_module (shared)
 authn_dbm_module (shared)
 authn_file_module (shared)
 authn_socache_module (shared)
 authz_core_module (shared)
 authz_dbd_module (shared)
 authz_dbm_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_owner_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cache_module (shared)
 cache_disk_module (shared)
 data_module (shared)
 dbd_module (shared)
 deflate_module (shared)
 dir_module (shared)
 dumpio_module (shared)
 echo_module (shared)
 env_module (shared)
 expires_module (shared)
 ext_filter_module (shared)
 filter_module (shared)
 headers_module (shared)
 include_module (shared)
 info_module (shared)
 log_config_module (shared)
 logio_module (shared)
 mime_magic_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 remoteip_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 slotmem_plain_module (shared)
 slotmem_shm_module (shared)
 socache_dbm_module (shared)
 socache_memcache_module (shared)
 socache_shmcb_module (shared)
 status_module (shared)
 substitute_module (shared)
 suexec_module (shared)
 unique_id_module (shared)
 unixd_module (shared)
 userdir_module (shared)
 version_module (shared)
 vhost_alias_module (shared)
 dav_module (shared)
 dav_fs_module (shared)
 dav_lock_module (shared)
 http2_module (shared)
 lua_module (shared)
 proxy_module (shared)
 lbmethod_bybusyness_module (shared)
 lbmethod_byrequests_module (shared)
 lbmethod_bytraffic_module (shared)
 lbmethod_heartbeat_module (shared)
 proxy_ajp_module (shared)
 proxy_balancer_module (shared)
 proxy_connect_module (shared)
 proxy_express_module (shared)
 proxy_fcgi_module (shared)
 proxy_fdpass_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_scgi_module (shared)
 proxy_wstunnel_module (shared)
 ssl_module (shared)
 systemd_module (shared)
 cgid_module (shared)

Capture d'écran de l'extrait de phpinfo() :

phpinfo

J'apprécierais toute autre idée.

0 votes

Comment testez-vous exactement le support HTTP/2 ?

0 votes

J'effectue des tests à l'aide de Chrome Dev tools, du panneau Réseau et de l'outil de test disponible à l'adresse suivante tools.keycdn.com/http2-test

0 votes

La configuration me semble correcte. Que dit la sortie tools.keycdn.com ?

1voto

Barry Pollard Points 4411

Tout semble être bien configuré du côté d'Apache et je vois que vous renvoyez la suggestion de mise à niveau dans vos en-têtes HTTP. Je ne peux que suggérer qu'il y a quelque chose d'autre en face d'Apache (comme un équilibreur de charge ?) qui fait la terminaison SSL sans ALPN et empêche ainsi HTTP/2.

La façon la plus simple de tester cela serait d'exécuter ce qui suit à partir de votre serveur :

openssl s_client -alpn h2 -connect 127.0.0.1:443 -status

Et voyez si ALPN est pris en charge lors de la connexion à localhost.

Si c'est le cas, essayez à nouveau avec votre domaine et voyez si ALPN n'est pas pris en charge lors de la connexion à votre domaine. Cela suggère qu'un équilibreur de charge ou autre se trouve devant votre instance d'Apache et termine le SSL, et qu'il ne prend pas en charge ALPN.

1voto

Pete Coward Points 41

Merci à Barry Pollard pour m'avoir mis sur la bonne piste, c'était un problème d'ALPN. Nous n'avons pas d'équilibreur de charge mais ssl doit être compilé dans Apache comme une bibliothèque statique et non comme un module partagé pour supporter ALPN. Après avoir recompilé Apache, j'ai maintenant http/2

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X