HTTP ошибки: Хостинг vs VPS
Раздельные инструкции для хостинга (Apache + Nginx для статики, доступ к логам, смена PHP) и VPS (root). Отдельный раздел — типичные проблемы CMS: WordPress, Joomla, Bitrix.
Хостинг Apache + Nginx
Apache обрабатывает PHP, Nginx отдаёт статику (css/js/img). Доступ к error.log и access.log. Можно менять версию PHP через панель. Нет sudo — только .htaccess
VPS / VDS Полный root
Полный доступ к серверу. systemd, Nginx/Apache конфиги, iptables, все логи. Полный контроль над всеми службами и настройками.
CMS WordPress / Joomla / Bitrix
Типичные проблемы каждой CMS с пошаговыми решениями. Кэш, плагины, конфигурация, совместимость с PHP и сервером.
Хостинг 403 Forbidden
На вашем хостинге Nginx стоит перед Apache и отдаёт статику (css, js, изображения), а динамические запросы (.php) проксирует на Apache. 403 может возникнуть на обоих уровнях.
# Путь к error.log зависит от хостинга.
# Типичные пути:
~/www/site/logs/error.log
/var/www/username/data/logs/site.error.log
~/logs/site_error.log
tail -f ~/www/site/logs/error.log# Через SSH (из корня сайта):
find . -type f -not -perm 644 -exec chmod 644 {} \;
find . -type d -not -perm 755 -exec chmod 755 {} \;
# Через FTP: правый клик → File Permissions → 644/755mv .htaccess .htaccess.bak# access.log — видим какие запросы возвращают 403:
grep " 403 " ~/www/site/logs/access.logХостинг 500 Internal Server Error
500 означает что Apache/PHP столкнулся с ошибкой. На хостинге с Apache + Nginx для статики 500 почти всегда вызван PHP или .htaccess.
tail -f ~/www/site/logs/error.log
# Фильтрация по типу ошибки:
grep "PHP Fatal" ~/www/site/logs/error.log | tail -10
grep "Parse error" ~/www/site/logs/error.log | tail -10
grep "Allowed memory" ~/www/site/logs/error.log | tail -10mv .htaccess .htaccess.bak# .htaccess (если Apache + mod_php):
php_value memory_limit 256M
php_value max_execution_time 120
php_value upload_max_filesize 64M
php_value post_max_size 64M<?php phpinfo(); ?>
// Сохранить как info.php, открыть в браузере
// Удалить после проверки!Хостинг 502 Bad Gateway
На хостинге с Nginx перед Apache: 502 означает что Nginx не получил ответ от Apache. Это значит Apache упал, перезапускается или перегружен. Вы не управляете Apache напрямую, но можете влиять через PHP и логи.
tail -50 ~/www/site/logs/error.log
grep -i "child\|crash\|segfault" ~/www/site/logs/error.log | tail -10# Размер одного PHP процесса:
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%dMB\n", sum/NR/1024) }'
# В панели хостинга установить:
# pm.max_requests = 500
# pm.max_children = увеличитьХостинг 503 Service Unavailable
503 на хостинге обычно означает что Apache/PHP перегружен: все worker-процессы заняты, превышен лимит одновременных соединений (Entry Processes), или сервер хостинга перегружен другими пользователями.
# Топ IP по количеству запросов:
awk '{print $1}' ~/www/site/logs/access.log | sort | uniq -c | sort -rn | head -10
# Топ запрашиваемых URL:
awk '{print $7}' ~/www/site/logs/access.log | sort | uniq -c | sort -rn | head -10# В .htaccess — заблокировать IP:
<RequireAll>
Require all granted
Require not ip 1.2.3.4
</RequireAll>
# Заблокировать wp-login.php:
<Files wp-login.php>
Require all denied
</Files>
# Заблокировать xmlrpc.php:
<Files xmlrpc.php>
Require all denied
</Files># В wp-config.php (перед «That's all, stop editing»):
define('DISABLE_WP_CRON', true);Хостинг 504 Gateway Timeout
504 означает что Nginx дождался ответа от Apache, но тот не уложился в таймаут. Apache + PHP обрабатывают запрос слишком долго.
# Найти URL с 504:
grep " 504 " ~/www/site/logs/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -10# .htaccess (если Apache + mod_php):
php_value max_execution_time 300
php_value max_input_time 300
php_value memory_limit 512M# WordPress wp-config.php:
define('SAVEQUERIES', true);
# Плагин Query Monitor — покажет
# все запросы и время выполнения
# Joomla: Debug System: Yes
# покажет SQL внизу страницыХостинг Практичные правила .htaccess
Готовые блоки .htaccess для shared-хостинга. Копируйте нужные секции. Не вставляйте всё сразу — добавляйте по одному блоку и проверяйте сайт.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]# www → без www:
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
# без www → www:
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]Redirect 301 /old-page.html https://example.com/new-page
Redirect 301 /old-category/ https://example.com/new-category/RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.old-domain\.com$ [NC]
RewriteRule ^(.*)$ https://new-domain.com/$1 [R=301,L]Header always set X-Content-Type-Options "nosniff"
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 always set Permissions-Policy "geolocation=(), camera=(), microphone=()"Header always set Strict-Transport-Security \
"max-age=31536000; includeSubDomains" env=HTTPSHeader always set Content-Security-Policy \
"default-src 'self'; script-src 'self' 'unsafe-inline'; \
style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; \
font-src 'self' data:"# Блокировка скрытых файлов и директорий:
RewriteRule (^\.|/\.) - [F,L]
# Блокировка чувствительных файлов:
<FilesMatch "^(\.|wp-config\.php|php\.ini|\.env|
package\.json|composer\.json|composer\.lock|
\.git|\.htaccess|\.htpasswd)">
Require all denied
</FilesMatch>
# Блокировка логов и бэкапов:
<FilesMatch "\.(log|bak|old|orig|save|swp|sql|
tar|gz|zip|rar)$">
Require all denied
</FilesMatch>Options -IndexesServerSignature Off
Header unset ServerRewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^$ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} \
(AhrefsBot|SemrushBot|MJ12bot|DotBot|Rogerbot|\
exabot|ia_archiver|Sogou|Baiduspider) [NC]
RewriteRule ^ - [F,L]RewriteCond %{HTTP_USER_AGENT} \
(nikto|sqlmap|nmap|masscan|ZmEu|w3af|\
acunetix|nessus|openvas) [NC]
RewriteRule ^ - [F,L]# Положить этот .htaccess В ПАПКУ uploads:
<FilesMatch "\.(php|phtml|php3|php4|php5|
phps|pl|cgi|py|jsp|asp)$">
Require all denied
</FilesMatch><RequireAll>
Require all granted
Require not ip 1.2.3.4
Require not ip 5.6.7.0/24
</RequireAll># Положить в .htaccess внутри wp-admin/:
Require ip 1.2.3.4
Require ip 5.6.7.8# Блокировка стран (требует mod_geoip):
GeoIPEnable On
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
Deny from env=BlockCountry
# Разрешить ТОЛЬКО определённые страны:
SetEnvIf GEOIP_COUNTRY_CODE US AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE GB AllowCountry
Deny from all
Allow from env=AllowCountryRewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.4$
RewriteRule ^(.*)$ - [R=403,L]RedirectMatch 404 /xmlrpc\.php# Простой rate limit через .htaccess:
# (требует mod_rewrite и mod_ratelimit)
<IfModule mod_ratelimit.c>
<Location />
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 400
</Location>
</IfModule># Brotli сжатие (приоритет):
<IfModule mod_brotli.c>
AddOutputFilterByType BROTLI_COMPRESS \
text/html text/plain text/xml text/css \
application/javascript application/json \
image/svg+xml
</IfModule>
# Gzip сжатие (фолбэк):
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE \
text/html text/plain text/xml text/css \
application/javascript application/json \
image/svg+xml
</IfModule><IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType font/ttf "access plus 1 year"
</IfModule>
<FilesMatch "\.(jpg|jpeg|png|webp|svg|ico|gif)$">
Header set Cache-Control "max-age=31536000, public, immutable"
</FilesMatch>
<FilesMatch "\.(css|js)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>FileETag None
Header unset ETag# Отключить ModSecurity (если ложные срабатывания):
<IfModule mod_security2.c>
SecRuleEngine Off
</IfModule>
# Отключить конкретное правило:
<IfModule mod_security2.c>
SecRuleRemoveById 950001
</IfModule>RewriteEngine On
# Блокировка SQL-инъекций:
RewriteCond %{QUERY_STRING} \
(union.*select|insert.*into|update.*set|delete.*from) [NC,OR]
RewriteCond %{QUERY_STRING} (--|;|\'|\%27) [OR]
RewriteCond %{QUERY_STRING} (concat|char\(|load_file) [NC]
RewriteRule ^ - [F,L]
# Блокировка XSS:
RewriteCond %{QUERY_STRING} (<script|%3Cscript) [NC,OR]
RewriteCond %{QUERY_STRING} (javascript:|onerror=|onload=) [NC]
RewriteRule ^ - [F,L]AddType image/webp .webp
AddType image/avif .avif
AddType font/woff2 .woff2
AddType application/font-woff .woff
AddType application/json .json
AddType video/mp4 .mp4
AddType video/webm .webm# Положить в .htaccess внутри папки:
RemoveHandler .php .phtml .php3 .php4 .php5
RemoveType .php .phtml .php3 .php4 .php5
AddType text/plain .php .phtml .php3 .php4 .php5# === 1. Базовые настройки ===
Options -Indexes +FollowSymLinks
ServerSignature Off
# === 2. HTTP → HTTPS ===
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
# === 3. www → без www ===
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
# === 4. Security Headers ===
Header always set X-Content-Type-Options "nosniff"
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"
# === 5. Блокировка чувствительных файлов ===
<FilesMatch "^(\.|wp-config\.php|php\.ini|\.env|\.git)">
Require all denied
</FilesMatch>
# === 6. Сжатие ===
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
</IfModule>
# === 7. Кеширование статики ===
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType font/woff2 "access plus 1 year"
</IfModule>
# === 8. Блокировка xmlrpc ===
RedirectMatch 404 /xmlrpc\.php
# === 9. WordPress Rewrite ===
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>Хостинг Apache на shared-хостинге
На большинстве shared-хостингов Apache работает за Nginx-прокси. Nginx отдаёт статику, Apache обрабатывает PHP. У вас нет доступа к httpd.conf, но есть .htaccess, логи и панель хостинга.
# Определить архитектуру хостинга:
curl -sI https://site.com | grep -i server
# Кто отдаёт статику:
curl -sI https://site.com/style.css | grep -i server
# Кто обрабатывает PHP:
curl -sI https://site.com/index.php | grep -i "X-Powered-By"# Определить MPM (если есть SSH):
apachectl -V | grep -i mpm
# Возможные результаты:
# mpm_prefork — один процесс = один запрос
# mpm_worker — потоки + процессы
# mpm_event — современный, лучший для PHP-FPM# Prefork + mod_php:
# - Каждый запрос = процесс Apache
# - Высокое потребление RAM
# - php_value/php_flag в .htaccess работают
# Event/Worker + PHP-FPM:
# - PHP — отдельный процесс
# - Меньше RAM, выше скорость
# - php_value/php_flag в .htaccess НЕ работают
# - Настройки через панель хостинга# ISPmanager:
~/www/site/logs/error.log
# cPanel:
~/public_html/error_log
# Plesk:
~/httpdocs/logs/error_log
# Панель от хостинга:
~/logs/error.log# Формат строки error.log:
[Thu May 01 10:15:30 2026] [core:error] [pid 12345] \
[client 1.2.3.4:56789] AH00124: описание ошибки
# Компоненты:
# [дата] — когда
# [модуль:уровень] — core:error, php:error, rewrite:trace3
# [pid] — ID процесса
# [client] — IP посетителя
# Текст — что случилось# Последние 20 ошибок:
tail -20 error.log
# Топ IP по ошибкам:
grep -oP '\[client \K[0-9.]+' error.log | \
sort | uniq -c | sort -rn | head -10
# Топ типов ошибок (по AH коду):
grep -oP 'AH\d+' error.log | \
sort | uniq -c | sort -rn | head -10
# Только PHP ошибки:
grep -i "PHP.*error\|PHP.*fatal" error.logAH00124 — слишком большой POST запрос
AH00126 — невалидный URL в запросе
AH01630 — доступ запрещён (deny/Require denied)
AH01071 — PHP ошибка (после этого — текст ошибки)
AH01215 — PHP скрипт упал (crash)
AH01797 — заблокировано .htaccess правилом
AH00052 — Segmentation fault (crash Apache процесса)
AH00485 — Scoreboard full (нехватка процессов)
AH00161 — MaxRequestWorkers (все процессы заняты)
AH00558 — FQDN warning (можно игнорировать)# Создать info.php:
<?php phpinfo(); ?>
# Открыть https://site.com/info.php
# Найти "Server API":
# - Apache 2.0 Handler = mod_php
# - FPM/FastCGI = PHP-FPM
# - LiteSpeed = LiteSpeed SAPI
# - CGI/FastCGI = CGI
# УДАЛИТЬ info.php сразу!mod_php:
+ php_value в .htaccess работают
- Один процесс на запрос (много RAM)
- Только prefork MPM
PHP-FPM:
+ Отдельный пул для каждого сайта
+ Меньше RAM, выше скорость
- php_value в .htaccess НЕ работают
- Настройки через панель хостинга
LiteSpeed:
+ Самый быстрый (LSAPI)
+ Совместим с .htaccess
+ Встроенное кеширование (LSCache)
CGI:
- Самый медленный, процесс на запрос# Проблема: в логах все IP = 127.0.0.1
# Причина: Nginx проксирует запросы
# Проверить X-Forwarded-For:
curl -sI https://site.com | grep -i x-forwarded
# На shared-хостинге: включить в панели
# "Log real IP" или "X-Forwarded-For в логах"# Отключить кеш для динамических страниц:
Header set Cache-Control "no-cache, no-store"
Header set Pragma "no-cache"
Header set Expires "0"
# Для конкретного URL:
<LocationMatch "/wp-admin|/administrator">
Header set Cache-Control "no-cache"
</LocationMatch># Nginx timeout = 60 секунд (обычно)
# Apache не успевает ответить
# Что делать:
# 1. Найти медленный запрос (access.log)
# 2. Оптимизировать PHP/SQL
# 3. Увеличить max_execution_time
# 4. Включить OPcache
# 5. Долгие операции (импорт) — через CLI# Оптимизация без root-доступа:
# 1. .htaccess — кеширование, сжатие, редиректы
# 2. PHP-FPM через панель:
# pm.max_children = (RAM / размер_процесса)
# pm.max_requests = 500
# 3. OPcache через панель:
# opcache.enable = 1
# opcache.memory_consumption = 128
# opcache.max_accelerated_files = 10000
# opcache.revalidate_freq = 60
# 4. WordPress: отключить wp-cron
# define('DISABLE_WP_CRON', true)
# 5. PHP сессии в Redis (если доступен)# pm.max_children = (RAM - MySQL) / PHP процесс
# Пример:
# RAM: 2048MB, MySQL: 512MB, PHP процесс: 50MB
# (2048 - 512) / 50 = 30
# pm.max_children = 30
# Размер PHP процесса (SSH):
ps -eo pid,rss,cmd | grep php-fpm | grep -v grep
# RSS в KB. Разделить на 1024 = MB# Когда переходить на VPS:
# 1. 503 Entry Processes limit exceeded регулярно
# 2. CPU limit 100%+ постоянно
# 3. Бэкап занимает больше 30 минут
# 4. Нужен cron с интервалом < 15 минут
# 5. Нужен Node.js, Python, Redis, Elasticsearch
# 6. Трафик > 10 000 посетителей/день
# 7. Нужна специфичная версия PHPVPS 403 Forbidden
На VPS полный контроль. Основные причины: права файловой системы, deny в Nginx/Apache, SELinux, отсутствие index-файла.
namei -l /var/www/site/index.php
chown -R www-data:www-data /var/www/site
find /var/www/site -type d -exec chmod 755 {} \;
find /var/www/site -type f -exec chmod 644 {} \;grep -rn "deny" /etc/nginx/
grep -rn "Require all denied" /etc/apache2/getenforce
restorecon -Rv /var/www/tail -20 /var/log/nginx/error.log
fail2ban-client set nginx-http-auth unbanip YOUR_IPVPS 500 Internal Server Error
Полный доступ к логам. Диагностика: error.log → PHP-FPM логи → права → модули PHP.
tail -f /var/log/apache2/error.log
tail -f /var/log/php8.2-fpm.logphp -m | grep -E "mbstring|xml|curl|json|pdo"
apt install php8.2-mbstring php8.2-xml php8.2-curl
chown -R www-data:www-data /var/www/site
find /var/www/site -type d -exec chmod 755 {} \;
find /var/www/site -type f -exec chmod 644 {} \;VPS 502 Bad Gateway
Nginx не получил ответ от Apache или PHP-FPM. Полный контроль: перезапуск, логи, настройка.
systemctl status apache2
systemctl restart apache2
systemctl status php8.2-fpm
systemctl restart php8.2-fpmgrep "proxy_pass\|fastcgi_pass" /etc/nginx/sites-enabled/*
ss -tlnp | grep -E "80|443|8080|9000"
ls -la /run/php/dmesg | grep -i "oom\|kill"
dmesg | grep -i apache
free -hVPS 503 Service Unavailable
Сервер перегружен, Apache MaxRequestWorkers достигнут, или служба остановлена.
uptime
top -bn1 | head -15
free -h# /etc/apache2/mods-enabled/mpm_prefork.conf:
MaxRequestWorkers 150
MaxConnectionsPerChild 300
systemctl restart apache2fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstabVPS 504 Gateway Timeout
Apache/PHP не уложился в таймаут Nginx. Контролируете все таймауты: Nginx, Apache, PHP, MySQL.
grep "timed out" /var/log/nginx/error.log | tail -10
# В Nginx config:
proxy_read_timeout 300s;
fastcgi_read_timeout 300s;
nginx -t && systemctl reload nginxmysql -u root -p -e "SHOW FULL PROCESSLIST;"
# Включить slow query log:
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;# php.ini:
max_execution_time = 300
request_terminate_timeout = 300
# Проверить диск:
iostat -x 1 5
systemctl restart php8.2-fpmWordPress Типичные проблемы и решения
Самые частые проблемы WordPress на хостинге и VPS с их решениями.
# В wp-config.php (перед «That's all, stop editing»):
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
# Лог: wp-content/debug.log
# Также проверяйте error.log хостинга# Проверить wp-config.php:
# DB_NAME, DB_USER, DB_PASSWORD, DB_HOST
# Тест подключения через SSH:
mysql -u db_user -p db_name -h db_host
# В панели хостинга проверить:
# 1. Существует ли БД
# 2. Правильный ли пароль
# 3. Лимит подключений к MySQL# wp-config.php:
define('DISABLE_WP_CRON', true);
define('WP_MEMORY_LIMIT', '256M');
# .htaccess — кеширование статики:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
</IfModule># Стандартный .htaccess WordPress:
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]# Права на uploads:
chmod -R 755 wp-content/uploads
# .htaccess (если Apache + mod_php):
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value memory_limit 256MJoomla Типичные проблемы и решения
Частые проблемы Joomla на хостинге с Apache + Nginx.
# configuration.php — включить ошибки:
public $error_reporting = 'maximum';
public $debug = '1';
# Права на директории Joomla:
chmod -R 755 images/
chmod -R 755 tmp/
chmod -R 755 logs/
chmod -R 755 cache/# Переименовать htaccess.txt → .htaccess:
mv htaccess.txt .htaccess
# В Global Configuration Joomla:
# SEO Settings → Search Engine Friendly URLs: Yes
# Use URL Rewriting: Yes# Joomla админка → Global Configuration:
# System → Cache → Cache Handler: File
# Cache Time: 15 минут
# OPCache в настройках PHP хостинга:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000chmod -R 755 cache/
chmod -R 755 tmp/
rm -rf cache/*
rm -rf tmp/*Bitrix Типичные проблемы и решения
1С-Битрикс — ресурсоёмкая CMS. Часто требует больше ресурсов чем WordPress/Joomla. Специфичные проблемы с ядром D7, прологами и композитным кешем.
# bitrix/php_interface/dbconn.php:
define('BX_DEBUG', true);
# Или в bitrix/.settings.php:
'exception_handling' => [
'value' => [
'debug' => true,
'handled_errors_types' => E_ALL,
'exception_errors_types' => E_ALL,
],
'readonly' => false,
],# .htaccess (если Apache + mod_php):
php_value memory_limit 512M
php_value max_execution_time 300
# OPCache (через панель хостинга):
opcache.enable = 1
opcache.memory_consumption = 256# bitrix/.settings.php — проверить параметры:
'connections' => [
'value' => [
'default' => [
'className' => 'Bitrix\Main\DB\MysqliConnection',
'config' => [
'host' => 'localhost',
'database' => 'db_name',
'login' => 'db_user',
'password' => 'db_pass',
],
],
],
],# Очистить кеш Битрикс через SSH:
rm -rf bitrix/cache/*
rm -rf bitrix/managed_cache/*
rm -rf bitrix/stack_cache/*
rm -rf bitrix/html_cache/*
# Или через админку:
# Настройки → Автокеширование → Очистка файлов кешаPHP: 8.1 или 8.2
memory_limit: 512M минимум
max_execution_time: 300
OPCache: включён, 256MB
MySQL: innodb_buffer_pool_size >= 256M
Диск: SSD обязательен# bitrix/.settings.php — проверить:
# 'connections' → 'default' → 'config'
# host, database, login, password
# На хостинге проверить в панели БД:
# 1. БД существует
# 2. Пользователь имеет праваВсе CMS Общие проблемы и решения
Проблемы которые встречаются на любой CMS: WordPress, Joomla, Bitrix, самописные сайты.
# WordPress: плагин WP Mail SMTP
# Joomla: Global Configuration → Server → SMTP
# Битрикс: Настройки → Почта → SMTP
# Проверить SPF: dig example.com TXT# WordPress .htaccess:
Header always set Content-Security-Policy "upgrade-insecure-requests;"
# WordPress wp-config.php:
define('FORCE_SSL_ADMIN', true);
# Joomla configuration.php:
public $force_ssl = 2;# Проверить Cloudflare:
curl -sI https://example.com | grep -i "cf-ray"
# Панель Cloudflare → Purge Cache
# Development Mode → On (временно)
# SSL/TLS → Full (strict)
# Для SSL валидации: DNS only (без прокси)# Подозрительный код:
grep -rn "eval(base64_decode" /var/www/site/ --include="*.php"
# Скрытые файлы:
find /var/www/site/ -name ".*.php" -type f
# Недавно изменённые:
find /var/www/site/ -name "*.php" -mtime -7