Apache is the most commonly used Web Server on Linux systems. Web Servers are used to serve Web Pages requested by client computers. Clients typically request and view Web Pages using Web Browser applications such as Firefox, Opera, or Mozilla.
Users enter a Uniform Resource Locator (URL) to point to a Web server by means of its Fully Qualified Domain Name (FQDN) and a path to the required resource. For example, to view the home page of the Ubuntu Web site a user will enter only the FQDN. To request specific information about paid support, a user will enter the FQDN followed by a path.
Самые используемые протоколы для передачи веб страниц - это HTTP (Hyper Text Transfer Protocol). Протокол, подобный HTTP, через Безопасное соединение (HTTPS) и протокол передачи файлов (FTP).
Веб сервер Apache часто используется в связке с движком баз данных MySQL, скриптовым языком PHP и другими популярными скриптовыми языками - Python и Perl. Данная конфигурация обозначена аббривиатурой LAMP (Linux, Apache, MySQL, Perl/Python/PHP) и формирует собой мощный набор инструментов для разработки и использования веб-приложений.
Веб сервер Apache2 доступен в Ubuntu Linux. Чтобы установить Apache2:
- Введите в терминале следующие команды:
sudo apt-get install apache2
Apache настроен посредством директив, записанных обычным текстом в конфигурационные файлы. Осовной конфигурационный файл назван apache2.conf
. Кроме того, другие конфигурационные файлы могут добавляться посредством директивы Include; в ней могут использоваться обобщающие символы для подключения нескольких файлов. Любая директива может быть расположена в любом и конфигурационных файлов. Изменения в основном конфигурационном файле принимаются сервером Apache2 только после запуска/перезапуска. На работающий сервер изменения не подействуют.
Сервер так же читает файл, содержащий mime-тип документа; имя файла устанавливается директивой TypesConfig и по умолчанию оно mime.types
.
Файл конфигурации Apache2 по умолчанию: /etc/apache2/apache2.conf
. Вы можете редактировать его для настройки сервера Apache2. Вы можете настроить номер порта, расположение файлов страниц, модули, лог файлы, виртуальные хости и так далее.
Данный раздел описывает основные параметры настройки сервера Apache2. За дополнительной информацией обращайтесь по адресу Apache2 Documentation.
- Apache 2 поставляется с удобной для пользователя конфигурацией виртуальных хостов. То есть, сконфигурирован один виртуальный хост по умолчанию (с использованием директивы VirtualHost), настройку которого можно модифицировать или использовать как есть или использовать шаблоны для добавления других виртуальных хостов, если у вас несколько сайтов. Если ничего не менять, указанный по умолчанию виртуальный хост будет отображаться как ваш сайт по умолчанию. Так же этот сайт увидят пользователи, запросы которых не совпадут ни с одним значением директивы ServerName в конфигурационном файле виртуальных хостов. Для изменения виртуального хоста по умолчанию отредактируйте файл
/etc/apache2/sites-available/default
. Если вы хотите настроить новый виртуальный хост или сайт, скопируйте этот файл в тот же каталог с выбранным вами именем. Например: sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mynewsite Отредактируйте новый файл для настройки нового сайта используя директивы, описанные ниже - Директива ServerAdmin определяет почтовый адрес администратора сервера, который будет отображаться пользователям. Значение по умолчанию - webmaster@localhost. Данная переменная должна быть изменена на доступный для вас почтовый адрес (если вы - администратор сервера). Если на вашем сайте возникнут проблемы, Apache2 отобразит ошибку, в которой так же будет отображен указанный почтовый адрес с целью сообщения проблемы. Вы можете найти эту директиву в вашем файле конфигурации сайтов, в каталоге /etc/apache2/sites-available.
- Директива Listen определяет порт и, при указании, IP адрес, на котором должен работать Apache2. Если IP адрес не указан, Apache2 работает на всех IP адресах, которые доступны компьютеру, на котором он запущен. Значение директивы по умолчанию - порт 80. Вы можете изменить значение на 127.0.0.1:80 чтобы Apache2 работал только на локальном интерфейсе и не был доступен из вне. Так же можно указать, например, значение 81 для изменения порта сервера или оставить все как есть для работы по умолчанию. Данная директива может быть найдена и изменена в ее собственном файле
/etc/apache2/ports.conf
- Директива ServerName указывает, на какое FQDN (полное доменное имя) должен отвечать ваш сайт. В виртуальном хосте по умолчанию директива ServerName не указана, потому он будет отвечать на любые запросы, несоответствующие директивам ServerName в других виртуальных хостах. Если вы только что приобрели домен ubunturocks.com и хотите его разместить на своем сервере, вам потребуется установить значение директивы ServerName ubunturocks.com в вашем файле конфигурации виртуального хоста. Добавьте эту директиву к новому виртуальному хосту, файл которого вы создали раньше (
/etc/apache2/sites-available/mynewsite
). Возможно вы захотите, чтобы ваш сайт отвечал запросу www.ubunturocks.com, потому что многие пользователели привыкли использовать приставку www. Воспользуйтесь директивой ServerAlias для реализации этой задачи. Вы так же можете воспользоваться обощающим символом (*). Например, при указании значения директивы вида ServerAlias *.ubunturocks.com ваш сайт будет отвечать на любые запросы, оканчивающиеся строкой .ubunturocks.com. - Директива DocumentRoot определяет, где Apache должен искать файлы сайта. Значение по умолчанию /var/www. По этому пути сайта нету, но если вы раскомментируете директиву RedirectMatch в файле
/etc/apache2/apache2.conf
, запросы будут перенаправлены по адресу /var/www/apache2-default, где расположен сайт Apache2 по умолчанию. Измените значение этой директивы в вашем файле конфигурации виртуального хоста и не забудьте создать каталог, если он еще не создан.
/etc/apache2/sites-available/mynewsite
. Так же используйте эту утилиту для выключения активных конфигурации.
Данный раздел описывает настройку параметров Apache2 по умолчанию. Они необходимы, например, если вы добавляете виртуальный хост, настраиваете нужные директивы, а некоторые не указываете. В этом случае используются значения по умолчанию.
- DirectoryIndex указывает на страницу (файл) по умолчанию, которую отдает пользователю сервер при запросе индекса каталога, указывая слеш (/) в конце имени каталога. Например, когда пользователь запрашивает страницу this_directory, он получит ее в случае существования указанного в DirectoryIndex файла, иначе будет отображен сгенерированный сервером каталог, если указана опция Indexes или будет отбражена страница "Доступ запрещен". Сервер попытается найти один из файлов, указанных в директиве DirectoryIndex, просмативая ее значения по порядку и вернет первый существующий файл из списка. Если ни один из перечисленных в директиве файлов не будет найден и для этого каталога будет установлена опция Indexes, сервер сгенерирует список файлов и подкаталогов в html-формате. Значение по умолчанию, которое можно найти в файле
/etc/apache2/apache2.conf
" index.html index.cgi index.pl index.php index.xhtml". Вообщем, если Apache2 найдет в запрошенном каталоге один из файлов, указанных в списке, он его отобразит. - Директива ErrorDocument дает возможность указать файл, который Apache будет возвращать в случае сообщений об ошибке. Например, если пользователь запросит несуществующую страницу, будет вызвана ошибка 404 и Apache вернет файл, указанный в конфигурации по умолчанию -
/usr/share/apache2/error/HTTP_NOT_FOUND.html.var
. Файл не находится внутри каталога, указанного в директиве DocumentRoot, но директива Alias, описанная в файле/etc/apache2/apache2.conf
перенаправляет запросы к каталогу /error в каталог /usr/share/apache2/error/. Чтобы просмотреть список директив ErrorDocument, воспользуйтесь командой grep ErrorDocument /etc/apache2/apache2.conf - По умолчанию, лог запрашиваемых документов сервер пишет в файл /var/log/apache2/access.log. Вы можете указать для каждого виртуального хоста отдельный файл для логов посредством директивы CustomLog или же заменить значение по умолчанию, указанное в файле
/etc/apache2/apache2.conf
. Вы так же можете указать файл для записи ошибок посредством директивы ErrorLog (по умолчанию -/var/log/apache2/error.log
). Он записывается отдельно от логов запрашиваемых документов, что упрощает поиск ошибок при каких либо проблемах с сервером Apache2. Так же вы можете указать директивы LogLevel и LogFormat (смотрите файл/etc/apache2/apache2.conf
для определения настроек по умолчанию). - Некоторые опции указаны для каждого каталога, а не для сервера, опции директив. Строфа Directory заключена в xml-подобные тэги:
<Directory /var/www/mynewsite> ... </Directory>
Директива Options внутри строки Directory может принимать одно или несколько перечисленных далее значений, разделенных пробелом:
- Includes - Разрешить server-side includes. Server-side includes разрешают подключать к html-файлам другие файлы. Это не общая опция. Для дополнительной информации посетите страницу the Apache2 SSI Howto.
- IncludesNOEXEC - Разрешить server-side includes, но выключить команды #exec и #include в CGI скриптах.
- Indexes - Отображать список содержимого каталога, если ни одного файла из списка DirectoryIndex не обнаружена в запрошенном каталоге.
Из соображений безопасности обычно это не устанавливается и естественно не должно устанавливаться для каталога DocumentRoot. Включайте эту опцию только на отдельные каталоги и только в том случае, если уверены, что хотите, чтобы пользователи могли просматривать все содержимое каталога.
- Multiview - Поддержка content-negotiated multiviews; опция выключена по умолчанию в целях безопасности. Посетите Apache2 документацию по этой опции.
- SymLinksIfOwnerMatch - Переходить по символическим ссылкам только в случае, если у файла/каталога и ссылки один и тот же владелец.
Виртуальные хосты позволяют вам запускать разные сервера для разных ip-адресов, разные имена хостов или разные порты на одних и тех же компьютерах. Например, вы можете запустить сайты example и anotherexample на одном и том же веб-сервере используя виртуальные хоста. Эта опция соответствует директиве <VirtualHost> для виртуального хоста по умолчанию и виртуального хоста по IP-адресу. Она соответствует директиве <NameVirtualHost> для базированного на имени виртуального хоста.
Директивы, установленные для виртуального хоста применяются только для того виртуального хоста, для которого они установлены. Если директива установлена в основной конфигурации сервера и не установлена для конкретного виртуального хоста, то будет использовано значение по умолчанию. Например, вы можете указать адрес электронной почты вебмастера в основном конфигурационном файле сервера и не указывать его для каждого виртуального хоста.
Установите директиву DocumentRoot для определения каталога, содержащего корневой документ (такой как index.html) для виртуального хоста. Значение директивы DocumentRoot по умолчанию - /var/www
.
The ServerAdmin directive within the VirtualHost stanza is the email address used in the footer of error pages if you choose to show a footer with an email address on the error pages.
Данный раздел объясняет, как настроить основные параметры сервера.
LockFile - Директива LockFile устанавливает путь к lock-файлу сервера, который используется, если сервер собран с параметрами USE_FCNTL_SERIALIZED_ACCEPT или USE_FLOCK_SERIALIZED_ACCEPT. Он должен располагаться на локальном диске. Значение директивы должно быть оставлено по умолчанию за исключением случая, когда каталог логов находится в разделе NFS. Доступ к файлу должен быть только у суперпользователя (root).
PidFile - Директива PidFile устанавливает имя файла, в который сервер записывает свой номер поцесса (process ID (pid)). Файл должен читаться только суперпользователем (root). В большинстве случаев следует оставить значение по умолчанию.
User - Директива User определяет userid, под которым сервер отвечает на запросы. Она определяет возможности в доступе для сервера. Любые файлы, недоступные для этого пользователя не будут доступны и для посетителей сайтов. Значение по умолчанию www-data.
Без полного понимания того, что вы делаете, не устанавливайте директиву User в значение root. Использование суперпользователя (root) как пользователя веб-сервера создаст очень серьезные дыры в безопасности вашего сервера.
Директива Group по значению сходна с директивой User. Она устанавливает группу, от которой работает веб-сервер. Значение по умолчанию - www-data.
Apache - модульный сервер. Под этим подразумевается, что в основную часть сервера входят только самые базовые функции. Расширеные возможности доступны посредством модулей, которые могут быть загружены в сервер. По умолчанию, базовый набор модулей входит в состав сборки. Если сервер собран с возможностью использования динамически загружаемых модулей, то модули могут собираться отдельно и добавляться в директику LoadModule. Иначе, Apache должен быть пересобран для добавления или удаления каких-либо модулей. В Ubuntu Apache2 собран с поддержкой динамической загрузки модулей. Вы можете устанавливать дополнительные модули Apache2 и использовать их вместе с вашим сервером. Вы можете установить модули Apache2 используя команду apt-get. Например, чтобы установить модуль аутентификации MySQL, вам нужно запустить следующую команду в терминале:
sudo apt-get install libapache2-mod-auth-mysql
После установки модуля он будет доступен в каталоге /etc/apache2/mods-available
. Вы можете использовать команду a2enmod для включения модуля. Вы можете использовать команду a2dismod для выключения модуля. После включения модуля он будет доступен в каталоге /etc/apache2/mods-enabled
.
Модуль mod_ssl добавляет важную функцию к серверу Apache2 - возможность шифровать передаваемую информацию. Таким образом, когда ваш браузер использует SSL шифрацию, в начале ссылки (Uniform Resource Locator (URL)) используется префикс https:// .
Модуль mod_ssl доступен в пакете apache2-common. Если данный пакет у вас установлен, вы можете запустить в терминале следующую команду для включения модуля mod_ssl:
sudo a2enmod ssl
Для настройки безопасности вашего сервера используйте криптографию с открытым ключем (public key cryptography), чтобы создать пару публичного/частного ключей (public and private key pair). В большинстве случаев, вы посылаете запрос на сертификат, доказательство идентификации вашей компании и оплату в Certificate Authority (CA). CA проверяет ваш запрос на сертификат, вашу идентификацию и затем высылает сертификат для вашего сервера.
Альтернативный вариант - вы можете создать свой собственный сертификат, подписанный собственоручно. Однако, собственоручно подписанные сертефикаты не могут использоваться на большинстве предприятий. Собственоручно подписанные сертификаты не принимаются браузером автоматически. Пользователям задается вопрос, принимать ли сертификат и создавать ли защищенное соединение.
Как только у вас будет сертификат (не важно, подписанный в CA или собственоручно), вам нужно установить его на ваш сервер.
Вам нужен ключ и сертификат для управления вашим безопасным сервером, то есть вам нужно сгенерировать собственно подписанный сертификат или приобрести сертификат подписанный в CA. Подписанный в CA сертификат предоставляет две важные возможности вашему серверу:
- Браузеры (обычно) автоматически определяют сертификаты и разрешают безопасные соединения без подтверждения пользователя.
- Выданный CA подписанный сертификат является гарантией идентификации организации, предоставляющей веб страницы браузеру.
В большинстве браузеров, поддерживающих SSL, есть список сертификатов CA, который они автоматически принимают. Если у браузера нету в списке сертификата, подписанного CA, браузер задаст вопрос пользователю, устанавливать соединение или нет.
Вы можете сформировать свой самоподписанный сертификат для вашего безопасного сервера, но надо помить, что самоподписанный сертификат не предоставляет ту же функциональность как сертификат подписанный подписью CA. Самоподписанный сертификат не признается автоматически большинством Веб браузеров, и подобный сертификат не предоставляет никакой гарантии относительно компании, обеспечивающей вебсайт. Сертификат подписанный подписью CA гарантирует оба этих важных критерия для безопасного сервера. Процесс получения сертификата подписанного CA достаточно прост. Далее следует краткий обзор:
- Создайте пару ключей шифрования, открытый и закрытый
- Создайте запрос сертификата основанный на открытом ключе. Данный запрос содержит в себе информацию о вашем сервере и компании где он размещается.
- Отправьте запрос сертификата вместе с документами подтверждающую вашу личность в CA.Мы не можем рекомендовать вам, какой тип сертификата выбрать. Ваше решение может основываться на вашем последнем опыте, на опыте ваших друзей и коллег или просто на финансовых факторах. Если вы остановились на CA, вам необходимо следовать инструкциям, которые они предоставят для получения их сертификата.
- Когда CA установит, что вы являетесь тем, за кого себя выдаете, они пришлют вам цифровой сертификат.
- Установите этот сертификат на свой сервер и начинайте использовать безопасную передачу данных.
Получаете вы сертификат от CA или генерируете его собственоручно, первым шагом должно быть создание ключа.
Для генерирования Certificate Signing Request (CSR) вам потребуется создать свой собственный ключ. Вы можете запустить описанные далее команды в терминале для создания ключа:
openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus .....................++++++ .................++++++ unable to write 'random state' e is 65537 (0x10001) Enter pass phrase for server.key:
Теперь вы можете ввести ваш пароль. Для наилучшей безопасности он должен содержать не менее восьми символов. Минимальная длинна - четыре символа. Пароль должен содержать цифры и/или специальные символы и не являться словом из словаря. Запомните то, что вы введете.
Повторите пароль для достоверности. После правильного повтора пароля сервер сгенерирует ключ и запишет его в файл server.key
.
Вы так же можете запустить защищенный веб сервер без паспорт-пароля. Это удобно потому, что вам не нужно будет вводить пароль каждый раз при запуске защищенного сервера. Но это очень небезопасно.
В любом случае, вы можете запускать ваш сервер и без паспорт-пароля не указывая параметр -des3 при генерации паспорта или указав следующую команду в терминале:
openssl rsa -in server.key -out server.key.insecure
Запустив вышеуказанную команду сервер сохранит небезопасный ключ в файле server.key.insecure
. Вы можете использовать этот файл для генерации CSR без паспорт-пароля.
Для создания CSR, выполните следующую команду в терминале:
openssl req -new -key server.key -out server.csr
Будет выдано приглашение ввести ключевую фразу. Если вы ввели правильную ключевую фразу, вам будет предложено ввести название компании, название сайта, адрес эл. почты и т.д. После того как вы введете эти параметры, ваш CSR будет создан и сохранен в файле server.csr
. Вы можете отправить данный CSR в CA для обработки. CAN использует данный CSR для выпуска сертификата. С другой стороны вы можете создать самоподписанный сертификат используя этот CSR
Для того, чтобы создать сертификат со своей подписью исполните следующую комманду в терминале:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Вышеприведенная команда предложит ввести ключевую фразу. При вводе правильной ключевой фразы, ваш сертификат будет создан и сохранен в файле server.crt
.
Если ваш защищенный сервер будет использован в коммерческих целях, вам скорее всего необходим сертификат подписанный CA. В данном случае не рекомендуется использовать самоподписанный сертификат.
Вы можете установить файл ключа server.key
и файл сертификата server.crt
или сертификат, предоставленный вам CA, следующей командой в терминале:
sudo cp server.crt /etc/ssl/certs sudo cp server.key /etc/ssl/private
Вы должны добавить следующие четыре строки в файл /etc/apache2/sites-available/default
или в конфигурационный файл вашего виртуального хоста. Вы должны расположить их в разделе VirtualHost. И они должны идти после строки DocumentRoot:
SSLEngine on SSLOptions +FakeBasicAuth +ExportCertData +CompatEnvVars +StrictRequire SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key
Протокол HTTPS должен быть привязан к порту 443. Вам нужно добавить следующую строку в конфигурационный файл /etc/apache2/ports.conf
:
Listen 443
После установки сертификата вам нужно перезапустить сервер. Вы можете перезапустить сервер следующей командой в терминале:
sudo /etc/init.d/apache2 restart
Вам нужно запомнить и вводить паспорт-пароль каждый раз при запуске вашего безопасного сервера.
У вас будет запрошен паспор-пароль. После ввода правильного пароля сервер будет запущен. Вы сможете посетить страницы на безопасном сервере указав ссылку https://your_hostname/url/ в адресной строке браузера.