Фикс
This commit is contained in:
251
install.sh
251
install.sh
@@ -424,7 +424,7 @@ proceed_with_installation() {
|
|||||||
fi
|
fi
|
||||||
log_success "PHP 8.3 и расширения установлены"
|
log_success "PHP 8.3 и расширения установлены"
|
||||||
|
|
||||||
log_step "Настройка Apache и модулей..."
|
log_step "Настройка Apache и модулей..."
|
||||||
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||||
a2enmod php8.3 rewrite ssl headers expires deflate >/dev/null 2>&1
|
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"
|
APACHE_CONF="/etc/httpd/conf.d/altcor.conf"
|
||||||
WEBSERVER_USER="apache"
|
WEBSERVER_USER="apache"
|
||||||
|
|
||||||
# НЕ ЗАГРУЖАЕМ mod_php - используем PHP-FPM!
|
# Отключаем старые конфигурации PHP и mod_php
|
||||||
# Удаляем старые конфигурации PHP
|
rm -f /etc/httpd/conf.d/php.conf /etc/httpd/conf.modules.d/*php*.conf
|
||||||
rm -f /etc/httpd/conf.d/php.conf
|
|
||||||
|
# Определяем, какой PHP-FPM сервис и путь к конфигурации использовать
|
||||||
cat > "/etc/httpd/conf.d/php-fpm.conf" << 'EOF'
|
if [ -f "/etc/opt/remi/php83/php-fpm.d/www.conf" ]; then
|
||||||
# PHP-FPM configuration for Apache
|
PHP_FPM_CONF="/etc/opt/remi/php83/php-fpm.d/www.conf"
|
||||||
# НЕ загружаем mod_php - используем PHP-FPM через ProxyPass
|
PHP_FPM_SERVICE="php83-php-fpm"
|
||||||
|
SOCKET_PATH="/var/opt/remi/php83/run/php-fpm/www.sock"
|
||||||
# Включаем нужные модули (без mod_php)
|
elif [ -f "/etc/php-fpm.d/www.conf" ]; then
|
||||||
LoadModule rewrite_module modules/mod_rewrite.so
|
PHP_FPM_CONF="/etc/php-fpm.d/www.conf"
|
||||||
LoadModule headers_module modules/mod_headers.so
|
PHP_FPM_SERVICE="php-fpm"
|
||||||
LoadModule expires_module modules/mod_expires.so
|
SOCKET_PATH="/run/php-fpm/www.sock"
|
||||||
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
|
else
|
||||||
# Для Rocky Linux/CentOS/RHEL с Remi
|
log_error "Не найден конфигурационный файл PHP-FPM"
|
||||||
# Проверяем доступные PHP модули
|
exit 1
|
||||||
if [ -f "/etc/opt/remi/php83/php.ini" ]; then
|
fi
|
||||||
# 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$>
|
# Создаем конфигурацию только для PHP-FPM (без mod_php)
|
||||||
SetHandler application/x-httpd-php
|
cat > "/etc/httpd/conf.d/php-fpm.conf" << 'EOF'
|
||||||
</FilesMatch>
|
# PHP-FPM configuration for Apache
|
||||||
|
# ВАЖНО: НЕ загружаем mod_php - используем только PHP-FPM
|
||||||
|
|
||||||
# Enable useful modules
|
# Базовые модули Apache (проверяем, не загружены ли уже)
|
||||||
LoadModule rewrite_module modules/mod_rewrite.so
|
<IfModule !mod_rewrite.c>
|
||||||
LoadModule headers_module modules/mod_headers.so
|
LoadModule rewrite_module modules/mod_rewrite.so
|
||||||
LoadModule expires_module modules/mod_expires.so
|
</IfModule>
|
||||||
LoadModule deflate_module modules/mod_deflate.so
|
<IfModule !mod_headers.c>
|
||||||
EOF
|
LoadModule headers_module modules/mod_headers.so
|
||||||
else
|
</IfModule>
|
||||||
# Стандартный PHP
|
<IfModule !mod_expires.c>
|
||||||
cat > "/etc/httpd/conf.d/php.conf" << 'EOF'
|
LoadModule expires_module modules/mod_expires.so
|
||||||
# Standard PHP configuration
|
</IfModule>
|
||||||
<IfModule !mod_php.c>
|
<IfModule !mod_deflate.c>
|
||||||
LoadModule php_module modules/libphp.so
|
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>
|
</IfModule>
|
||||||
|
|
||||||
|
# Обработка PHP файлов через PHP-FPM
|
||||||
<FilesMatch \.php$>
|
<FilesMatch \.php$>
|
||||||
SetHandler application/x-httpd-php
|
SetHandler "proxy:unix:SOCKET_PATH_PLACEHOLDER|fcgi://localhost"
|
||||||
</FilesMatch>
|
</FilesMatch>
|
||||||
|
|
||||||
# Enable useful modules
|
# Настройки директивы для улучшения производительности
|
||||||
LoadModule rewrite_module modules/mod_rewrite.so
|
ProxyTimeout 300
|
||||||
LoadModule headers_module modules/mod_headers.so
|
ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:SOCKET_PATH_PLACEHOLDER|fcgi://localhost/var/www/html/
|
||||||
LoadModule expires_module modules/mod_expires.so
|
|
||||||
LoadModule deflate_module modules/mod_deflate.so
|
|
||||||
EOF
|
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
|
# Altcor main configuration
|
||||||
|
|
||||||
# Отключаем ServerTokens и ServerSignature для безопасности
|
# Отключаем информацию о сервере для безопасности
|
||||||
ServerTokens Prod
|
ServerTokens Prod
|
||||||
ServerSignature Off
|
ServerSignature Off
|
||||||
|
|
||||||
@@ -523,34 +550,55 @@ ServerSignature Off
|
|||||||
# Настройки сжатия
|
# Настройки сжатия
|
||||||
<IfModule mod_deflate.c>
|
<IfModule mod_deflate.c>
|
||||||
SetOutputFilter DEFLATE
|
SetOutputFilter DEFLATE
|
||||||
|
# Исключаем уже сжатые файлы
|
||||||
SetEnvIfNoCase Request_URI \
|
SetEnvIfNoCase Request_URI \
|
||||||
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
|
\.(?:gif|jpe?g|png|ico|exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
|
||||||
SetEnvIfNoCase Request_URI \
|
# Исключаем старые браузеры
|
||||||
\.(?: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>
|
||||||
|
|
||||||
# Кэширование
|
# Кэширование статических ресурсов
|
||||||
<IfModule mod_expires.c>
|
<IfModule mod_expires.c>
|
||||||
ExpiresActive On
|
ExpiresActive On
|
||||||
|
# Изображения
|
||||||
ExpiresByType image/jpg "access plus 1 month"
|
ExpiresByType image/jpg "access plus 1 month"
|
||||||
ExpiresByType image/jpeg "access plus 1 month"
|
ExpiresByType image/jpeg "access plus 1 month"
|
||||||
ExpiresByType image/gif "access plus 1 month"
|
ExpiresByType image/gif "access plus 1 month"
|
||||||
ExpiresByType image/png "access plus 1 month"
|
ExpiresByType image/png "access plus 1 month"
|
||||||
ExpiresByType image/svg+xml "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 text/css "access plus 1 month"
|
||||||
ExpiresByType application/javascript "access plus 1 month"
|
ExpiresByType application/javascript "access plus 1 month"
|
||||||
ExpiresByType text/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>
|
||||||
|
|
||||||
# Заголовки безопасности
|
# Заголовки безопасности
|
||||||
<IfModule mod_headers.c>
|
<IfModule mod_headers.c>
|
||||||
Header always set X-Content-Type-Options nosniff
|
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 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>
|
</IfModule>
|
||||||
</Directory>
|
</Directory>
|
||||||
|
|
||||||
# Запрет доступа к конфигурационным файлам
|
# Запрет доступа к служебным файлам
|
||||||
<Files "*.conf">
|
<Files "*.conf">
|
||||||
Require all denied
|
Require all denied
|
||||||
</Files>
|
</Files>
|
||||||
@@ -562,48 +610,43 @@ ServerSignature Off
|
|||||||
<Files ".env">
|
<Files ".env">
|
||||||
Require all denied
|
Require all denied
|
||||||
</Files>
|
</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
|
EOF
|
||||||
fi
|
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_success "Модули Apache настроены"
|
||||||
|
|
||||||
log_step "Создание конфигурации виртуального хоста..."
|
log_step "Создание конфигурации виртуального хоста..."
|
||||||
|
|||||||
Reference in New Issue
Block a user