HTTP-сервер Apache – наиболее распространенный веб-сервер в интернете. Он предоставляет множество полезных функций, включая динамическую загрузку модулей, надежную поддержку мультимедиа и широкую интеграцию с другим популярным программным обеспечением.
В этом мануале вы узнаете, как установить веб-сервер Apache на ваш сервер Ubuntu 20.04.
Требования
- Сервер Ubuntu 20.04.
- Пользователь с доступом к sudo (все действия руководства нужно выполнять в сессии этого пользователя).
- Базовый брандмауэр.
Все необходимые инструкции можно найти в мануале по начальной настройке сервера.
Настроив свой сервер, войдите в сессию пользователя с доступом к sudo, чтобы начать работу.
1: Установка Apache
Пакет Apache есть в стандартном репозитории Ubuntu, потому его можно установить с помощью стандартного пакетного менеджера.
Обновите локальный индекс пакетов:
sudo apt update
А затем установите пакет apache2:
sudo apt install apache2
С помощью этой команды менеджер пакетов apt установит Apache и все его зависимости.
2: Настройка брандмауэра
Теперь нужно отредактировать настройки брандмауэра и открыть доступ к стандартному порту Apache. Если вы выполнили мануал по начальной настройке, сейчас UFW блокирует доступ к портам, которые не используются (в том числе и к портам веб-сервера).
Во время установки Apache регистрирует в UFW несколько своих профилей, которые упрощают процесс настройки портов веб-сервера.
Чтобы просмотреть профили приложений ufw, введите:
sudo ufw app list
Вы увидите список доступных профилей:
Available applications: Apache Apache Full Apache Secure OpenSSH
Как видите, у вас есть три профиля Apache:
- Apache: поддерживает трафик по порту 80 (стандартный порт).
- Apache Full: открывает порты 80 и 443 (зашифрованный трафик TLS/SSL).
- Apache Secure: поддерживает только шифрованный трафик TLS/SSL по порту 443.
Рекомендуется включить наиболее строгий профиль, который при этом позволит поддерживать текущий трафик. Поскольку мы еще не настроили SSL-сертификат, нам нужно разрешить трафик по порту 80:
sudo ufw allow 'Apache'
Убедитесь, что профиль включился:
sudo ufw status
Вы увидите такой вывод:
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)
3: Проверка веб-сервера
После установки сервер Ubuntu 20.04 запускает Apache самостоятельно.
Чтобы убедиться, что веб-сервер запустился, запросите его состояние:
root@hellit: service apache2 status apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-04-23 22:36:30 UTC; 20h ago Docs: https://httpd.apache.org/docs/2.4/ Main PID: 29435 (apache2) Tasks: 55 (limit: 1137) Memory: 8.0M CGroup: /system.slice/apache2.service ├─29435 /usr/sbin/apache2 -k start ├─29437 /usr/sbin/apache2 -k start └─29438 /usr/sbin/apache2 -k start
Согласно этому выводу сервис работает правильно. Но лучше также запросить страницу Apache, чтобы подтвердить работу веб-сервера.
Чтобы открыть стандартную посадочную страницу Apache, укажите свой домен. Если у вас нет домена, укажите внешний IP-адрес своего сервера. Если вы не знаете свой IP-адрес, вы можете узнать его с помощью командной строки. Введите такую команду:
hostname -I
Вы получите список адресов, разделенных пробелами. Проверьте каждый полученный адрес в браузере, чтобы узнать, какой из них работает.
Также вы можете узнать свой IP, запросив его с помощью команды curl. Чтобы извлечь icanhazip.com (IPv4) с помощью curl, введите:
curl -4 icanhazip.com
Узнав свой внешний адрес, введите в браузер:
http://your_server_ip
Вы увидите стандартную страницу Apache для Ubuntu 20.04.
Эта страница позволяет убедиться, что веб-сервер Apache работает правильно; также она содержит базовую информацию о важных файлах и каталогах Apache.
4: Управление процессами Apache
Теперь мы рассмотрим несколько базовых команд для управления веб-сервером с помощью systemctl.
Чтобы остановить сервер, введите:
sudo systemctl stop apache2
Чтобы запустить сервер, введите:
sudo systemctl start apache2
Для перезапуска используйте команду:
sudo systemctl restart apache2
Во время настройки Apache можно часто перезагружать, не сбрасывая соединений. Для этого нужно использовать команду:
sudo systemctl reload apache2
По умолчанию Apache запускается автоматически вместе с сервером. Чтобы удалить этот сервис из автозагрузки, отключите его:
sudo systemctl disable apache2
Чтобы добавить Apache в автозагрузку, используйте эту команду:
sudo systemctl enable apache2
5: Настройка виртуального хоста (рекомендуется)
На веб-сервере Apache вы можете использовать виртуальные хосты (в Nginx это блоки server) для изоляции настроек и размещения нескольких доменов на одном сервере. Здесь используется условный домен your_domain, который вы должны заменить собственным доменом.
Apache Ubuntu 20.04 по умолчанию предоставляет один включенный виртуальный хост, который обслуживает каталог /var/www/html. Этого хватит для обслуживания одного сайта, но если вы хотите разместить несколько сайтов, вам нужно создать новые виртуальные хосты. Создайте структуру каталогов в /var/www для сайта your_domain, а /var/www/html оставьте как каталог по умолчанию, который будет обслуживаться, если запрос клиента не отвечает другим сайтам.
Создайте каталог для your_domain.
sudo mkdir /var/www/your_domain
Затем задайте права на каталог с помощью переменной $USER:
sudo chown -R www-data:www-data /var/www/your_domain
Права должны быть установлены верно, если вы не меняли unmask, но на всякий случай вы можете ввести эту команду (тогда права на чтение, запись и выполнение будут только у владельца каталога, все остальные пользователи и групп смогут только читать его):
sudo chmod -R 755 /var/www/your_domain
Затем создайте образец страницы index.html с помощью nano или другого редактора:
sudo nano /var/www/your_domain/index.html
Вставьте в файл такой код HTML:
<html> <head> <title>Welcome to Your_domain!</title> </head> <body> <h1>Success! The your_domain virtual host is working!</h1> </body> </html>
Сохраните и закройте файл.
Чтобы Apache мог обслуживать этот контент, необходимо создать файл виртуального хоста с правильными директивами. Вместо того чтобы напрямую изменять конфигурационный файл по умолчанию, /etc/apache2/sites-available/000-default.conf, создайте новый файл /etc/apache2/sites-available/your_domain.conf:
sudo nano /etc/apache2/sites-available/your_domain.conf
Вставьте в файл следующий блок конфигураций. Он похож на конфигурации по умолчанию, но содержит правильный домен и каталог:
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName your_domain ServerAlias www.your_domain DocumentRoot /var/www/your_domain ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Обратите внимание: DocumentRoot содержит путь нового каталога, а ServerAdmin – новый адрес электронной почты администратора сайта your_domain. Мы также добавили в файл две директивы: ServerName определяет базовый домен, который должен соответствовать этому виртуальному хосту, а ServerAlias определяет алиасы.
Сохраните и закройте файл.
Включите файл с помощью a2ensite:
sudo a2ensite your_domain.conf
Отключите стандартный сайт, который определяется файлом 000-default.conf:
sudo a2dissite 000-default.conf
Проверьте ошибки в конфигурациях:
sudo apache2ctl configtest
Если ошибок нет, команда вернет такой вывод:
Syntax OK
Перезапустите Apache:
sudo systemctl restart apache2
Теперь Apache обслуживает домен вашего сайта. Чтобы убедиться в этом, откройте ссылку http://your_domain.
6: Важные файлы и каталоги Apache
Контент
Контент сайта должен храниться в каталоге /var/www/html. По умолчанию из него обслуживается только стандартная страница Apache, которую вы видели ранее. Чтобы изменить корневой каталог сайта, отредактируйте настройки Apache.
Конфигурации
- /etc/apache2: каталог Apache, в котором хранятся все конфигурационные файлы.
- /etc/apache2/apache2.conf: главный конфигурационный файл, в котором находятся глобальные настройки Apache. Он отвечает за загрузку других файлов.
- /etc/apache2/ports.conf: указывает порты, которые прослушивает Apache. По умолчанию веб-сервер прослушивает порт 80; также он может прослушивать порт 443 после включения модуля для поддержки SSL.
- /etc/apache2/sites-available/: каталог, в котором хранятся все файлы виртуальных хостов. Apache не будет использовать их, пока они не связаны с каталогом sites-enabled (см. ниже). Обычно в этом каталоге происходит настройка виртуальных хостов.
- /etc/apache2/sites-enabled/: хранит включенные виртуальные хосты. При запуске или перезапуске Apache читает конфигурационные файлы и ссылки в этом каталоге, чтобы скомпилировать конфигурации.
- /etc/apache2/conf-available/, /etc/apache2/conf-enabled/: каталоги типа sites-available и sites-enabled, работают по тому же принципу. В conf-available хранятся фрагменты конфигураций, которых нет в виртуальном хосте. Файлы в conf-available включаются с помощью команды a2enconf и выключаются с помощью a2disconf.
- /etc/apache2/mods-available/, /etc/apache2/mods-enabled/: также работают по принципу sites-available и sites-enabled. Эти каталоги содержат доступные и активные модули соответственно. Файлы с расширением .load содержат фрагменты для загрузки конкретных модулей. Файлы с расширением .conf хранят настройки этих модулей. Модули включаются и выключаются с помощью команд a2enmod и a2dismod.
Логи сервера
- /var/log/apache2/access.log: по умолчанию каждый запрос к веб-серверу записывается в этом логе доступа (Apache можно настроить иначе).
- /var/log/apache2/error.log: по умолчанию здесь записываются все сообщения об ошибках. Директива LogLevel в настройках Apache определяет, сколько данных будет вноситься в лог.
Получение SSL-сертификата
В целом сейчас нам понадобятся два пакета: certbot и python3-certbot-apache. Последний пакет – это плагин, который обеспечивает интеграцию Certbot и Apache, благодаря чему вы сможете автоматизировать получение сертификата и настройку HTTPS на вашем веб-сервере с помощью одной команды.
sudo apt install certbot python3-certbot-apache
Certbot предлагает различные способы получения сертификатов SSL через плагины. Плагин Apache позаботится о реконфигурации Apache и при необходимости перезагрузит настройки. Чтобы использовать этот плагин, введите:
sudo certbot --apache
Если вы запускаете certbot впервые, вам будет предложено ввести адрес электронной почты, который будет использоваться для отправки уведомлений об обновлениях и ошибках:
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): you@your_domain
Введите адрес и нажмите Enter. После этого вам будет предложено принять условия использования Let’s Encrypt. Для этого нажмите А и Enter:
Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory (A)gree/(C)ancel: A
Затем certbot спросит, хотите ли вы поделиться своим адресом электронной почты с Electronic Frontier Foundation, чтобы получать рассылку с новостями и объявлениями. Если вы не хотите подписываться на рассылку, введите N. В противном случае введите Y и нажмите Enter.
Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. (Y)es/(N)o: N
На следующем этапе Certbot спросит, для каких доменов вы хотите активировать HTTPS. Перечисленные домены автоматически извлекутся из конфигурации виртуального хоста Apache, поэтому важно убедиться, что в вашем виртуальном хосте указаны правильные параметры ServerName и ServerAlias. Если вы хотите включить HTTPS для всех перечисленных доменных имен (что рекомендуется), вы можете оставить командную строку пустой и нажать Enter, чтобы продолжить. В противном случае выберите домены, для которых вы хотите включить HTTPS, разделив их запятыми и/или пробелами, и нажмите Enter.
Which names would you like to activate HTTPS for? 1: your_domain 2: www.your_domain Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel):
Вы получите такой вывод:
Obtaining a new certificate Performing the following challenges: http-01 challenge for your_domain http-01 challenge for www.your_domain Enabled Apache rewrite module Waiting for verification... Cleaning up challenges Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf Enabled Apache socache_shmcb module Enabled Apache ssl module Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
Далее вам будет предложено указать, хотите ли вы, чтобы HTTP-трафик перенаправлялся на HTTPS. На практике это означает, что когда кто-то посещает ваш сайт по незашифрованным каналам (HTTP), они будут автоматически перенаправлены на HTTPS-адрес вашего сайта. Выберите 2, чтобы включить перенаправление, или 1, если вы хотите оставить HTTP и HTTPS.
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
После этого настройка Certbot будет завершена, и вам будут представлены последние замечания о вашем новом сертификате: здесь вы узнаете, где найти сгенерированные файлы и как протестировать вашу конфигурацию с помощью внешнего инструмента, который анализирует подлинность вашего сертификата:
Congratulations! You have successfully enabled https://your_domain and https://www.your_domain You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=your_domain https://www.ssllabs.com/ssltest/analyze.html?d=www.your_domain IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2020-07-27. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Сертификаты будут загружены и установлены. Попробуйте перезагрузить свой сайт, указав https://, и обратите внимание на индикатор безопасности в браузере. Он должен указывать, что сайт надежно защищен (как правило, для этого используется зеленый замочек в адресной строке).
Если вы протестируете свой сервер с помощью SSL Labs Server Test, он получит оценку A.
Теперь давайте протестируем процесс обновления сертификата.
Проверка автоматического обновления сертификата
Сертификаты Let’s Encrypt действительны только в течение 90 дней. Потому лучше заранее автоматизировать процесс продления сертификата.
Клиент certbot обрабатывает обновления с помощью добавленного в /etc/cron.d сценария (он управляется сервисом systemctl по имени certbot.timer). Этот скрипт запускается два раза в день и автоматически обновляет сертификат, срок действия которого истекает через тридцать дней.
Чтобы проверить состояние этого сервиса, используйте команду:
sudo systemctl status certbot.timer
Вы получите такой вывод:
certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left Triggers: ● certbot.service Apr 28 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.
Чтобы протестировать процесс обновления, запустите сухой прогон:
sudo certbot renew --dry-run
Если вы не видите ошибок, значит, все настроено правильно. При необходимости Certbot обновит ваши сертификаты и перезагрузит Apache, чтобы активировать изменения. Если процесс автоматического обновления не срабатывает, Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты, предупредив вас о завершении срока действия вашего сертификата.
Заключение
Теперь веб-сервер Apache установлен и готов к работе. Вы можете обслуживать разные типы контента и внедрить множество технологий для положительного пользовательского опыта. В этом мануале вы научились устанавливать клиент certbot, загружать сертификаты SSL, настраивать Apache для поддержки этих сертификатов и тестировать автоматическое обновление сертификата.