Apache

Матеріал з Wiki.Zina
Версія від 15:22, 14 червня 2022, створена >Zina (→SSI)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

Установка Apache

[ред. | ред. код]

Установка Apache на Ubuntu (в т.ч. на WSL — Windows 10 Subsystem for Linux) делается одной командой:

sudo apt install apache2

Проверка работы Apache

[ред. | ред. код]

1. Проверка работы Apache в браузере:

2. Проверки Apache из командной строки.

Проверка версии установленного Apache (и установлен ли Apache вообще):

apachectl -v
apache2 -v

Если ругается на Permission denied, то запустите с правами администратора: sudo apachectl -v

На разных операционных системах вместо apachectl могут использоваться другие команды — например, apache2ctl, apache2, httpd. Мы используем в качестве основного варианта именно apachectl потому, что этот вариант работает и на последних версиях Ubuntu (в т.ч. на Windows Linux Subsystem), и на Mac OS X.

Проверка Apache через консольный браузер Lynx (поэтому нужно, чтобы он был установлен: sudo apt install lynx):

apachectl status

Проверка конфигурации Apache:

apachectl -t

Проверка ошибок в журналах Apache:

journalctl -xe
systemctl status apache2.service

Основные команды Apache

[ред. | ред. код]

Команды работают в Ubuntu (в т.ч. в Windows 10 Linux Subsystem) и MacOS X.

Запустить Apache:

sudo apachectl start

Перезапустить Apache:

sudo apachectl restart

Перечитать конфиг Apache (мягкий перезапуск):

sudo apachectl graceful

Включить локальный домен example.test (конфиг этого домена предварительно должен быть создан в папке /etc/apache2/sites-available/):

sudo a2ensite example.test

Выключить домен example.test:

sudo a2dissite example.test

Конфиги Apache

[ред. | ред. код]

Основной конфиг:

/etc/apache2/apache2.conf

Основной конфиг Apache на Mac OS X:

/etc/apache2/httpd.conf

Конфиги сайтов находятся виде отдельных файлов в папке:

/etc/apache2/sites-available/

Логи Apache

[ред. | ред. код]
/var/log/apache2
tail /var/log/apache2/access.log
tail /var/log/apache2/error.log
tail /var/log/apache2/other_vhosts_access.log

Настройки Apache

[ред. | ред. код]

Настройка хранения сайтов в домашней папке

[ред. | ред. код]

Чтобы хранить проекты не в стандартной системной папке Apache /var/www, а в домашней папке — например, в ~/projects — добавьте в основной конфигурационный файл Apache /etc/apache2/apache2.conf строки:

<Directory /home/USER/projects/>
       Options Indexes FollowSymLinks
       AllowOverride None
       Require all granted
</Directory>

USER замените на ваше имя пользователя. Его можно узнать командой whoami.

Перечитайте конфиг Apache:

sudo apachectl graceful

Создание локального сайта (виртуального хоста)

[ред. | ред. код]

Для примера создадим локальный сайт example.test в папке ~/projects.

Создайте папку сайта и в ней файл index.html со строкой, по которой вам будет видно, что это ваш локальный сайт:

mkdir ~/projects/example.test
echo 'It is my local example.test' >> ~/projects/example.test/index.html

Скопируйте стандартный конфиг сайта:

cd /etc/apache2/sites-available/
sudo cp 000-default.conf example.conf

Отредактируйте example.conf, чтобы он выглядел примерно так:

<VirtualHost *:80>
        ServerName example.test
        DocumentRoot /home/USER/projects/example.test
</VirtualHost>

Активируйте конфиг:

sudo a2ensite example.conf
sudo apachectl graceful

Добавьте в hosts (/etc/hosts для Linux, C:\Windows\System32\drivers\etc\hosts для Windows) строку:

127.0.0.1 example.test

Проверьте ваш новый локальный сайт в браузере:

mod_rewrite

[ред. | ред. код]

Включить mod_rewrite:

sudo a2enmod rewrite

В файле /etc/apache2/apache2.conf найти AllowOverride None и заменить на AllowOverride All

Конфиг для обработки SSI в файлах .shtml, .html, .htm:

sudo vim /etc/apache2/apache2.conf
<Directory /home/romych/projects/>
      Options +Indexes +FollowSymLinks +Includes
      AddType text/html .html .htm .shtml
      AddHandler server-parsed .shtml .html .htm
      AddOutputFilter INCLUDES .html .htm .shtml
      DirectoryIndex index.shtml index.html index.htm
      AllowOverride All
      Require all granted
</Directory>

Отключение стандартного виртуального хоста

[ред. | ред. код]

Отключить стандартный виртуальный хост Apache:

sudo a2dissite 000-default.conf

Права на файлы и папки

[ред. | ред. код]

В некоторых случаях (например, для Drupal) нужно, чтобы права на папки и файлы принадлежали группе www-data.

Поэтому нужно добавить пользователя, из-под которого работаем в системе (/home/имя_пользователя), в группу www-data:

sudo usermod -a -G www-data $(whoami)

uploadprogress

[ред. | ред. код]

Если в статусе Drupal admin/reports/status выводится сообщение:

Ваш сервер может отображать процесс закачки файлов, но отсутствуют необходимые библиотеки. 
Рекомендуется установить библиотеку PECL uploadprogress (предпочтительно) или установить APC.

то нужно установить uploadprogress.

sudo apt-get install php5-dev
sudo pecl install uploadprogress
sudo sh -c 'echo "extension=uploadprogress.so" >> /etc/php5/apache2/php.ini'
sudo /etc/init.d/apache2 restart

Ошибки Apache

[ред. | ред. код]

(13)Permission denied

[ред. | ред. код]

Ошибка Permission denied обычно возникает, если выполнять команды по запуску или перезапуску Apache без прав суперюзера.

Решение: просто выполните ту же команду, добавив sudo в начале.

(92)Protocol not available: AH00076: Failed to enable APR_TCP_DEFER_ACCEPT

[ред. | ред. код]

Ошибка возникает при запуске Apache на Windows 10 Subsystem for Lynux, потому что Windows не поддерживает нативно TCP_DEFER_ACCEPT.

Для исправления достаточно добавить в конец файла /etc/apache2/apache2.conf строку:

AcceptFilter http none

AH00558: apache2: Could not reliably determine the server's fully qualified domain name

[ред. | ред. код]

Ошибка: при выполнении проверки apachectl -t выдается сообщение:

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. 
Set the 'ServerName' directive globally to suppress this message

Решение: нужно в файле /etc/apache2/apache2.conf задать имя хоста по умолчанию ServerName localhost:

sudo sh -c "echo 'ServerName localhost' >> /etc/apache2/apache2.conf"

Invalid command 'RewriteEngine'

[ред. | ред. код]

По умолчанию в Apache в Ubuntu не активирован модуль mod_rewrite, из-за чего могут быть ошибки в error.log типа Invalid command 'RewriteEngine'.

Также при выполнении проверки sudo apache2ctl configtest может выдаваться ошибка:

AH00526: Syntax error on line 4 of /etc/apache2/sites-enabled/domain.conf:
Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.

Решение: активировать модуль mod_rewrite одной командой:

sudo a2enmod rewrite

CSS Fonts missing - No Access-Control-Allow-Origin header

[ред. | ред. код]

При попытке подключить в CSS шрифт, который располагается на другом сервере (например, на cdn.mydomain.com) может происходить ошибка, которая в инспекторе Chrome отображается так:

Font from origin 'http://cdn.mydomain.com' has been blocked from loading 
by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' 
header is present on the requested resource. Origin 'http://mydomain.com' 
is therefore not allowed access.

Решение: https://davidwalsh.name/cdn-fonts

Код для .htaccess или httpd.conf:

# Apache config
<FilesMatch ".(eot|ttf|otf|woff)">
	Header set Access-Control-Allow-Origin "*"
</FilesMatch>

Ссылки

[ред. | ред. код]