LINUX.ORG.RU

Настройка Apache PHP для работы от пользователя по HTTP2

 , ,


1

2

Для работы Apache от пользователя можно использовать конфигурацию apache+mod_php+mpm_prefork+mpm_itk, но эта комбинация не работает по HTTP2. Поэтому настраиваем по-другому.

У меня работает конфигурация apache + php8.3-fpm + mpm_event + http2.

Первичная настройка

sudo add-apt-repository ppa:ondrej/php
sudo add-apt-repository ppa:ondrej/apache2
sudo apt update
sudo apt upgrade
sudo apt install apache2
sudo apt install php8.3-fpm

#отключаем если было
sudo a2dismod php8.3
sudo a2dismod mpm_itk
sudo a2dismod mpm_prefork


sudo a2enconf php8.3-fpm
sudo a2enmod proxy_fcgi setenvif
sudo a2enmod mpm_event
sudo a2enmod http2

Редактируем пул PHP

sudo cp /etc/php/8.3/fpm/pool.d/www.conf /etc/php/8.3/fpm/pool.d/jura12.conf 
sudo mcedit /etc/php/8.3/fpm/pool.d/jura12.conf 
Меняем 3 вещи:
1. название пула с [www] на [jura12];
2. имя пользователя и группы с user = www-data и group = www-data на своего пользователя и свою группу;
3. имя файла listen = /run/php/php8.3-fpm.sock на /run/php/php8.3-fpm.jura12.sock.

Редактируем настройки сайта
В файле /etc/apache2/sites-enabled/jura12.ru.conf в разделе Virtualhost добавляем строки:

<FilesMatch ".+\.ph(ar|p|tml)$">
        SetHandler "proxy:unix:/run/php/php8.3-fpm.jura12.sock|fcgi://localhost"
</FilesMatch>

Запускаем

sudo systemctl start php8.3-fpm
sudo systemctl start apache2

Протестировано на Ubuntu 24.04.

Что скажете?

P.S. для успешной работы нужно включить https. для этого надо использовать бесплатные сертификаты Let's Encrypt. а уже поверх них будет работать http2. тут есть варианты но они тянут на отдельную статью.



Проверено: hobbit ()
Последнее исправление: jura12 (всего исправлений: 12)

Наверное всё норм, но непонятно почему и зачем сначала нужно подключать PPA от кого то непонятного, а не использовать просто пакеты из репозитория. В родном репозитории разве нет нужных версий? Если нет, тогда ладно.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Репозитории нужны для установки последних версий пхп и апачи. если не надо то они не нужны. помойму надо еще добавить включение мод proxy и fcgi. во вторник проверю и исправлю.

jura12
() автор топика
Ответ на: комментарий от Werenter

Таки да, вместо подкостыливания этой окаменелости можно просто взять современную связку nginx+php-fpm где описанный способ - дефолт.

firkax ★★★★★
()
Ответ на: комментарий от firkax

«современную связку nginx+php-fpm » - эта современная связка работает от www-data. чтоб работало от пользователя для nginx наверно также надо настраивать пул php-fpm.

добавил sudo a2enmod proxy_fcgi setenvif можно публиковать.

jura12
() автор топика
Последнее исправление: jura12 (всего исправлений: 1)
Ответ на: комментарий от jura12

Я про то, что у nginx режим работы через php-fpm - дефолтный и вобщем-то единственный. Устаревших mod_php и подобного он никогда не поддерживал и не запутывает всей этой мутью новичков.

firkax ★★★★★
()
Ответ на: комментарий от jura12

Я вижу. Отмечу, что в nginx http2 включается дописыванием слова «http2» рядом с адресом сервера и ничего не ломает из других настроек.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от Werenter

Ай, ну это ты его кастанул, так неспортивно.

thesis ★★★★★
()

Что скажете?

Что ты не решил задачу, которую решал mod_itk. Веб-сервер все еще не умеет ворочать мешки файлы, лежащие в пользовательских каталогах.

thesis ★★★★★
()
Ответ на: комментарий от thesis

это не мод userdir. тут надо указывать папку где лежит сайт /var/www/mysite, и можно chown -R myuser:myuser /var/www/mysite . ибудет работать. если интересно могу запостить полный конфиг сайта.

эта фишка нужна тем кто юзает composer или просто удобно не надо в www-data переименовывать каждый раз.

jura12
() автор топика
Ответ на: комментарий от jura12

Да, mod_userdir здесь тоже ни при чем.

эта фишка

Это не «фишка», это базовая настройка. Ты просто сменил одного пользователя на другого.

Итого, заголовок выглядит вот так: " Настройка Apache PHP для работы от пользователя по HTTP2", а внутри рассматривается вопрос - «смена пользователя пула php-fpm». Ни вебсервера, ни хттп2.

chown -R myuser:myuser /var/www/mysite

Ну и чего теперь, у пхп-фпм такие же права удалить все нахрен, как и у «человеческого» myuser? Вот счастье-то.

thesis ★★★★★
()
Ответ на: комментарий от thesis

«Ну и чего теперь, у пхп-фпм такие же права удалить все нахрен» вот это я не знаю. тут изоляции нет. а где она есть?

пользователя при mpm_itk вы прописываете в каждом новом сайте, а здесь в каждом новом пуле.

jura12
() автор топика
Последнее исправление: jura12 (всего исправлений: 1)
Ответ на: комментарий от thesis

насчет «полно закапывальщиков» назовите чтон чтоб протестировать. я специально вначале привел репозитории чтоб установить последний исправленный вариант апача.

jura12
() автор топика

Для тех у кого мало времени покажу рабочий конфиг апача:

sudo mcedit /etc/apache2/sites-available/jura12.ru.conf

Вставляем в редактор следующие строки:

<VirtualHost *:80>
ServerName valid-walrus
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/drupal10/web
<Directory "/var/www/drupal10/web">
   AllowOverride All
</Directory>
<FilesMatch ".+\.ph(ar|p|tml)$">
        SetHandler "proxy:unix:/run/php/php8.3-fpm.jura12.sock|fcgi://localhost"
</FilesMatch>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
включаем:
sudo a2dissite 000-default.conf
sudo a2ensite jura12.ru.conf 
sudo systemctl restart apache2

sudo mkdir -p /var/www/drupal10/web
sudo chown -R yourusername:yourusername /var/www

Проверки

mcedit /var/www/drupal10/web/phpinfo.php
<?php
phpinfo();
?>
links 127.0.0.1/phpinfo.php

jura12
() автор топика
Ответ на: комментарий от jura12

правильнее раздел включаем так:

sudo mkdir -p /var/www/drupal10/web
sudo chown -R yourusername:yourusername /var/www

sudo a2dissite 000-default.conf
sudo a2ensite jura12.ru.conf 
sudo systemctl restart apache2
jura12
() автор топика
Ответ на: комментарий от Aceler

можете поэксперементировать установив multipass дайте команду

multipass launch jura12
и все будет в виртуалке изначально.

jura12
() автор топика

для тех кто не осилил https:

sudo snap install --classic certbot

sudo systemctl stop apache2
sudo certbot --apache -d jura12.ru
sudo systemctl start apache2

проверяем http2: Здесь

jura12
() автор топика
Последнее исправление: jura12 (всего исправлений: 1)
Ответ на: комментарий от firkax

Таки да, вместо подкостыливания этой окаменелости можно просто взять современную связку nginx+php-fpm где описанный способ - дефолт.

К сожалению некоторые вещи (из последнего - интеграция с keycloak/oidc) с nginx не работали, а с апачем - завелось сразу.

Но я сам не любитель апача с его xml-flavored синтаксисом.

skyman ★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.