Перенастраиваем Apache за Nginx в Ubuntu 24.04.1

Перенастраиваем Apache за Nginx в Ubuntu 24.04.1
Photo by Joanna Kosinska / Unsplash

Используемая версия: Apache/2.4+, для версии 2.2 настройка будет отличаться в некоторых моментах.

Настройки

Приводим файл /etc/apache2/ports.conf к следующему виду (Apache будет слушать порт 8080):

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 8080

#<IfModule ssl_module>
#       Listen 443
#</IfModule>
#
#<IfModule mod_gnutls.c>
#       Listen 443
#</IfModule>

Редактируем файл /etc/apache2/apache2.conf:

sudo nano /etc/apache2/apache2.conf

Где-нибудь вставляем строку ServerName localhost:

# Global configuration
#

ServerName localhost

Отключаем дефолтовый сайт:

sudo a2dissite 000-default

Отключаю от Apache поддержку php, работать будем через php-fpm.

udo a2dismod php8.2

Меняем mpm_prefork на event:

sudo a2dismod mpm_itk
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
Установка PHP 8.2 на Ubuntu 24.04.1
Добавляем репозиторий: sudo add-apt-repository ppa:ondrej/php Обновляем пакеты: sudo apt-get update Устанавливаем PHP с модулями: sudo apt install php8.2 php8.2-cli php8.2-curl php8.2-mbstring php8.2-zip php8.2-gd Для работы с MySQL устанавливаем модуль mysqli: sudo apt install php8.2-mysqli а так-же модуль php-fpm: sudo apt install

Устанавливаем модуль поддержки fastcgi для поддержки работы с php-fpm:

sudo apt install libapache2-mod-fcgid

Включаем работу с php-fpm и proxy:

sudo a2enconf php8.2-fpm
sudo a2enmod proxy
sudo a2enmod proxy_fcgi

Для отображения в логах реального IP включаем ещё модуль:

sudo a2enmod remoteip

Создаём файл конфигурации модуля:

sudo nano /etc/apache2/conf-available/remoteip.conf

со следующим содержимым:

<IfModule remoteip_module>
        RemoteIPHeader X-Forwarded-For
        RemoteIPInternalProxy 127.0.0.1
        RemoteIPInternalProxy 192.168.0.1/24
        RemoteIPTrustedProxy 127.0.0.1 192.168.1.0/24 EXTERNAL_IP
</IfModule>

и включаем конфигурацию:

sudo a2enconf remoteip

Добавляем поддержку http2 (не знаю, на сколько это будет работать за Nginx, но на всякий включил), для этого редактируем файл /etc/apache2/apache2.conf (Можно добавлять в директиву VirtualHost), опять же где-нибудь вставляем строку:

Protocols h2 h2c http/1.1

, где:

  • h2 is HTTP/2 over TLS (protocol negotiation via ALPN).
  • h2c is HTTP/2 over TCP.

Подключаем модуль:

sudo a2enmod http2

Перезапускаем Apache для применения изменений.

Скелет VirtualHost

(некоторые строки закомментированы), не забудьте внимательно перечитать файл и исправить некоторые строки с путями и пользователями на свои:

<VirtualHost 127.0.0.1:8080>

        ServerName host.savenkoff.com

        DocumentRoot /home/user_login/data/www/host_savenkoff_com

        CustomLog /home/user_login/data/logs/apache.host.access.log combined
        ErrorLog /home/user_login/data/logs/apache.host.error.log

        ServerAdmin user_login@savenkoff.com

        AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
        AddType application/x-httpd-php-source .phps

        #php_admin_value open_basedir "/home/user_login/data:."
        #php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f host@savenkoff.com"
        #php_admin_value upload_tmp_dir "/home/user_login/data/tmp"
        #php_admin_value session.save_path "/home/user_login/data/tmp"

        AddDefaultCharset utf-8

        DirectoryIndex index.html index.php
        <Directory /home/user_login/data/www/host_savenkoff_com>
                #Options -ExecCGI -Includes
                # Options Indexes FollowSymLinks MultiViews
                Options FollowSymLinks MultiViews
                AllowOverride All
                Require all granted
                #php_admin_value open_basedir "/home/user_login/data:."
                #php_admin_flag engine on
            <IfModule mod_dav.c>
                Dav off
            </IfModule>
        </Directory>
</VirtualHost>