diff --git a/install.sh b/install.sh
index 3342d7e..5b2963e 100644
--- a/install.sh
+++ b/install.sh
@@ -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
-
- cat > "/etc/httpd/conf.d/php-fpm.conf" << 'EOF'
-# PHP-FPM configuration for Apache
-# НЕ загружаем mod_php - используем PHP-FPM через ProxyPass
-
-# Включаем нужные модули (без 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
-
- SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
-
-
-# Альтернативный способ через TCP (если Unix socket не работает)
-#
-# SetHandler "proxy:fcgi://127.0.0.1:9000"
-#
-EOF
+ # Отключаем старые конфигурации 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
- # Для 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
+ log_error "Не найден конфигурационный файл PHP-FPM"
+ exit 1
+ fi
-
- SetHandler application/x-httpd-php
-
+ # Создаем конфигурацию только для PHP-FPM (без mod_php)
+ cat > "/etc/httpd/conf.d/php-fpm.conf" << 'EOF'
+# PHP-FPM configuration for Apache
+# ВАЖНО: НЕ загружаем mod_php - используем только PHP-FPM
-# 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
-
- LoadModule php_module modules/libphp.so
+# Базовые модули Apache (проверяем, не загружены ли уже)
+
+ 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
- SetHandler application/x-httpd-php
+ SetHandler "proxy:unix:SOCKET_PATH_PLACEHOLDER|fcgi://localhost"
-# 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
- fi
- fi
- cat > "/etc/httpd/conf.d/altcor.conf" << '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
# Настройки сжатия
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
- # Кэширование
+ # Кэширование статических ресурсов
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"
# Заголовки безопасности
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"
+ # Добавляем заголовки кэширования для статических файлов
+
+ Header set Cache-Control "public, max-age=2592000"
+
-# Запрет доступа к конфигурационным файлам
+# Запрет доступа к служебным файлам
Require all denied
@@ -562,48 +610,43 @@ ServerSignature Off
Require all denied
+
+
+ Require all denied
+
+
+# Запрет доступа к директориям .git и подобным
+
+ Require all denied
+
+
+# Дополнительная защита от выполнения скриптов в uploads
+
+
+ Require all denied
+
+
+ Require all denied
+
+
+ Require all denied
+
+
+ Require all denied
+
+
+ Require all denied
+
+
+ Require all denied
+
+
+ Require all denied
+
+
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 "Создание конфигурации виртуального хоста..."