Веб-сервер Apache — один из наиболее широко используемых веб-серверов в Интернете. Понимание его основ и функций необходимо всем, кто занимается веб-разработкой, системным администрированием или управлением серверами.
В этой статье мы рассмотрим 25 интересных вопросов для собеседования по Apache и ответы на них, которые помогут вам узнать о Apache то, чего вы, возможно, раньше не знали.
HTTP-сервер Apache — один из самых популярных, мощных веб-серверов с открытым исходным кодом, который используется для размещения веб-сайтов путём передачи веб-файлов по сети.
Он работает с использованием HTTP (протокола передачи гипертекста), который устанавливает стандарт для взаимодействия между веб-серверами и клиентскими браузерами.
Apache поддерживает такие функции, как SSL (уровень защищённых сокетов), CGI (интерфейс общего шлюза), виртуальный хостинг и многие другие.
apache2 -v # Для систем на базе Debian httpd -v # Для систем на базе RedHat
Здесь отобразится версия Apache, установленная в вашей системе, а также дополнительная информация, например, дата сборки.
Apache работает от имени пользователя «www-data
» в системах на базе Debian и «apache
» в системах на базе RedHat.
Основной файл конфигурации Apache обычно находится по адресу:
/etc/apache2/apache2.conf (для систем на базе Debian) /etc/httpd/httpd.conf (для систем на базе RedHat)
Apache прослушивает следующие порты по умолчанию:
Эти порты можно настроить в файлах конфигурации Apache, которые обычно находятся в /etc/httpd/conf/httpd.conf (для систем на базе RHEL) или /etc/apache2/ports.conf (для систем на базе Ubuntu).
Чтобы установить Apache на различные дистрибутивы Linux, вы можете использовать следующие команды:
sudo apt install apache2 # Для систем на базе Debian sudo yum install httpd # Для систем на базе RedHat
После установки вы можете получить доступ к серверу Apache, открыв веб-браузер и перейдя по адресу http://localhost
или http://your-server-ip
. Если установка прошла успешно, вы увидите страницу приветствия Apache по умолчанию.
Вы можете найти каталоги конфигурации Apache в:
/etc/apache2/ # Для систем на базе Debian /etc/httpd/ # Для систем на базе RedHat
В этих каталогах хранятся файлы конфигурации для модулей, виртуальных хостов и общие настройки сервера.
Да, Apache можно защитить с помощью TCP-оболочек, которые обеспечивают дополнительный уровень безопасности, контролируя доступ к сервисам на основе IP-адресов.
Вот как настроить TCP-оболочки для защиты Apache:
В большинстве дистрибутивов Linux предварительно установлены TCP-оболочки. Чтобы проверить, установлена ли она, найдите двоичный файл tcpd:
which tcpd
Если он не установлен, вы можете установить его с помощью менеджера пакетов:
sudo apt install tcpd # Для систем на базе Debian sudo yum install tcp_wrappers # Для систем на базе RedHat
Оболочки TCP используют два файла конфигурации:
/etc/hosts.allow
– В этом файле указывается, каким хостам разрешен доступ к службам./etc/hosts.deny
– В этом файле указывается, к каким хостам запрещен доступ.
Сначала откройте файл /etc/hosts.allow
и добавьте строку, разрешающую доступ Apache (httpd):
httpd: ALL
Для более ограниченного доступа укажите конкретные IP-адреса или подсети:
httpd: 192.168.1.0/24
Затем откройте файл /etc/hosts.deny
и добавьте следующую строку, чтобы запретить все остальные.
httpd: ALL
После внесения изменений в конфигурацию TCP-оболочек перезапустите Apache, чтобы применить изменения:
sudo systemctl restart apache2 # Для систем на базе Debian sudo systemctl restart httpd # Для систем на базе RedHat
Чтобы изменить порт Apache по умолчанию, измените директиву Listen
в файле конфигурации (/etc/apache2/ports.conf или /etc/httpd/conf/httpd.conf):
Listen 8080 # Измените 80 на 8080, например
Apache начнёт прослушивать порт 8080 вместо порта по умолчанию 80.
Да, вы можете запустить два сервера Apache на одном компьютере, но они должны работать на разных портах.
Вот несколько ключевых моментов, которые следует учитывать при настройке этого:
Тщательно настроив каждый экземпляр, вы сможете успешно разместить два веб-сервера Apache на одном сервере, что позволит вам эффективно управлять различными веб-сайтами или приложениями.
В Apache DocumentRoot — это директива, которая указывает каталог, из которого веб-сервер обслуживает файлы. По сути, она определяет каталог верхнего уровня, в котором хранятся файлы вашего сайта.
DocumentRoot обычно определяется в файлах конфигурации Apache или в файлах конфигурации виртуальных хостов.
DocumentRoot /var/www/html
DocumentRoot для Apache по умолчанию во многих дистрибутивах часто является /var/www/html
.
Директива Alias
в Apache позволяет обслуживать файлы из каталога, который не является частью основного корневого каталога документов. Это полезно для организации файлов и повышения безопасности за счёт исключения определённых файлов из общедоступного веб-каталога.
Чтобы создать псевдоним, используйте следующий синтаксис:
Alias /files/ /var/files/
Это означает, что пользователи могут получить доступ, /var/files/
используя /files/
URL.
DirectoryIndex
— это директива, используемая в конфигурациях веб-серверов для указания файла по умолчанию, который должен быть загружен при запросе каталога.
Если пользователь переходит по URL-адресу, который указывает на каталог, а не на конкретный файл, сервер будет искать файлы, перечисленные в директиве DirectoryIndex
, и выдаст первый найденный файл.
Например:
DirectoryIndex index.html index.php
Если существуют оба варианта, index.html
и index.php
Apache будет работать index.html
первым.
Чтобы отключить отображение каталогов, добавьте в файл конфигурации следующую строку (например, httpd.conf
или apache2.conf
):
Options -Indexes
Эта директива отключает отображение содержимого каталогов. Если индексного файла нет, пользователи увидят ошибку «403 Forbidden» вместо содержимого каталога.
Веб-сервер Apache генерирует несколько файлов журналов, которые необходимы для мониторинга и устранения неполадок.
Вот основные файлы журналов, с которыми вы можете столкнуться:
access.log
– Записывает все запросы, обработанные сервером.error.log
– Фиксирует сообщения об ошибках и предупреждения, генерируемые сервером.
Вот разбивка различных файлов журналов и их расположения:
Журнал доступа:
Ubuntu: /var/log/apache2/access.log RHEL: /var/log/httpd/access_log
Журнал ошибок:
Ubuntu: /var/log/apache2/error.log RHEL: /var/log/httpd/error_log
Сообщение об ошибке «connection reset by peer» указывает на то, что сетевое соединение было внезапно закрыто удалённым хостом («одноранговым узлом»), с которым вы общались.
Это может происходить по разным причинам, в том числе:
В журналах эта ошибка обычно указывает на то, что клиент (ваше приложение или устройство) пытался отправить или получить данные после того, как сервер уже закрыл соединение.
Виртуальный хост в Apache — это метод, который позволяет размещать несколько веб-сайтов (доменов) на одном сервере. С помощью виртуальных хостов вы можете предоставлять различный контент в зависимости от доменного имени, используемого в запросе, что полезно для оптимизации ресурсов и упрощения управления несколькими сайтами.
Типы виртуальных хостов:
Чтобы настроить виртуальный хост, вам нужно создать новый файл конфигурации для вашего сайта со следующим содержимым:
<VirtualHost *:80> ServerAdmin webmaster@example.com ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com/public_html <Directory /var/www/example.com/public_html> AllowOverride All </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
В Apache <Location>
и <Directory>
— это две разные директивы, которые используются для управления доступом и настройки различных частей вашего веб-сервера.
Вот разбивка их различий:
<Location>
: Применяется к URL-адресам и не зависит от физической структуры каталогов.<Directory>
: Применимо к каталогам файловой системы.
Пример <Location>
:
<Location /admin> AuthType Basic AuthName "Restricted Access" Require valid-user </Location>
Пример <Directory>
:
<Directory /var/www/html> AllowOverride All Require all granted </Directory>
Основное различие между Worker и Prefork Multi-Processing Modules (MPM) в Apache HTTP Server заключается в том, как они обрабатывают запросы и управляют процессами и потоками.
Вот упрощенная разбивка:
Директива LimitRequestBody используется для установки максимально допустимого размера тела HTTP-запроса (например, при загрузке файлов):
<Directory /var/www/html/uploads> LimitRequestBody 10485760 </Directory>
Замените /var/www/html/uploads
на путь к вашему каталогу загрузок. Размер указывается в байтах (1 МБ = 1024 × 1024 байта).
mod_perl и mod_php — это модули для Apache, которые позволяют запускать скрипты Perl и PHP соответственно непосредственно на сервере.
mod_evasive — это модуль Apache, предназначенный для защиты от атак типа «отказ в обслуживании» (DoS) и атак методом перебора. Он помогает веб-серверам управлять и ограничивать количество запросов, которые пользователь может сделать в течение определённого времени.
Вот краткий обзор его возможностей:
В Apache LogLevel Debug — это директива конфигурации, которая управляет объёмом и типом информации, записываемой в журналы Apache. Это полезно для устранения неполадок и отладки.
Apache поддерживает несколько уровней ведения журнала, таких как:
mod_ssl — это модуль Apache, который поддерживает протоколы SSL (Secure Sockets Layer) и TLS (Transport Layer Security) на веб-серверах Apache, что позволяет веб-сайтам шифровать данные, передаваемые между сервером и клиентами, обеспечивая безопасную связь.
Вот краткое описание того, как это работает:
Файл конфигурации .htaccess
— это файл, который используются для управления поведением сервера Apache на уровне каталога. Они позволяют задавать различные параметры, такие как перенаправление URL-адресов, контроль доступа и пользовательские страницы ошибок, без редактирования основного файла конфигурации.
Например, вы можете использовать файл .htaccess
для перенаправления пользователей со старого URL-адреса на новый:
Redirect 301 /old-page.html /new-page.html
Вы можете включить или отключить модули в Apache с помощью команд a2enmod и a2dismod в системах на базе Debian.
Например, чтобы включить модуль (например, перезаписать):
sudo a2enmod rewrite
Как отключить модуль (например, перезаписать):
sudo a2dismod rewrite
Эти вопросы охватывают различные важные темы, связанные с управлением, настройкой и безопасностью веб-сервера Apache, и помогут вам хорошо подготовиться к любому собеседованию, связанному с Apache!