Як усунути поширені проблеми з Apache
Shared FAQ page chrome (breadcrumb, dates, read time, «Читати далі», enquiry block, category labels): see INDEX-AND-CHROME.md. Translate once.
Body
Apache є стабільним і широко використовуваним веб-сервером. Більшість проблем походить від конфігурації, конфліктів портів або інтеграції з іншими сервісами на тому самому хості.
Перевірка журналів Apache
Почніть із журналу помилок. Типові розташування:
Для швидкого ознайомлення нижче наведено типові розташування файлу журналу помилок Apache.
cPanel
/usr/local/apache/logs/error_log
Plesk
/var/log/httpd/error_log
CentOS/Fedora
/var/log/httpd/error_log
Debian/Ubuntu
/var/log/apache2/error_log
tail -f /var/log/httpd/error_log
Поширені проблеми Apache
Конфлікти портів
Перевірте, що ніщо інше не прив’язане до портів 80 і 443:
[root@server ~]# netstat -plan | grep :80
tcp 0 0 203.0.113.10:80 0.0.0.0:* LISTEN 18950/nginx
tcp 0 0 203.0.113.10:80 203.0.113.10:52630 TIME_WAIT -
tcp 0 0 203.0.113.10:51704 203.0.113.10:80 TIME_WAIT -
tcp 0 0 203.0.113.10:80 203.0.113.10:52626 TIME_WAIT -
tcp 0 0 203.0.113.10:80 203.0.113.10:51712 TIME_WAIT -
tcp 0 0 203.0.113.10:80 203.0.113.10:52622 TIME_WAIT -
Як бачите, сервер Nginx уже використовує порт 80 на публічному інтерфейсі, і Apache не запуститься. Зупиніть сервер Nginx і запустіть Apache знову.
Інші екземпляри Apache, що зависли і тримають порти.
Ви можете отримувати помилки, схожі на конфлікти портів, а причиною можуть бути вже запущені і не завершені процеси Apache, які тримають порти. Наведеними нижче командами перевірте, чи є такі процеси на сервері.
[root@server ~]# ps aux | grep "httpd\|apache" | grep -v grep
root 18663 0.0 0.6 394336 32168 ? SNs 15:25 0:00 /usr/sbin/httpd
apache 18666 0.0 0.3 252844 17436 ? SN 15:25 0:00 /usr/sbin/httpd
apache 18667 0.0 0.5 395040 25532 ? SN 15:25 0:00 /usr/sbin/httpd
apache 18668 0.0 0.5 395440 25592 ? SN 15:25 0:00 /usr/sbin/httpd
apache 18670 0.0 0.5 395032 25716 ? SN 15:25 0:00 /usr/sbin/httpd
apache 18671 0.0 0.5 394984 25676 ? SN 15:25 0:00 /usr/sbin/httpd
apache 18672 0.0 0.5 394944 25640 ? SN 15:25 0:00 /usr/sbin/httpd
apache 18673 0.0 0.5 395000 25468 ? SN 15:25 0:00 /usr/sbin/httpd
apache 18674 0.0 0.4 394912 25384 ? SN 15:25 0:00 /usr/sbin/httpd
apache 18675 0.0 0.5 395076 25780 ? SN 15:25 0:00 /usr/sbin/httpd
apache 18676 0.0 0.5 394940 25636 ? SN 15:25 0:00 /usr/sbin/httpd
apache 18677 0.0 0.4 394892 25280 ? SN 15:25 0:00 /usr/sbin/httpd
Завершіть усі знайдені процеси Apache командою kill, як показано нижче.
[root@server ~]# kill -9 18666 18663 18667 18668 18670 18671 18672 18673 18674 18675 18676 18677
Синтаксичні помилки у файлі httpd.conf
Синтаксична помилка в httpd.conf не дає Apache запуститися. Помилка називає рядок:
Syntax error on line 218 of /etc/httpd/conf/httpd.conf
Перевірте синтаксис перед перезапуском:
[root@server ~]# apachectl -t
Syntax OK
[root@server ~]# httpd -t
Syntax OK
Для Debian і Ubuntu перевірку синтаксису можна виконати, як показано нижче.
apache2ctl -t
Similarly you cause the command with -S switch to list all virtual hosts with essential information like configured ports, defined line number in configuration etc.
Так само команду можна виконати з ключем -S, щоб вивести всі віртуальні хости з основною інформацією: налаштованими портами, номером рядка в конфігурації тощо.
[root@server ~]# httpd -S
VirtualHost configuration:
127.0.0.1:7080 is a NameVirtualHost
Apache не запуститься, якщо файл .htaccess створено неправильно.
Щоб файли .htaccess враховувалися, віртуальні хости Apache мають містити належні визначення. Якщо цих директив немає, файл .htaccess не враховується, і його визначення не завантажуються. Нижче наведено зразок визначення.
</VirtualHost>
<Directory /home/eurovps/public_html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Після цього файл .htaccess, створений у /home/eurovps/public_html/, враховуватиметься сервером Apache. Файл потребує режиму 644 і користувача домену як власника:
Зразок створення файлу .htaccess і прав доступу.
vi /home/eurovps/public_html/.htaccess
#++++Sample_contents++++#
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
#++++Sample_contents++++#
Esc + :wq
chmod 644 /home/eurovps/public_html/.htaccess
chown eurovps.eurovps /home/eurovps/public_html/.htaccess
Поради: спробуйте увімкнути докладні журнали для налагодження (LogLevel debug). Перевірте syslog і dmesg на будь-які підказки щодо завершення процесів, перевірте вільну пам’ять і вільний дисковий простір на сервері.
З FAQ EuroVPS.
Більше в категорії «Інструкції»Ваш наступний партнер з інфраструктури
Залишилося
запитання?
Розкажіть, що ви намагаєтеся зробити. Інженер прочитає і відповість.
+357 222 32280
Почнімо з вашої інфраструктури.
Трохи контексту допомагає нам почати правильну розмову.
