This commit is contained in:
2025-08-11 04:12:19 +03:00
parent 4ec54ba5eb
commit c61ccf799b

View File

@@ -424,7 +424,7 @@ proceed_with_installation() {
fi
log_success "PHP 8.3 и расширения установлены"
log_step "Настройка Apache и модулей..."
log_step "Настройка Apache и модулей..."
if [ "$DISTRO_FAMILY" = "debian" ]; then
a2enmod php8.3 rewrite ssl headers expires deflate >/dev/null 2>&1
@@ -441,76 +441,103 @@ proceed_with_installation() {
APACHE_CONF="/etc/httpd/conf.d/altcor.conf"
WEBSERVER_USER="apache"
# НЕ ЗАГРУЖАЕМ mod_php - используем PHP-FPM!
# Удаляем старые конфигурации PHP
rm -f /etc/httpd/conf.d/php.conf
# Отключаем старые конфигурации PHP и mod_php
rm -f /etc/httpd/conf.d/php.conf /etc/httpd/conf.modules.d/*php*.conf
# Определяем, какой PHP-FPM сервис и путь к конфигурации использовать
if [ -f "/etc/opt/remi/php83/php-fpm.d/www.conf" ]; then
PHP_FPM_CONF="/etc/opt/remi/php83/php-fpm.d/www.conf"
PHP_FPM_SERVICE="php83-php-fpm"
SOCKET_PATH="/var/opt/remi/php83/run/php-fpm/www.sock"
elif [ -f "/etc/php-fpm.d/www.conf" ]; then
PHP_FPM_CONF="/etc/php-fpm.d/www.conf"
PHP_FPM_SERVICE="php-fpm"
SOCKET_PATH="/run/php-fpm/www.sock"
else
log_error "Не найден конфигурационный файл PHP-FPM"
exit 1
fi
# Создаем конфигурацию только для PHP-FPM (без mod_php)
cat > "/etc/httpd/conf.d/php-fpm.conf" << 'EOF'
# PHP-FPM configuration for Apache
# НЕ загружаем mod_php - используем PHP-FPM через ProxyPass
# ВАЖНО: НЕ загружаем mod_php - используем только PHP-FPM
# Включаем нужные модули (без mod_php)
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
# Обработка PHP через PHP-FPM
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
# Альтернативный способ через TCP (если Unix socket не работает)
# <FilesMatch \.php$>
# SetHandler "proxy:fcgi://127.0.0.1:9000"
# </FilesMatch>
EOF
else
# Для Rocky Linux/CentOS/RHEL с Remi
# Проверяем доступные PHP модули
if [ -f "/etc/opt/remi/php83/php.ini" ]; then
# Remi PHP 8.3
cat > "/etc/httpd/conf.d/php.conf" << 'EOF'
# PHP 8.3 from Remi repository
LoadModule php_module modules/libphp83.so
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
# Enable useful modules
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
EOF
else
# Стандартный PHP
cat > "/etc/httpd/conf.d/php.conf" << 'EOF'
# Standard PHP configuration
<IfModule !mod_php.c>
LoadModule php_module modules/libphp.so
# Базовые модули Apache (проверяем, не загружены ли уже)
<IfModule !mod_rewrite.c>
LoadModule rewrite_module modules/mod_rewrite.so
</IfModule>
<IfModule !mod_headers.c>
LoadModule headers_module modules/mod_headers.so
</IfModule>
<IfModule !mod_expires.c>
LoadModule expires_module modules/mod_expires.so
</IfModule>
<IfModule !mod_deflate.c>
LoadModule deflate_module modules/mod_deflate.so
</IfModule>
<IfModule !mod_proxy.c>
LoadModule proxy_module modules/mod_proxy.so
</IfModule>
<IfModule !mod_proxy_fcgi.c>
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
</IfModule>
# Обработка PHP файлов через PHP-FPM
<FilesMatch \.php$>
SetHandler application/x-httpd-php
SetHandler "proxy:unix:SOCKET_PATH_PLACEHOLDER|fcgi://localhost"
</FilesMatch>
# Enable useful modules
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
# Настройки директивы для улучшения производительности
ProxyTimeout 300
ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:SOCKET_PATH_PLACEHOLDER|fcgi://localhost/var/www/html/
EOF
# Заменяем плейсхолдер на реальный путь к сокету
sed -i "s|SOCKET_PATH_PLACEHOLDER|$SOCKET_PATH|g" "/etc/httpd/conf.d/php-fpm.conf"
log_info "Настройка PHP-FPM..."
# Создаем резервную копию конфигурации
cp "$PHP_FPM_CONF" "${PHP_FPM_CONF}.backup.$(date +%Y%m%d_%H%M%S)"
# Настраиваем PHP-FPM pool
sed -i 's/;*listen = .*/listen = '"${SOCKET_PATH//\//\\/}"'/' "$PHP_FPM_CONF"
sed -i 's/;*listen.owner = .*/listen.owner = apache/' "$PHP_FPM_CONF"
sed -i 's/;*listen.group = .*/listen.group = apache/' "$PHP_FPM_CONF"
sed -i 's/;*listen.mode = .*/listen.mode = 0660/' "$PHP_FPM_CONF"
sed -i 's/;*user = .*/user = apache/' "$PHP_FPM_CONF"
sed -i 's/;*group = .*/group = apache/' "$PHP_FPM_CONF"
# Настраиваем производительность PHP-FPM
sed -i 's/;*pm = .*/pm = dynamic/' "$PHP_FPM_CONF"
sed -i 's/;*pm.max_children = .*/pm.max_children = 50/' "$PHP_FPM_CONF"
sed -i 's/;*pm.start_servers = .*/pm.start_servers = 5/' "$PHP_FPM_CONF"
sed -i 's/;*pm.min_spare_servers = .*/pm.min_spare_servers = 5/' "$PHP_FPM_CONF"
sed -i 's/;*pm.max_spare_servers = .*/pm.max_spare_servers = 35/' "$PHP_FPM_CONF"
# Создаем директорию для socket
SOCKET_DIR=$(dirname "$SOCKET_PATH")
mkdir -p "$SOCKET_DIR"
chown apache:apache "$SOCKET_DIR"
# Запускаем и включаем PHP-FPM
systemctl start $PHP_FPM_SERVICE >/dev/null 2>&1
systemctl enable $PHP_FPM_SERVICE >/dev/null 2>&1
if ! systemctl is-active --quiet $PHP_FPM_SERVICE; then
log_error "PHP-FPM не удалось запустить"
systemctl status $PHP_FPM_SERVICE --no-pager -l
exit 1
fi
log_success "PHP-FPM настроен и запущен"
fi
cat > "/etc/httpd/conf.d/altcor.conf" << 'EOF'
# Altcor main configuration
# Отключаем ServerTokens и ServerSignature для безопасности
# Отключаем информацию о сервере для безопасности
ServerTokens Prod
ServerSignature Off
@@ -523,34 +550,55 @@ ServerSignature Off
# Настройки сжатия
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
# Исключаем уже сжатые файлы
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \
\.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
\.(?:gif|jpe?g|png|ico|exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
# Исключаем старые браузеры
SetEnvIfNoCase User-Agent "^Mozilla/4\.0[678]" no-gzip
SetEnvIfNoCase User-Agent "^Mozilla/4\.[0678]" no-gzip
SetEnvIfNoCase User-Agent "MSIE [1-6]\." no-gzip
</IfModule>
# Кэширование
# Кэширование статических ресурсов
<IfModule mod_expires.c>
ExpiresActive On
# Изображения
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
ExpiresByType image/webp "access plus 1 month"
ExpiresByType image/ico "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 month"
# CSS и JS
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
# Шрифты
ExpiresByType font/woff "access plus 1 month"
ExpiresByType font/woff2 "access plus 1 month"
ExpiresByType font/ttf "access plus 1 month"
ExpiresByType font/otf "access plus 1 month"
# HTML и PHP - без кэширования
ExpiresByType text/html "access plus 0 seconds"
ExpiresByType application/x-httpd-php "access plus 0 seconds"
</IfModule>
# Заголовки безопасности
<IfModule mod_headers.c>
Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options DENY
Header always set X-Frame-Options SAMEORIGIN
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# Добавляем заголовки кэширования для статических файлов
<FilesMatch "\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|otf)$">
Header set Cache-Control "public, max-age=2592000"
</FilesMatch>
</IfModule>
</Directory>
# Запрет доступа к конфигурационным файлам
# Запрет доступа к служебным файлам
<Files "*.conf">
Require all denied
</Files>
@@ -562,48 +610,43 @@ ServerSignature Off
<Files ".env">
Require all denied
</Files>
<Files "*.log">
Require all denied
</Files>
# Запрет доступа к директориям .git и подобным
<DirectoryMatch "^\.|\/\.">
Require all denied
</DirectoryMatch>
# Дополнительная защита от выполнения скриптов в uploads
<Directory "/var/www/html/uploads">
<Files "*.php">
Require all denied
</Files>
<Files "*.phtml">
Require all denied
</Files>
<Files "*.pl">
Require all denied
</Files>
<Files "*.py">
Require all denied
</Files>
<Files "*.jsp">
Require all denied
</Files>
<Files "*.asp">
Require all denied
</Files>
<Files "*.sh">
Require all denied
</Files>
</Directory>
EOF
fi
log_info "Настройка PHP-FPM..."
# Определяем путь к конфигурации PHP-FPM
if [ -f "/etc/opt/remi/php83/php-fpm.d/www.conf" ]; then
PHP_FPM_CONF="/etc/opt/remi/php83/php-fpm.d/www.conf"
PHP_FPM_SERVICE="php83-php-fpm"
elif [ -f "/etc/php-fpm.d/www.conf" ]; then
PHP_FPM_CONF="/etc/php-fpm.d/www.conf"
PHP_FPM_SERVICE="php-fpm"
else
log_error "Не найден конфигурационный файл PHP-FPM"
exit 1
fi
# Настраиваем PHP-FPM pool
cp "$PHP_FPM_CONF" "${PHP_FPM_CONF}.backup.$(date +%Y%m%d_%H%M%S)"
# Настройки для работы с Apache
sed -i 's/;*listen = .*/listen = \/run\/php-fpm\/www.sock/' "$PHP_FPM_CONF"
sed -i 's/;*listen.owner = .*/listen.owner = apache/' "$PHP_FPM_CONF"
sed -i 's/;*listen.group = .*/listen.group = apache/' "$PHP_FPM_CONF"
sed -i 's/;*listen.mode = .*/listen.mode = 0660/' "$PHP_FPM_CONF"
sed -i 's/;*user = .*/user = apache/' "$PHP_FPM_CONF"
sed -i 's/;*group = .*/group = apache/' "$PHP_FPM_CONF"
# Создаем директорию для socket
mkdir -p /run/php-fpm
chown apache:apache /run/php-fpm
# Запускаем и включаем PHP-FPM
systemctl start $PHP_FPM_SERVICE >/dev/null 2>&1
systemctl enable $PHP_FPM_SERVICE >/dev/null 2>&1
if ! systemctl is-active --quiet $PHP_FPM_SERVICE; then
log_error "PHP-FPM не удалось запустить"
exit 1
fi
log_success "PHP-FPM настроен и запущен"
log_success "Модули Apache настроены"
log_step "Создание конфигурации виртуального хоста..."