Apache
Установка Apache на Ubuntu (в т.ч. на WSL — Windows 10 Subsystem for Linux) делается одной командой:
sudo apt install apache2
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
Команды работают в 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
Основной конфиг:
/etc/apache2/apache2.conf
Основной конфиг Apache на Mac OS X:
/etc/apache2/httpd.conf
Конфиги сайтов находятся виде отдельных файлов в папке:
/etc/apache2/sites-available/
/var/log/apache2 tail /var/log/apache2/access.log tail /var/log/apache2/error.log tail /var/log/apache2/other_vhosts_access.log
Чтобы хранить проекты не в стандартной системной папке 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:
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)
Если в статусе 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
Ошибка Permission denied обычно возникает, если выполнять команды по запуску или перезапуску Apache без прав суперюзера.
Решение: просто выполните ту же команду, добавив sudo в начале.
Ошибка возникает при запуске 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"
По умолчанию в 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 шрифт, который располагается на другом сервере (например, на 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>