HTTP2 на Ubuntu 17.04 не работает

Я установил Ubuntu 17.04 на свой компьютер, настроил Apache с PHP 7 для работы над некоторыми разработками, но когда я попытался настроить HTTP2 на моем Apache, это не сработало, потому что это не настройка для Apache, работающего с mpm-prefork, и я не могу отключить mpm-prefork, потому что он используется PHP 7, любые идеи, как я могу заставить это работать?

Спасибо.

0
задан 16 October 2017 в 02:10

2 ответа

Модель prefork накладывает довольно много ограничений на HTTP даже без HTTP / 2, но с HTTP / 2 она предотвращает использование многих функций HTTP / 2. Поскольку каждый запрос возникает в отдельном процессе, и нет многопоточности, Apache не может их мультиплексировать (обслуживать несколько запросов в одном и том же TCP-соединении), если только он не изменит способ работы допроса, который существенно не изменился, , Таким образом, поддержка HTTP / 2 ограничена одним запросом за один раз за соединение при использовании prefork.

(Это описано здесь)

Хороший современный способ интеграции PHP с веб-сайтом сервер должен использовать PHP-FPM (встроенный менеджер процессов FastCGI в PHP) и ретранслятор веб-сервера PHP запрашивает это и получает ответы. Затем вы можете использовать многопоточный веб-сервер, такой как Apache, с рабочим MPM или веб-сервером на основе событий, таким как Apache с событием MPM, или nginx (что особенно хорошо подходит для HTTP / 2 из-за его способности открывать тысячи соединения с очень маленькой памятью). На самом деле это, вероятно, самый распространенный способ использования PHP с nginx, и я также видел, что он использовался на Apache2 раньше по соображениям безопасности (например, с разными PHP-приложениями, работающими как отдельные пользователи). Поддержка HTTP / 2 также является достойной причиной.

Существует множество руководств по настройке веб-серверов и PHP для использования PHP-FPM.

2
ответ дан 18 July 2018 в 05:15

Модель prefork накладывает довольно много ограничений на HTTP даже без HTTP / 2, но с HTTP / 2 она предотвращает использование многих функций HTTP / 2. Поскольку каждый запрос возникает в отдельном процессе, и нет многопоточности, Apache не может их мультиплексировать (обслуживать несколько запросов в одном и том же TCP-соединении), если только он не изменит способ работы допроса, который существенно не изменился, , Таким образом, поддержка HTTP / 2 ограничена одним запросом за один раз за соединение при использовании prefork.

(Это описано здесь)

Хороший современный способ интеграции PHP с веб-сайтом сервер должен использовать PHP-FPM (встроенный менеджер процессов FastCGI в PHP) и ретранслятор веб-сервера PHP запрашивает это и получает ответы. Затем вы можете использовать многопоточный веб-сервер, такой как Apache, с рабочим MPM или веб-сервером на основе событий, таким как Apache с событием MPM, или nginx (что особенно хорошо подходит для HTTP / 2 из-за его способности открывать тысячи соединения с очень маленькой памятью). На самом деле это, вероятно, самый распространенный способ использования PHP с nginx, и я также видел, что он использовался на Apache2 раньше по соображениям безопасности (например, с разными PHP-приложениями, работающими как отдельные пользователи). Поддержка HTTP / 2 также является достойной причиной.

Существует множество руководств по настройке веб-серверов и PHP для использования PHP-FPM.

2
ответ дан 24 July 2018 в 18:16
  • 1
    Это именно то, чего я хочу избежать (запуск PHP как CGI), я не доверяю CGI. – jfha73 16 October 2017 в 18:17
  • 2
    Ну, это FastCGI, и с FastCGI Process Manager от PHP это довольно солидно. Возможно, вы могли бы изложить свои причины, чтобы избежать FastCGI в вопросе? Я не думаю, что HTTP / 2 с prefork будет когда-либо жизнеспособным, я думаю, Apache решил не делать этого, потому что есть другие способы. – thomasrutter 17 October 2017 в 00:32
  • 3
    Мои причины не доверять CHI - это, в основном, безопасность, у меня скорее есть Thread Safe PHP, чем Non Thread Safe, не учитывая, как быстро он может работать как CGI. – jfha73 17 October 2017 в 17:59
  • 4
    PHP не является потокобезопасным, не обойдя его или не удаляя большие части. Вот почему вы не можете запускать его на многопоточном сервере, поэтому люди используют предварительную версию Apache при запуске в Apache или используют FastCGI. Я предлагаю вам заглянуть в FastCGI больше, поскольку это кажется очевидным практическим способом делать то, что вы хотите, и у вас, кажется, есть некоторые заблуждения относительно этого. – thomasrutter 19 October 2017 в 01:34
  • 5
    Ну, я работал с PHP с версии 3, и я помогал с PHP7 Apache SAPI, когда PHP7 все еще был мастером в github, он также отлично работал на Ubuntu 16.04 без необходимости его запуска для запуска как CGI, Думаю, у меня есть заблуждение. – jfha73 20 October 2017 в 02:34

Другие вопросы по тегам:

Похожие вопросы: