Назад | Перейти на главную страницу

Apache2 с HTTP / 2 обслуживает часть контента с h2, часть с http / 1.1

Я установил HTTP / 2 с Apache 2.4.29.

HTTP / 2 работает, как проверено здесь https://tools.keycdn.com/http2-test.

Когда я подключаюсь к своему сайту через Chrome или Firefox, только некоторый контент использует h2. В частности, статический контент обслуживается через http / 1.1, в то время как запросы на опрос api и websocket обслуживаются через h2. Я бы хотел, чтобы все обслуживали через h2.

Однако я могу получить статические файлы через h2 с помощью curl

curl -k -v https://example.com/images/example.jpg

Это одностраничное приложение с правилами перезаписи, которые, как я думал, были проблемой, но их удаление не помогает.

Вот конфигурация моего сайта:

<IfModule mod_ssl.c>
<VirtualHost *:443>
  Protocols h2 http/1.1
  ServerName example.com
  DocumentRoot /home/ubuntu/public_html

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

  # socket.io 1.0+ starts all connections with an HTTP polling request
  RewriteCond %{QUERY_STRING} transport=polling       [NC]
  RewriteRule /(.*)           http://localhost:8004/$1 [P]

  # When socket.io wants to initiate a WebSocket connection, it sends an
  # "upgrade: websocket" request that should be transferred to ws://
  RewriteCond %{HTTP:Upgrade} websocket               [NC]
  RewriteRule /(.*)           ws://localhost:8004/$1  [P]

  # Proxy API
  ProxyRequests Off
  ProxyPreserveHost On
  ProxyVia Full
  ProxyPass /api http://localhost:8004
  ProxyPassReverse /api http://localhost:8004

  <Directory "/home/ubuntu/public_html" >
    # Don't rewrite files or directories
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]

    # Rewrite everything else to index.html to allow html5 state links
    RewriteRule ^ index.html [L]
  </Directory>

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

Любая помощь приветствуется.