Apache настройка – История создания домашнего облака. Часть 2. Создание сервера — настройка LAMP в Debian

Содержание

Как настроить сервер Apache на максимальную производительность

В наши дни все ждут от сайтов молниеносной скорости загрузки. В этой статье мы рассмотрим лучшие методы оптимизации сервера Apache.

Работа веб-серверов может замедляться из-за вредоносных программ, больших объемов трафика или из-за неправильного распределения ресурсов. Есть два пути ускорения работы веб-сервера Apache:

Круглосуточный мониторинг производительности и экстренные исправления.

Отслеживание производительности, завершение процесса-нарушителя и установление лимитов выделенных ресурсов, чтобы в будущем предотвратить возникновение подобных проблем.

Периодический аудит производительности и настройка Apache.

Позволяет найти уязвимости сервера и защитить их.

Настроить производительность Apache таким образом, чтобы она соответствовала объемам получаемого трафика. Таким образом можно добиться 50% ускорения работы.

Ускорить работу Apache можно на двух основных стадиях:

  • Во время компиляции – настройки при установке сервера.
  • Во время выполнения — установка параметров, влияющих на сервер во время его работы.

Нужно выбирать вариант установки Apache, исходя из ваших требований. Это поможет создать быстрый и эффективный веб-сервер.

В Apache функциональность реализуется путем добавления модулей. Они бывают двух типов: статические и динамические (общие).

Чтобы посмотреть список модулей, поддерживаемых вашим сервером, используйте команду apachectl -M. Статические модули компилируются в бинарные файлы httpd, а динамические загружаются непосредственно во время выполнения.

Статические и динамические модули: ключевые различия

Статические модули Динамические модули
Компилируются в бинарные файлы Добавляются во время выполнения
Требуют перекомпиляции кода Перекомпиляция не требуется
Быстро загружаются Замедляют веб-сервер

Чем больше статических модулей в бинарных файлах, тем быстрее работает веб-сервер. Но они требуют перекомпиляции Apache каждый раз, когда нужно что-то изменить. Из-за этого динамические модули или DSO используются чаще, поскольку они могут быть скомпилированы отдельно и загружены во время выполнения.

Но большое количество динамических или общих модулей может замедлить работу сервера Apache и сайта. Поэтому при выборе модулей требуется соблюдать осторожность.

Чтобы увеличить скорость работы и производительность, используйте минимальное количество динамических модулей, поскольку они уменьшают объем доступной памяти.

В Apache используются MPM (мульти-процессинговые модули), которые обрабатывают запросы, приходящие на сервер. Они прослушивают сетевые порты сервера, принимая запросы и создавая дочерние процессы.

MPM бывают двух типов: Prefork и Worker. В MPM Prefork каждый процесс httpd обрабатывает один сетевой запрос. Это более безопасно по сравнению с MPM Worker, но требует большего количества памяти и ресурсов.

MPM – Prefork и Worker

MPM Prefork MPM Worker
Один поток Несколько потоков
Использует больше ресурсов Использует меньше памяти
Отказоустойчив Справляется с большим трафиком

При использовании MPM Worker Apache работает в режиме многопоточного сервера, где каждый отвечает за свой запрос. Этот вариант подходит для обработки большего трафика при ограниченных мощностях сервера.

По умолчанию большинство установок Apache используют модуль Prefork. Он применяется для обработки больших объемов трафика. Вы можете проверить, какой модуль MPM использует ваш сервер при помощи следующей команды:

Определение типа MPM на вашем веб—сервере Apache

В Apache 2.4 появилась поддержка э MPM модуля Event, который может обрабатывать множественные запросы внутри одного потока. Поэтому он работает даже быстрее, чем модуль Worker.

Чтобы повысить производительность сервера, нужно регулярно измерять производительность и осуществлять тонкую настройку конфигурации. Наиболее важные параметры, которые нужно оптимизировать:

Apache может тратить время на определение хоста каждого IP, с которого приходит запрос. Это замедляет обработку запроса, а также приводит к пустой трате ресурсов. Чтобы избежать этого, нужно отключить опцию HostnameLookups.

При настройке директив Allow from или Deny from используйте IP-адреса вместо доменных имён. Иначе будет осуществляться двойной поиск имени DNS, который уменьшит производительность сервера.

Если задана опция AllowOverride, то Apache попытается открыть файл .htaccess в каждой папке, которую он посещает. Эти дополнительные запросы к файловой системе увеличивают время отправки ответа с сервера.

Поэтому лучше отключить эту опцию. Если переопределение настроек в файлах .htaccess необходимо в определённой папке, нужно разрешить это только для данного каталога.

Настройка Apache FollowSymLinks сообщает серверу, что нужно проверять символические ссылки и проходить по ним. Если она имеет значение Off, Apache придётся выполнять дополнительные проверки, что замедлит его работу.

Если установлена директива SymLinksIfOwnerMatch, сервер будет проходить по символическим ссылкам, только если владелец целевого файла тот же, что и владелец ссылки. Это также влияет на скорость работы Apache.

Лучше всего активировать директиву FollowSymLinks и выключить директиву ‘SymLinksIfOwnerMatch’. Но это может привести к проблемам с безопасностью, поэтому окончательное решение остается за вами.

Согласование содержимого позволяет клиентам выбирать формат данных, получаемых от сервера. Рекомендуется избегать согласования содержимого для быстрого ответа.

Если согласование содержимого необходимо для сайта, можно снизить задержки, используя файлы type-map вместо директивы Options MultiViews. Ее применение увеличивает задержку.

Настройка MaxClients устанавливает лимит количества одновременных запросов, которое может поддерживаться Apache. Если это значение слишком мало, запросы станут в очередь, и не будут обрабатываться.

Большое значение параметра может загрузить оперативную память и повлиять на скорость ответов Apache. Необходимо выбрать оптимально значение исходя из объёма доступной памяти и ресурсов, потребляемых процессом.

MaxSpareServers и MinSpareServers определяют количество дочерних процессов, которые будут находиться в состоянии ожидания обработки запросов. Эти параметры важны, потому что создание дочернего процесса отнимает ресурсы.

Если значение MinSpareServers слишком низкое, и на сервер поступает одновременно несколько запросов, Apache создаст дополнительные дочерние процессы. Это снижает возможность быстрого ответа на запрос клиента.

Значение MaxSpareServers не должно быть слишком большим. Так как стоящие в очереди на обработку дочерние процессы потребляют лишние серверные мощности. Нужно установить эти значения в оптимальном диапазоне, чтобы сбалансировать использование ресурсов и производительность.

Директива StartServers устанавливает количество дочерних серверных процессов, которые создаются при старте сервера. Если запросов много, а Apache часто перезагружается, нужно установить относительно большое значение.

Директива MaxRequestsPerChild устанавливает лимит количества запросов, которое будет обрабатывать каждый дочерний процесс. Слишком малое значения может привести к перегрузке сервера при создании новых процессов. Поэтому нужно установить это значение в диапазоне нескольких тысяч, чтобы ускорить работу Apache.

KeepAlive используется для поддержки единого соединения для передачи данных веб-страницы. Благодаря чему не тратится время на создание нового подключения для каждого файла.

KeepAliveTimeout определяет время ожидания следующего запроса. Если значение большое, дочерние процессы могут расходовать ресурсы, ожидая следующего запроса. Оптимальное значение – 2-5 секунд для небольших объемов трафика и 10 секунд для высоконагруженных серверов.

Устанавливает время ожидания запроса от посетителя. При больших объемах трафика значение параметра должно быть не менее 120 секунд. Но лучше держать это значение минимальным. Это позволяет предотвратить излишнее расходование ресурсов.

Сжатие HTTP применяется для ускорения работы серверов Apache. Сервер применяет к телу ответа шифрование gzip или deflate перед тем, как отправить его клиенту. Затем клиент распаковывает полученные данные. Данные сжимаются только если браузер запрашивает сжатие. Сжатие HTTP включается в Apache с помощью модуля ‘mod_deflate’.

При кэшировании копия данных сохраняется на стороне клиенте или прокси-сервере, поэтому их не нужно получать напрямую с сервера. Кэширование часто используемых файлов помогает снизить нагрузку на сервер и ускорить обработку запросов.

Модули mod_expires и mod_headers для настройки кэша через HTTP- заголовки, присылаемые с сервера. С помощью директив cache-control можно управлять правилами кэширования, чтобы ускорить работу Apache.

Также можно использовать кэширование на стороне сервера, когда часто запрашиваемый контент хранится в памяти. Для настройки данного типа кэширования используется модуль mod_cache.

Процессы Apache, которые управляют динамическим контентом, потребляют от 3 до 20 Мб памяти. Статический контент требуют всего лишь 1Мб памяти. Процесс, управляющий динамическим контентом, при следующем запросе может предоставлять статический контент.

Что приводит к расходам памяти и замедлению работы сервера. Поэтому рекомендуется разделить серверы на управляющие статическим контентом и динамическим контентом.

Например, можно использовать небольшой Apache в качестве frontend-сервера, предоставляющего статический контент. Запросы на динамический контент будут перенаправляться к другому серверу Apache со всеми необходимыми модулями.

Для подобного перенаправления запросов используются модули mod_proxy и mod_rewrite. Клиент не заметит разницы, и будет считать, что все запросы выполняются одним сервером.

Используя два сервера, можно ускорить работу Apache, выдавая статический контент быстрее и выделяя большее количество памяти для обработки динамического контента.

Не менее важно оптимизировать сервер баз данных, чтобы избежать задержек в его работе. Также необходимо улучшить производительность PHP-страниц, используя механизм кэширования, такой как Zend OPcache.

Сервер MySQL оптимизируется путем настройки фрагментации таблиц, максимального количества подключений, размеров буфера, кэша запросов, пула и т.п.

Настройка производительности Apache – нелёгкое дело. Поэтому важно иметь чёткое понимание технических требований веб-сервера и принципа его работы.

Данная публикация представляет собой перевод статьи «How to speed up Apache webserver for maximum Performance» , подготовленной дружной командой проекта Интернет-технологии.ру

Установка Apache HTTP Server 2.2.22

Главная страница / Документация / Инструментарий веб-разработчика /

Статья описывает процесс установки и первоначальной настройки на локальном компьютере, работающим под операционной системой Windows XP, прекрасно зарекомендовавшей себя связки программ, используемых при создании, как крупных, так и средних веб-проектов: Apache, MySQL, PHP и phpMyAdmin.

Авторы: Виктор Волков, Иван Шумилов

Содержание:


Установка Apache

Сайт разработчика: http://www.apache.org/
Дистрибутив (Apache 2.2 Win32 Binary): http://www.apachelounge.com/download/
Прямая ссылка: httpd-2.2.22-win32.zip

Вот он – великий и ужасный. Сгубивший на своём веку множество начинающих веб-разработчиков, сложивших головы на настройке его конфигурационных файлов. 🙂 Но мы с вами люди, крепких нервов и стальных желудков - поэтому, поехали.

Начальная установка и настройка


Распакуйте архив дистрибутива в каталог C:\Apache2.

Откройте в текстовом редакторе файл "C:\Apache2\conf\httpd.conf", являющийся основным конфигурационным файлом сервера Apache.

Ну а теперь держитесь. Женщинам, старикам и детям просьба – дальше не читать. За психическое состояние людей, дочитавших статью до конца – авторы ответственности не несут. 🙂

Правка файла httpd.conf

  1. Для загрузки модуля mod_rewrite найдите и раскомментируйте (уберите в начале строки символ "#") данную строку:
    LoadModule rewrite_module modules/mod_rewrite.so
  2. Для загрузки PHP интерпретатора, в конец блока загрузки модулей необходимо добавить строку:
    LoadModule php5_module "C:/php/php5apache2_2.dll"
  3. Определите каталог содержащий конфигурационный файл PHP, добавив ниже следующую строку:
    PHPIniDir "C:/php"
  4. Найдите и раскомментируйте строку:
    ServerName www.example.com:80
    Отредактируйте ее следующим образом установив изначальное имя сервера:
    ServerName localhost:80
  5. Найдите строку:
    DocumentRoot "c:/Apache2/htdocs"
    Назначьте корневую директорию управления сайтами (немного позже мы ее создадим):
    DocumentRoot "C:/apache"
  6. Найдите данный блок:
    <Directory />
       Options FollowSymLinks
       AllowOverride None
       Order deny,allow
       Deny from all
    </Directory>
    И замените его на нижеследующий:
    <Directory />
       Options Includes Indexes FollowSymLinks
       AllowOverride All
       Allow from all
    </Directory>
  7. Удалите или закомментируйте первоначальный блок управления директориями (он нам не понадобится), который без комментариев выглядит примерно так:
    <Directory "c:/Apache2/htdocs">
       Options Indexes FollowSymLinks
       AllowOverride None
       Order allow,deny
       Allow from all
    </Directory>
  8. Найдите блок:
    <IfModule dir_module>
       DirectoryIndex index.html
    </IfModule>
    Замените его на:
    <IfModule dir_module>
       DirectoryIndex index.html index.htm index.shtml index.php
    </IfModule>
  9. Найдите строку:
    ErrorLog "logs/error.log"
    Замените на нижеследующую (в этом случае просматривать глобальный файл ошибок сервера будет удобнее):
    ErrorLog "C:/apache/error.log"
  10. Найдите строку:
    CustomLog "logs/access.log" common
    Замените на:
    CustomLog "C:/apache/access.log" common
  11. Для работы SSI (включения на стороне сервера) следующие строки, находящийся в блоке <IfModule mime_module>, необходимо найти и раскомментировать:
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
  12. Добавьте ниже, в тот же блок <IfModule mime_module>, две строки:
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
  13. И, наконец, найдите и раскомментируйте строки:
    Include conf/extra/httpd-mpm.conf
    Include conf/extra/httpd-autoindex.conf
    Include conf/extra/httpd-vhosts.conf
    Include conf/extra/httpd-manual.conf
    Include conf/extra/httpd-default.conf
Сохраните изменения и закройте файл "httpd.conf"

Теперь откройте файл "C:\Apache2\conf\extra\httpd-vhosts.conf" и произведите в нем следующие изменения.

Существующие блоки примеров виртуальных хостов необходимо удалить, и вставить только нижеследующее:
NameVirtualHost *:80

<VirtualHost *:80>
   DocumentRoot "C:/apache/localhost/www"
   ServerName localhost
   ErrorLog "C:/apache/localhost/error.log"
   CustomLog "C:/apache/localhost/access.log" common
</VirtualHost>

Сохраните изменения и закройте файл "httpd-vhosts.conf"

Настройка конфигурационныйх файлов завершена, теперь необходимо установить сервис Apache2.2.

Установка сервиса Apache2.2 в картинках


Установка сервиса Apache Запускаем командную строку и вводим в ней "C:\Apache2\bin\httpd.exe -k install" После установки сервиса Apache Вот что мы должны увидеть при успешной установке сервиса Apache2.2. Если все прошло успешно, движемся дальше - устанавливаем ручной запуск сервиса Apache2.2 для чего проходим путь: "Start" ("Пуск") → "Control Panel" ("Панель управления") → "Administrative Tools" ("Администрирование") → "Services" ("Службы"), в открывшемся окне управления служб выбираем строку "Apache2.2" и делаем на ней двойной щелчок, после чего во вкладке "General" ("Общие") выбираем ручной запуск сервиса - "Startup type: Manual" ("Тип запуска: вручную"). Это необходимо сделать для того, чтобы лишние службы не загружали систему. Учитывая, что домашний компьютер используется не только для веб-разработок, но и для многих других нужд, ручной запуск и остановка, непостоянно используемых сервисов, является наиболее приемлемым.

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

В корне диска необходимо создать каталог "apache" - в нем будут лежать ваши виртуальные хосты (домены), глобальный файл журнала ошибок "error.log" (создается программой при первом запуске, автоматически), глобальный файл доступа "access.log" (создается автоматически). В каталоге "apache" создаем еще одну пустую папку - "localhost", в которой, в свою очередь, создаем папку "www", именно в последней и надо будет держать наше добро в виде локальных скриптов. Такая, казалось бы странная структура каталогов, продиктована схожей схемой построения каталогов в системах Unix, и призвана упростить в дальнейшем ее понимание и использование.

Пример создания виртуального хоста

При необходимости установки собственных виртуальных хостов сделайте следующее:

Откройте файл "httpd-vhosts.conf", и создайте в нём блок, примерно, следующего содержания:
<VirtualHost *:80>
   # Папка, в которой будет корень вашего хоста.
   DocumentRoot "C:/apache/test.ru/www"
   # Домен по которому вы сможете обращаться к виртуальному хосту.
   ServerName test.ru
   # Алиас (добавочное имя) домена.
   ServerAlias www.test.ru
   # Файл, в который будут записываться ошибки.
   ErrorLog "C:/apache/test.ru/error.log"
   # Файл журнала доступа к хосту.
   CustomLog "C:/apache/test.ru/access.log" common
</VirtualHost>

Затем в каталоге "apache", создайте папку "test.ru" (прямо так, с точкой), в которой, в свою очередь, создайте папку "www".

Следующий шаг создания виртуального хоста – это изменение файла C:\WINDOWS\system32\drivers\etc\hosts операционной системы. Откройте данный файл и добавьте в него две строки:
127.0.0.1 test.ru
127.0.0.1 www.test.ru

Теперь запустите сервер Apache выполнив в командной строке "C:\Apache2\bin\httpd.exe -k start", откройте браузер, введите в адресной строке "test.ru" или "www.test.ru" и вы окажетесь в своем виртуальном хосте. Только будьте внимательны, теперь вы сможете попасть на оригинальный сайт с именем виртуального хоста ("www.test.ru", если таковой существует), только закомментировав либо удалив строку: "127.0.0.1 www.test.ru", в вышеупомянутом файле "hosts".

Документация Apache, при запущенном сервере, доступна по адресу http://localhost/manual/

Остановить работу Apache можно выполнив в командной строке "C:\Apache2\bin\httpd.exe -k stop". При необходимости перезагрузить Apache, выполните в командной строке "C:\Apache2\bin\httpd.exe -k restart".

Установка и настройка веб-сервера Apache – завершена.

Создание пакетных файлов для запуска и остановки сервисов

Согласитесь, что вручную редактировать файл "hosts" при каждом запуске сервисов – это не удобно, поэтому для более удобного, одновременного запуска сервисов Apache, MySQL, и изменения файла "hosts" мы создадим два пакетных файла: на запуск и остановку, которые будут выполнять всю рутинную работу автоматически.

При использовании виртуальных хостов необходимо создать в директории C:\apache два файла: vhosts-off.txt – содержащий изначальное содержимое файла "hosts" и vhosts-on.txt – содержащий все виртуальные хосты. Обратите внимание, что при создании новых виртуальных хостов вам необходимо будет добавлять их в файл vhosts-on.txt, а не в C:\WINDOWS\system32\drivers\etc\hosts. Посмотрите на примеры ниже.

Файл vhosts-off.txt (может содержать одну единственную строку):
127.0.0.1 localhost

Пример файла vhosts-on.txt с виртуальными хостами www.test.ru и test.ru:

127.0.0.1 localhost
127.0.0.1 www.test.ru
127.0.0.1 test.ru

В той же директории C:\apache, создайте два пакетных файла: start-webserver.bat – для запуска сервисов и подмены файла "hosts", и stop-webserver.bat – для остановки сервисов и очистки файла "hosts".

Файл запуска start-webserver.bat:

@echo off
echo.
if not exist C:\apache\vhosts-on.txt goto no_vhosts
echo Create virtual hosts:
copy /v /y C:\apache\vhosts-on.txt C:\WINDOWS\system32\drivers\etc\hosts
echo.
:no_vhosts
NET start Apache2.2
NET start MySQL

Файл остановки stop-webserver.bat:

@echo off
echo.
if not exist C:\apache\vhosts-off.txt goto no_vhosts
echo Restore hosts file:
copy /v /y C:\apache\vhosts-off.txt C:\WINDOWS\system32\drivers\etc\hosts
echo.
:no_vhosts
NET stop Apache2.2
NET stop MySQL

В случае если вы не используете виртуальные хосты или хотите запустить сервисы без подмены файла "hosts", просто уберите из директории C:\apache файлы vhosts-on.txt и vhosts-off.txt.

Одновременно с сервисами удобно запускать программу Apache Monitor, отображающую в системном лотке состояние сервера Apache, для чего можно создать еще один пакетный файл "start-webserver-monitor.bat", содержание которого аналогично файлу "start-webserver.bat" с добавлением в самый конец следующей строки:

start "" "C:\Apache2\bin\ApacheMonitor.exe"

Теперь для запуска всего инструментария вам понадобится запустить файл "start-webserver-monitor.bat", или "start-webserver.bat", а для остановки "stop-webserver.bat". При желании вы можете переименовать эти файлы, переместить их в любое другое место из папки "C:\apache", либо создать на данные файлы ярлыки, например, на рабочий стол.




Установка и настройка Apache сервера

В этой статье расказано как установить и настроить Apache-сервер на стандартный домашний компьютер, работающий под управлением Windows, чтобы на нём можно было заняться разработкой и написанием CGI-программ. Выполнив все приведённые здесь этапы, вы сможете запускать и проверять на своем компьютере все программы, представленные на этом сайте в качестве примеров.

  1. Скачайте Web-сервер Apache
  2. Установите Web-сервер Apache
  3. Настройте файла конфигурации Apache mime.types
  4. Настройте файла httpd.conf
  5. Проверте Web-сервера
  6. Проверте выполнение CGI-программы

Сервер Apache вы можете загрузить с узла компании по адресу http://www.apache.org. Щелкните на ссылке с именем download и выберите самую повую версия сервера для платформы Win32. Имя файла будет скорее всего вроде apache_1_3_9_win32.exe.

После того как пакет установки загружен, вам следует установить программу. Сервер Apache использует стандартную процедуру установки, поэтому вам нужно лишь дважды щелкнуть на файле пакета установки, принять условия лицензии, указать папку для программы и выбрать тип установки.

Рекомендуем установить сервер так (шесть шагов):

  1. Определитесь с директорией, в которую Вы будете устанавливать Apache. Все дальнейшие рассуждения основаны на том, что Вы выбрали для этой цели такой каталог: f:usrlocalapache Если диска F: у Вас нет, или если Вы не хотите его захламлять, советуем сделать одно из трех:
    1. Создайте диск F: с помощью какой-нибудь программы для виртуальных разделов (например, с помощью встроенной в Windows 95/98 программы DriveSpace). Это самое лучшее решение, и с точки зрения экономии памяти, и с точки зрения быстродействия. Ведь что такое Web-сайт, как не набор очень небольших файлов? А DriveSpace как раз и оптимизирует работу с такими файлами.
    2. Сделайте виртуальный диск F:. Для этого создайте где-нибудь на любом диске директорию, которая в будущем будет являться корневой для диска F:. Предположим, Вы выбрали C:INTERNET. Далее, в начале файла c:autoexec.bat пропишите такую строку:

      и перезагрузите компьютер. У вас должен появиться виртуальный пустой диск F:.

      ВНИМАНИЕ: имеются сведения, что в Windows 95/98 есть ошибка, в результате которой иногда subst-пути «сами по себе» преобразуются в абсолютные. То есть, например, иногда в рассмотренном выше примере команды

      f:
      cd
      cd
      dir

      (а точнее, команда dir в своем заголовке) ошибочно выведут, что текущая директория C: (а не F:, как это должно быть). Указанная ошибка чаще всего проявляется в неработоспособности Perl-транслятора. Так что лично мы не рекомендуем Вам использовать subst. Вместо этого воспользуйтесь пунктом 1.

    3. Наконец, Вы можете всего этого не делать и поставить Apache на любой другой диск, только тогда Вам придется немного тяжелее при выполнении всех остальных действий. Нужно будет все указываемые пути заменять на Ваши собственные, а это крайне неприятно. Еще раз настоятельно рекомендуем воспользоваться диском F:.

    Рекомендуем все же разместить Apache в указанном в начале каталоге, так как он максимально соответствует каталогу для реального Web-сервера Интернета. Ведь чем ближе в плане конфигурации мы будем к такому серверу, тем лучше и эффективнее сможем работать.

  2. Запустите только что скачанный файл. В появившемся диалоге нажмите кнопку Yes, а затем — кнопку Next.
  3. Теперь нажмите Browse. Вручную задайте директорию для установки: f:usrlocalapache и нажмите кнопку OK.
  4. Выберите тип установки — Сustom и уберите флажок Source Code (если, конечно, не хотите посмотреть исходные тексты Apache). Этим Вы сэкономите себе 3 Мбайта.
  5. Нажмите Next и подождите, пока будут копироваться файлы Apache.
  6. На запрос о перезагрузке компьютера ответьте «Перезагрузить».

Поздравляем — Apache установлен! Теперь самое неприятное — его настройка.

  1. Откройте директорию f:usrlocalapacheconf. Откройте находящийся там файл mime.types.
  2. Найдите в нем такую строчку:

    Измените ее на

    text/html      html htm shtml shtm sht

    Следует заметить, что если Вы по каким-то причинам не хотите портить файл mime.types, то можно вместо этого прописать в файле httpd.conf (см. ниже) строки вида

    AddType text/html html htm shtml shtm sht

Внимание! Это — самый ответственный момент установки. Просим соблюдать инструкции БУКВАЛЬНО.

  1. Откройте директорию f:usrlocalapacheconf Откройте находящийся там файл httpd.conf. Это — единственный файл, который Вам осталось настроить. Вам предстоит найти и изменить в нем некоторые строки, а именно те, о которых упоминается далее. Во избежание недоразумений не трогайте все остальное. Следует заметить, что в нем каждый параметр сопровождается несколькими строками комментариев, разобраться в которых с первого раза довольно тяжело. Поэтому не обращайте на них внимание.
  2. В поле ServerAdmin укажите Ваш E-mail адрес, который будет показываться в сообщениях об ошибке сервера. Например:
  3. В поле ServerName напишите любое слово — на работе это не сказывается, например:

    Только не забудьте раскомментировать поле ServerName, то есть убрать символ «#» перед этим параметром (по умолчанию он закомментирован)!

  4. В поле DocumentRoot укажите ту директорию, в которой будут храниться Ваши html-файлы, например:

    Разумеется, можете указать и любую другую директорию, если хотите. В любом случае, не забудьте ее создать, лучше сделайте это прямо сейчас!

  5. Найдите блок, начинающийся строкой <Directory /> и заканчивающийся </Directory> (вообще, такие блоки обозначают установки для заданной директории и всех ее поддиректорий). Его нужно изменить на:
    <Directory />
      Options Indexes Includes
      AllowOverride All
    </Directory>

    Таким образом, в этом блоке будут храниться установки для всех директорий по умолчанию (т.к. это — корневая директория).

  6. Найдите аналогичный блок, начинающийся <Directory "f:/usr/local/apache/htdocs"> и заканчивающийся </Directory>. Там будет много комментариев, не обращайте на них внимание. Этот блок следует заменить на:
    <Directory "f:/www">
      Options Indexes Includes
      AllowOverride All
      Order allow,deny
      Allow from all
    </Directory>

    Это — установки для директории с Вашими html-документами. Если хотите, можете установить другую директорию, главное, чтобы она совпадала с той, которая прописана в параметре DocumentRoot

  7. Идем дальше. Установите UserDir, например так:

    Это будет директория, в которой хранились бы домашние страницы пользователей, если бы это был настоящий Web-сервер, а также корневые каталоги виртуальных хостов (см. ниже). Не забудьте также создать этот каталог.

  8. Установите DirectoryIndex так:
    DirectoryIndex index.htm index.html

    Это — так называемые файлы индекса, которые автоматически выдаются сервером при обращении к какой-либо директории, если не указано имя html-документа. В принципе, можно добавить сюда и другие имена, например, index.phtml, если Вы будите работать с PHP и т.д.

  9. Найдите и пропишите такой параметр:
    ScriptAlias /cgi-bin/ "f:/cgi-bin/"

    Да, именно так, с двумя слэшами. Это будет та директория, в которой должны храниться Ваши CGI-скрипты. Если хотите, можете задать другое имя, например:

    ScriptAlias /mycgi/ "f:/mycgidir/"

    Подобный параметр говорит Apache о том, что, если будет указан путь вида http://localhost/cgi-bin, то на самом деле следует обратиться к директории f:/cgi-bin.

  10. Теперь следует найти и настроить блок параметров, начинающийся с <Directory "f:/cgi-bin"> и заканчивающийся </Directory>. Это — установки для Вашей CGI-директории (если Вы установили для нее другое имя на предыдущем шаге, соответственно модифицируйте путь). Там должно быть:
    <Directory "f:/cgi-bin">
      AllowOverride All
      Options ExecCGI
    </Directory>
  11. Настройте следующий параметр:
    AddHandler cgi-script .bat .exe

    Это говорит Apache о том, что файлы с расширением .exe и .bat нужно рассматривать как CGI-скрипты.

  12. И последнее — установите:
    AddHandler server-parsed .shtml .shtm .sht

    Или, если Вы хотите, чтобы и обычные файлы html обрабатывались SSI, напишите так:

    AddHandler server-parsed .shtml .shtm .sht .html .htm

Поздравляем — Вы настроили свой Apache, и он должен уже работать! Для запуска сервера нажмите Пуск->Программы->Apache Web Server->Start Apache as console app, при этом появится окно, очень похожее на Сеанс MS-DOS, и ничего больше не произойдет. Не закрывайте его и не трогайте до конца работы с Apache.

Несколько слов о том, как можно упростить запуск и завершение сервера. В Windows можно назначить любому ярлыку функциональную комбинацию клавиш, нажав которые, Вы запустите этот ярлык. Так что щелкните правой кнопкой на панели задач, в контекстном меню выберите Свойства, затем Настройка меню и кнопку Дополнительно. В открывшемся Проводнике назначьте ярлыку Start Apache as console app комбинацию Ctrl+Alt+A, а ярлыку Shutdown Apache as console app — Ctrl+Alt+S

  • Проверка html: в директории f:/www с html-документами Apache создайте файл index.html. Теперь запустите браузер и наберите:
    http://localhost/index.html

    или просто

    Загрузится Ваш файл.

  • Проверка CGI: в директории f:/cgi-bin для CGI-скриптов создайте файл test.bat с таким содержанием:
    @echo off
    echo Content-type: text/html
    echo.
    echo.
    dir

    Теперь в браузере наберите:

    http://localhost/cgi-bin/test.bat

    В окне отобразится результат команды DOS dir. (Хотелось бы отметить, что указанный тест работает не на всех версиях Windows: иногда вместо того, чтобы выполнить файл test.bat, Apache выводит в браузер его содержимое. С чем это связано — не совсем ясно, однако, кажется, можно избавиться от указанной ошибки путем манипулирования с Реестром. Если у Вас test.bat не запускается, не расстраивайтесь: вряд ли Вы когда-нибудь будете писать скрипты в виде bat-файлов, тем более, что это несовместимо с Unix.)

  • Проверка SSI: аналогична проверке html. Используйте, например, директиву
    <!--#include virtual="/cgi-bin/test.bat"-->

Если bat-файлы Ваш Apache запускать не хочет (см. выше), то дождитесь установки Perl или PHP.

Если вы получили страницу с надпиьсю о правильной работе, вам нужно убедиться что сервер может выполнять CGI-программы. Для этого вы должны написать простую программу, поместить ее в правильный каталог и проверить, как она выполняется Web-сервером.

Ниже вы видите текст простой проверочной программы на языке Perl.

#!/usr/local/bin/perl
use CGI;
$query = new CGI;
print $query->header;

print "<html><head><title>Проверка</title></head>n";
print "<body>Проверка прошла успешно.</body></html>";

Скопируйте текст этой программы в Блокнот, сохраните его в файле test.pl и поместите этот файл в каталог cgi-bin корневого каталога вашего сервера. Первую строку в этой программе нужно изменить так, чтобы она отражала действительное положение интерпритатора Perl на вашем компьютере.

Примечание: Первая строка важна при работе под управлением UNIX, так как именно в ней указывается, какая программа должна обрабатывать этот текст. Версия Apache для Windows тоже придерживается этого соглашения.

Теперь можете проверить выполнение этой программы, набрав в адресной строке броузера следующее:

http://localhost/cgi-bin/test.pl

Если все работает правильно, вы должны увидеть в окне броузера страницу, HTML-код которой указан в операторах print. Результат выполнения этой программы вы можете увидеть кликнув тут. Русский текст может быть отображен броузером в неверной кодировке. Если это случилось, то в открывшемся окне вручную выставте кодировку Кирилица (Windows). Как устанавливать кодировку HTML-страницы возвращаемой CGI-программой, чтобы броузер ее всегда верно отображал, будет рассказано позже.

Эта программа проверяет правильность установки компонентов для CGI-программирования. В частности, при выполнении этой программы проверяется следующее.

  • Web-сервер настроен и сконфигурирован правильно и может выполнять CGI-программы.
  • Программа помещена в правильный каталог, сервер распознает файлы в этом каталоге как программы.
  • Интерпритатор Perl установлен и работает правильно; путь к программе интерпритатора правильно указан в первой строке.
  • Библиотеки, входящие в комплект поставки Perl, установлены правильно, в частности CGI.pm.

При написании статьи использовались материала сайта http://www.dklab.ru.

Установка сервера Apache на Windows на русском


Как установить локальный сервер Apache 2.4 на компьютер с Windows?

Использование Apache HTTP Server в Microsoft Windows

Этот документ объясняет, как установить, настроить и запустить Apache 2.4 под Microsoft Windows. Если у вас есть вопросы после просмотра документации (и любых журналов событий и ошибок), вам следует обратиться к списку рассылки, поддерживаемому равноправными пользователями.

В этом документе предполагается, что вы устанавливаете бинарный дистрибутив Apache. Если вы хотите скомпилировать Apache самостоятельно (возможно, для помощи в разработке или отслеживании ошибок), см. Компиляция Apache для Microsoft Windows.

Требования к операционной системе

Основной платформой Windows для запуска Apache 2.4 является Windows 2000 или более поздняя версия. Всегда получайте и устанавливайте текущий пакет обновления, чтобы избежать ошибок операционной системы.

Версии Apache HTTP Server более поздние, чем 2.2, не будут работать ни в одной операционной системе, предшествующей Windows 2000.

Загрузка Apache для Windows

Сам по себе Apache HTTP Server Project не предоставляет бинарные выпуски программного обеспечения, только исходный код. Отдельные коммиттеры могут предоставлять бинарные пакеты для удобства, но это не релиз, подлежащий доставке.

Если вы не можете скомпилировать Apache HTTP Server самостоятельно, вы можете получить бинарный пакет из многочисленных бинарных дистрибутивов, доступных в Интернете.

Популярные варианты развертывания Apache httpd (и, необязательно, PHP и MySQL) в Microsoft Windows включают в себя:

Настройка Apache для Windows

Apache настраивается с помощью файлов в подкаталоге conf. Это те же файлы, которые используются для настройки версии Unix, но есть несколько разных директив для Apache в Windows. Смотрите указатель директив для всех доступных директив.

Основные отличия в Apache для Windows:

  • Поскольку Apache для Windows является многопоточным, он не использует отдельный процесс для каждого запроса, как Apache в Unix. Вместо этого обычно работают только два процесса Apache: родительский процесс и дочерний процесс, который обрабатывает запросы. Внутри дочернего процесса каждый запрос обрабатывается отдельным потоком.
  • Директивы управления процессом также различны:

    MaxConnectionsPerChild: Как и директива Unix, она контролирует, сколько соединений будет обслуживать один дочерний процесс перед выходом. Однако, в отличие от Unix, процесс замены не доступен мгновенно. Используйте значение по умолчанию MaxConnectionsPerChild 0, если не указано, как изменить поведение для устранения утечки памяти в сторонних модулях или внутрипроцессных приложениях.

    Предупреждение. Файл конфигурации сервера перечитывается при запуске нового дочернего процесса. Если вы изменили httpd.conf, новый дочерний элемент может не запуститься или вы можете получить неожиданные результаты.

    ThreadsPerChild: эта директива является новой. Он сообщает серверу, сколько потоков он должен использовать. Это максимальное количество соединений, которые сервер может обработать за один раз, поэтому убедитесь, что это число достаточно высоко для вашего сайта, если вы получаете много посещений. Рекомендуемое значение по умолчанию - ThreadsPerChild 150, но его необходимо настроить, чтобы отразить наибольшее ожидаемое количество одновременных соединений для принятия.

  • Директивы, которые принимают имена файлов в качестве аргументов, должны использовать имена файлов Windows вместо Unix. Однако, поскольку Apache может интерпретировать обратный слеш как последовательность «escape-символов», вы должны постоянно использовать прямой слеш в именах путей, а не обратный слеш.
  • Хотя в Windows имена файлов обычно не чувствительны к регистру, URL-адреса по-прежнему обрабатываются внутренне как регистрозависимые, прежде чем они сопоставляются с файловой системой. Например, все директивы <Location>, Alias и ProxyPass используют регистрозависимые аргументы. По этой причине особенно важно использовать директиву <Directory> при попытке ограничить доступ к контенту в файловой системе, поскольку эта директива применяется к любому контенту в каталоге, независимо от того, как к нему осуществляется доступ. Если вы хотите убедиться, что в URL используются только строчные буквы, вы можете использовать что-то вроде:
  • RewriteEngine On
    RewriteMap lowercase int:tolower
    RewriteCond "%{REQUEST_URI}" "[A-Z]"
    RewriteRule "(.*)" "${lowercase:$1}" [R,L]

  • При работе Apache требуется доступ на запись только в каталог журналов и любое настроенное дерево каталогов кэша. Из-за проблемы нечувствительных к регистру и коротких имен в формате 8.3 Apache должен проверить все указанные пути. Это означает, что каждый каталог, который оценивает Apache, от корня диска до листа каталога, должен иметь разрешения на чтение и просмотр каталога. Если Apache2.4 установлен в C:\Program Files, то для Apache должны быть видны корневой каталог, Program Files и Apache2.4.
  • Apache для Windows содержит возможность загружать модули во время выполнения, без перекомпиляции сервера. Если Apache скомпилирован нормально, он установит несколько дополнительных модулей в каталог \Apache2.4\modules. Чтобы активировать те или иные модули, необходимо использовать директиву LoadModule. Например, чтобы активировать модуль статуса, используйте следующее (в дополнение к директивам по активации статуса в access.conf):
  • LoadModule status_module "modules/mod_status.so"

    Информация о создании загружаемых модулей также доступна.

  • Apache также может загружать расширения ISAPI (Интерфейс прикладного программирования интернет-сервера), например, используемые Microsoft IIS и другими серверами Windows. Более подробная информация доступна. Обратите внимание, что Apache не может загружать фильтры ISAPI, и обработчики ISAPI с некоторыми расширениями функций Microsoft не будут работать.
  • При запуске сценариев CGI метод, используемый Apache для поиска интерпретатора сценария, настраивается с помощью директивы ScriptInterpreterSource.
  • Поскольку в Windows часто сложно управлять файлами с такими именами, как .htaccess, может оказаться полезным изменить имя этого файла конфигурации для каждого каталога с помощью директивы AccessFilename.
  • Любые ошибки во время запуска Apache регистрируются в журнале событий Windows при работе в Windows NT. Этот механизм действует как резервная копия для тех ситуаций, когда Apache еще не готов использовать файл error.log. Вы можете просмотреть журнал событий приложений Windows с помощью средства просмотра событий, например, Пуск - Настройки - Панель управления - Администрирование - Просмотр событий.

Запуск Apache как сервиса

Apache поставляется с утилитой, которая называется Apache Service Monitor. С его помощью вы можете видеть и управлять состоянием всех установленных сервисов Apache на любом компьютере в вашей сети. Чтобы иметь возможность управлять службой Apache с помощью монитора, сначала необходимо установить службу (либо автоматически через установку, либо вручную).

Вы можете установить Apache в качестве службы Windows NT следующим образом из командной строки в подкаталоге Apache bin:

httpd.exe -k install

Если вам нужно указать имя службы, которую вы хотите установить, используйте следующую команду. Вы должны сделать это, если у вас есть несколько различных сервисных установок Apache на вашем компьютере. Если вы указываете имя во время установки, вы должны также указать его во время любой другой -k операции

httpd.exe -k install -n "MyServiceName"

Если вам нужно иметь конкретно названные файлы конфигурации для разных сервисов, вы должны использовать это:

httpd.exe -k install -n "MyServiceName" -f "c:\files\my.conf"

Если вы используете первую команду без каких-либо специальных параметров, кроме -k install, служба будет называться Apache2.4, и предполагается, что конфигурация будет conf\ httpd.conf.

Удаление службы Apache легко. Просто используйте:

httpd.exe -k uninstall

Определенную службу Apache, которую нужно удалить, можно указать с помощью:

httpd.exe -k uninstall -n "MyServiceName"

Обычный запуск, перезапуск и завершение работы службы Apache обычно выполняется через Apache Service Monitor, с помощью таких команд, как NET START Apache2.4 и NET STOP Apache2.4, или с помощью обычного управления службами Windows. Прежде чем запускать Apache как службу любым способом, необходимо проверить файл конфигурации службы, используя:

httpd.exe -n "MyServiceName" -t

Вы также можете управлять сервисом Apache с помощью переключателей командной строки. Для запуска установленного сервиса Apache необходимо использовать это:

httpd.exe -k start -n "MyServiceName"

Чтобы остановить службу Apache через ключи командной строки, используйте это:

httpd.exe -k stop -n "MyServiceName"

или

httpd.exe -k shutdown -n "MyServiceName"

Вы также можете перезапустить работающую службу и заставить ее перечитать файл конфигурации, используя:

httpd.exe -k restart -n "MyServiceName"

По умолчанию все службы Apache зарегистрированы для запуска в качестве системного пользователя (учетная запись LocalSystem). Учетная запись LocalSystem не имеет прав доступа к вашей сети через какой-либо механизм, защищенный Windows, включая файловую систему, именованные каналы, DCOM или безопасный RPC. Однако он имеет широкие привилегии на локальном уровне.

Никогда не предоставляйте никаких сетевых привилегий учетной записи LocalSystem! Если вам нужен Apache для доступа к сетевым ресурсам, создайте отдельную учетную запись для Apache, как указано ниже.

Пользователям рекомендуется создать отдельную учетную запись для запуска служб Apache. Если вам необходимо получить доступ к сетевым ресурсам через Apache, это необходимо.

  1. Создайте обычную учетную запись пользователя домена и обязательно запомните ее пароль.
  2. Предоставьте только что созданному пользователю привилегию входить в систему как сервис и действовать как часть операционной системы. В Windows NT 4.0 эти привилегии предоставляются через Диспетчер пользователей для доменов, но в Windows 2000 и XP вы, вероятно, захотите использовать групповую политику для распространения этих параметров. Вы также можете установить их вручную с помощью оснастки MMC Local Security Policy.
  3. Убедитесь, что созданная учетная запись является членом группы «Пользователи».
  4. Предоставьте учетной записи права на чтение и выполнение (RX) всем папкам документов и сценариев (например, htdocs и cgi-bin).
  5. Предоставьте права на изменение учетной записи (RWXD) в директории logs Apache.
  6. Предоставьте учетной записи права на чтение и выполнение (RX) двоичного исполняемого файла httpd.exe.

Обычно рекомендуется предоставлять пользователю доступ к службе Apache в режиме чтения и выполнения (RX) для всего каталога Apache2.4, за исключением подкаталога logs, где пользователь должен иметь права как минимум на изменение (RWXD).

Если вы разрешаете учетной записи входить в систему как пользователь и как служба, то вы можете войти в систему с этой учетной записью и проверить, имеет ли учетная запись привилегии для выполнения сценариев, чтения веб-страниц и что вы можете запустить Apache в окне консоли. Если это работает, и вы выполнили шаги, описанные выше, Apache должен работать как сервис без проблем.

Код ошибки 2186 является хорошим признаком того, что вам необходимо просмотреть конфигурацию "Вход в систему" для службы, поскольку Apache не может получить доступ к требуемому сетевому ресурсу. Также обратите пристальное внимание на привилегии пользователя, настроенного для запуска Apache.

При запуске Apache как службы вы можете получить сообщение об ошибке из диспетчера управления службами Windows. Например, если вы попытаетесь запустить Apache с помощью апплета Services на панели управления Windows, вы можете получить следующее сообщение:

Could not start the Apache2.4 service on \\COMPUTER
Error 1067; The process terminated unexpectedly.

(Не удалось запустить службу Apache2.4 на \\ COMPUTER
Ошибка 1067; Процесс неожиданно завершился.)

Вы получите эту общую ошибку, если возникнут проблемы с запуском службы Apache. Чтобы увидеть, что действительно вызывает проблему, вы должны следовать инструкциям по запуску Apache для Windows из командной строки.

Если у вас возникли проблемы со службой, рекомендуется выполнить приведенные ниже инструкции, чтобы попытаться запустить httpd.exe из окна консоли, и устранить ошибки, прежде чем пытаться запустить его как службу снова.

Запуск Apache как консольного приложения

Запуск Apache как службы обычно является рекомендуемым способом его использования, но иногда проще работать из командной строки, особенно во время начальной настройки и тестирования.

Чтобы запустить Apache из командной строки как консольное приложение, используйте следующую команду:

httpd.exe

Apache выполнится и будет работать до тех пор, пока не будет остановлен нажатием Control-C.

Вы также можете запустить Apache с помощью ярлыка "Запуск Apache" в консоли, расположенной в меню Пуск -> Программы -> Apache HTTP Server 2.4.xx -> Управление сервером Apache во время установки. Это откроет окно консоли и запустит Apache внутри него. Если у вас не установлен Apache в качестве службы, окно будет отображаться до тех пор, пока вы не остановите Apache, нажав Control-C в окне консоли, в котором работает Apache. Сервер закроется через несколько секунд. Однако, если у вас установлен Apache в качестве службы, ярлык запускает службу. Если служба Apache уже запущена, ярлык ничего не делает.

Если Apache работает как служба, вы можете остановить его, открыв другое окно консоли и введя:

httpd.exe -k shutdown

Запуску в качестве службы следует отдавать предпочтение перед запуском в окне консоли, потому что это позволяет Apache завершать любые текущие операции и корректно очищаться.

Но если сервер работает в окне консоли, вы можете остановить его, только нажав Control-C в том же окне.

Вы также можете Apache перезапустить. Это заставляет его перечитать файл конфигурации. Любые выполняемые операции разрешено выполнять без перерыва. Чтобы перезапустить Apache, нажмите Control-Break в окне консоли, которое вы использовали для запуска Apache, или введите

httpd.exe -k restart

если сервер работает как сервис.

Примечание для людей, знакомых с версией Apache для Unix: эти команды предоставляют Windows-эквивалент для kill -TERM pid и kill -USR1 pid. Используемая опция командной строки -k была выбрана в качестве напоминания о команде kill, используемой в Unix.

Если окно консоли Apache закрывается сразу или неожиданно после запуска, откройте командную строку в меню Пуск -> Программы. Перейдите в папку, в которую вы установили Apache, введите команду httpd.exe и прочитайте сообщение об ошибке. Затем перейдите в папку logs и просмотрите файл error.log на предмет ошибок конфигурации. Предполагая, что httpd установлен в C:\Program Files\Apache Software Foundation\Apache2.4\, вы можете сделать следующее:

c:
cd "\Program Files\Apache Software Foundation\Apache2.4\bin"
httpd.exe

Затем дождитесь остановки Apache или нажмите Control-C. Затем введите следующее:

cd ..\logs
more < error.log

При работе с Apache важно знать, как он найдет файл конфигурации. Вы можете указать файл конфигурации в командной строке двумя способами:

  • -f указывает абсолютный или относительный путь к конкретному файлу конфигурации:
  • httpd.exe -f "c:\my server files\anotherconfig.conf"

    или

    httpd.exe -f files\anotherconfig.conf

  • -n указывает установленную службу Apache, файл конфигурации которой будет использоваться:
  • httpd.exe -n "MyServiceName"

В обоих этих случаях правильный ServerRoot должен быть установлен в файле конфигурации.

Если вы не укажете файл конфигурации с помощью -f или -n, Apache будет использовать имя файла, скомпилированное на сервере, например conf\httpd.conf. Этот встроенный путь относится к каталогу установки. Вы можете проверить имя скомпилированного файла по значению, помеченному как SERVER_CONFIG_FILE, при вызове Apache с ключом -V, например так:

httpd.exe -V

Затем Apache попытается определить свой ServerRoot, выполнив следующие действия в следующем порядке:

  1. Директива ServerRoot через ключ командной строки -C.
  2. Ключ -d в командной строке.
  3. Текущий рабочий каталог.
  4. Запись реестра, которая была создана, если вы выполнили бинарную установку.
  5. Корень сервера скомпилирован в сервер. По умолчанию это /apache, вы можете проверить это с помощью httpd.exe -V и найти значение, помеченное как HTTPD_ROOT.

Если вы не выполняли бинарную установку, Apache в некоторых случаях будет жаловаться на отсутствующий раздел реестра. Это предупреждение можно игнорировать, если сервер в противном случае смог найти свой файл конфигурации.

Значением этого ключа является каталог ServerRoot, который содержит подкаталог conf. Когда Apache запускается, он читает файл httpd.conf из этого каталога. Если этот файл содержит директиву ServerRoot, которая содержит каталог, отличный от каталога, полученного из ключа реестра выше, Apache забудет ключ реестра и использует каталог из файла конфигурации. Если вы копируете каталог Apache или файлы конфигурации в новое местоположение, очень важно обновить директиву ServerRoot в файле httpd.conf, чтобы отразить новое местоположение.

Тестирование установки

После запуска Apache (в окне консоли или в качестве службы) он будет прослушивать порт 80 (если только вы не изменили директиву Listen в файлах конфигурации или не установили Apache только для текущего пользователя). Чтобы подключиться к серверу и получить доступ к странице по умолчанию, запустите браузер и введите этот URL:

http://localhost/

Apache должен ответить с приветственной страницей, и вы должны увидеть "It Works!". Если ничего не происходит или вы получаете сообщение об ошибке, посмотрите файл error.log в подкаталоге logs. Если ваш хост не подключен к сети или у вас есть серьезные проблемы с конфигурацией DNS (службы доменных имен), вам, возможно, придется использовать этот URL:

http://127.0.0.1/

Если вы используете Apache на альтернативном порту, вам нужно явно указать это в URL:

http://127.0.0.1:8080/

Как только ваша базовая установка заработает, вы должны правильно ее настроить, отредактировав файлы в подкаталоге conf. Опять же, если вы измените конфигурацию службы Windows NT для Apache, сначала попытайтесь запустить ее из командной строки, чтобы убедиться, что служба запускается без ошибок.

Поскольку Apache не может использовать тот же порт совместно с другим приложением TCP/IP, вам может потребоваться остановить, удалить или перенастроить некоторые другие службы перед запуском Apache. Эти конфликтующие службы включают в себя другие WWW-серверы, некоторые реализации брандмауэра и даже некоторые клиентские приложения (такие как Skype), которые будут использовать порт 80, чтобы попытаться обойти проблемы брандмауэра.

Настройка доступа к сетевым ресурсам

Доступ к файлам по сети можно указать с помощью двух механизмов, предоставляемых Windows:

Mapped drive letters
           e.g., Alias "/images/" "Z:/"
UNC paths
           e.g., Alias "/images/" "//imagehost/www/images/"

Сопоставленные буквы дисков позволяют администратору поддерживать сопоставление с конкретным компьютером и путем вне конфигурации Apache httpd. Однако эти сопоставления связаны только с интерактивными сеансами и не доступны напрямую для Apache httpd, когда он запускается как служба. Используйте только пути UNC для сетевых ресурсов в httpd.conf, чтобы к ресурсам можно было обращаться последовательно независимо от того, как запущен Apache httpd. (Тайные и подверженные ошибкам процедуры могут обойти ограничение на сопоставленные буквы дисков, но это не рекомендуется.)

Пример DocumentRoot с UNC-путем
DocumentRoot "//dochost/www/html/"

Пример DocumentRoot с IP-адресом в UNC-пути
DocumentRoot "//192.168.1.50/docs/"

Пример Alias и соответствующий каталог с UNC-путем
Alias "/images/" "//imagehost/www/images/"
<Directory "//imagehost/www/images/">
#...
</Directory>

При запуске Apache httpd в качестве службы необходимо создать отдельную учетную запись для доступа к сетевым ресурсам, как описано выше.

Настройка Windows

  • Если в экземпляре операционной системы используется более нескольких десятков конвейерных регистраторов, часто необходимо увеличить "desktop heap". Для получения более подробной информации обратитесь к документации по журналу.


Пожалуйста, включите JavaScript для просмотра комментариев, предоставленных Disqus.

Производительность Apache и Nginx: методы оптимизации

Apache был выпущен в 1995 году, и, согласно Википедии, «сыграл ключевую роль в развитии Всемирной паутины». На сегодняшний день это все еще наиболее часто используемое программное обеспечение для работы серверов. Но наблюдается тенденция снижения доли рынка Apache и роста Nginx.

Nginx был выпущен в 2004 году. Сначала он использовался в качестве дополнения к Apache. Но его популярность неуклонно растет.

Apache существует уже давно, и для него доступен большой набор модулей. Известно, что управление серверами Apache удобно для пользователя. Динамическая загрузка модулей позволяет компилировать и добавлять различные модули в стек Apache без перекомпиляции двоичного файла главного сервера.

Подобная гибкость еще не доступна для Nginx. Из руководства по настройке Nginx для HTTP/2 становится ясно, что его модули настраиваются во время сборки.

Еще одна особенность, которая обеспечила Apache доминирование на рынке веб-серверов, это файл .htaccess. Он позволяет контролировать конфигурацию сервера на уровне каталогов. Каждый каталог на сервере, обслуживаемом Apache, может иметь свой собственный файл .htaccess.

Nginx не только не имеет эквивалентного решения, но и препятствует его внедрению из-за снижения производительности.

Доли рынка для различных серверов в 1995–2005 гг.

LiteSpeed — это один из претендентов, который можно сравнить с Apache. Но он лишен проблем с производительностью.

Как и Apache он поддерживает .htaccess, mod_security и mod_rewrite. LiteSpeed был задуман как замена Apache. Он работает с cPanel и Plesk, с 2015 года поддерживает HTTP/2.

Это делает LiteSpeed серьезным конкурентом, ориентированным на хостинг-провайдеров, уделяющих внимание производительности. Но он также может использоваться для небольших серверов или сайтов.

Какое бы из этих решений мы ни выбрали, наличие достаточного объема ОЗУ имеет большое значение. Когда процесс веб-сервера не имеет достаточного объема оперативной памяти, он начинает использовать файл подкачку. Он подразумевает использование жесткого диска или SSD для расширения оперативной памяти. В результате увеличивается время ожидания при каждом обращении к этой памяти.

Htop является одним из эффективных способов мониторинга текущей производительности стека серверов.

Другие инструменты мониторинга: New Relic, Netdata. Последнее решение может отправлять предупреждения для любого приложения или системного процесса по электронной почте, через Slack, pushbullet, Telegram, Twilio и т. д.

Monit — еще один инструмент с открытым исходным кодом, который позволяет контролировать систему. В нем можно настроить отправку оповещений, перезапуск определенных процессов или перезагрузку системы при выполнении заданных условий.

AB (Apache Benchmark) — простой инструмент тестирования нагрузки от Apache Foundation. Еще одна программа для тестирования — Siege. Также доступен инструмент на основе Python — Locust.

После установки Locust нужно будет создать файл locust в каталоге, из которого вы запускаете приложение:

from locust import HttpLocust, TaskSet, task

class UserBehavior(TaskSet):
    @task(1)
    def index(self):
        self.client.get("/")

    @task(2)
    def shop(self):
        self.client.get("/?page_id=5")

    @task(3)
    def page(self):
        self.client.get("/?page_id=2")

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 300
    max_wait = 3000

Затем запускаем инструмент из командной строки:

locust --host=https://my-website.com

Применение перечисленных выше средств создает эффект DDoS-атаки, поэтому рекомендуется ограничить тестирование собственными сайтами.

Вначале своего существования Apache создавал новый процесс для каждого входящего TCP-соединения и ответа на него. Если появлялись другие соединения, создавались другие рабочие процессы для их обработки.

Чтобы снизить затраты ресурсов, разработчики Apache создали режим prefork с заранее заданным числом процессов. Но встроенные динамические языковые интерпретаторы в каждом процессе все равно потребляли много ресурсов, Поэтому сбои в работе серверов Apache с настройками  по умолчанию стали распространенным явлением.

Эта модель известна как mpm_prefork_module . Данный режим требует небольшой настройки. При этом значение, задаваемое директивой MaxRequestWorkers, должно быть достаточно большим, чтобы обрабатывать столько одновременных запросов, сколько вы ожидаете получить. Но достаточно малым, чтобы обеспечить необходимый объем физической памяти для всех процессов.

Тест Locust, который показывает порождение огромного числа процессов Apache для обработки входящего трафика.

Этот режим является основной причиной плохой репутации Apache. Его использование может привести к неэффективному распределению ресурсов.

Версия Apache 2 реализовала еще два MPM, которые пытались решить проблемы, связанные с режимом prefork. Это модуль worker (mpm_worker_module) и модуль событий.

Модуль worker реализует гибридный режим работы, основанный на потоке процессов. Согласно официальному сайту Apache:

Родительский процесс управления отвечает за запуск дочерних процессов. Каждый из них создает фиксированное число потоков, указанное в директиве ThreadsPerChild. А также поток, который прослушивает соединения и передает их потоку сервера для обработки, когда они поступают.

Этот режим использует ресурсы более эффективно.

В версии Apache 2.4 появился модуль событий. Он добавляет отдельный поток прослушивателя, который управляет бездействующими  соединениями после завершения HTTP-запроса. Это неблокирующий асинхронный режим, потребляющий меньший объем памяти.

Мы загрузили тестовую установку WooCommerce с 1200 записями на виртуальном сервере и протестировали ее на Apache 2.4 со стандартным режимом, prefork и mod_php.

Сначала мы протестировали его в libapache2-mod-php7 и mpm_prefork_module на https://tools.pingdom.com:

Затем мы провели тестирование MPM модуля событий. Нам нужно было добавить 

multiverse в /etc/apt/sources.list
:
deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu xenial partner

После этого мы выполнили 

и установили 
libapache2-mod-fastcgiphp-fpm
:
sudo apt-get install libapache2-mod-fastcgi php7.0-fpm

Поскольку php-fpm — это служба, отдельная от Apache, требуется выполнить ее перезапуск:

sudo service start php7.0-fpm

Затем мы отключили модуль prefork, включили режим событий и proxy_fcgi:

sudo a2dismod php7.0 mpm_prefork
sudo a2enmod mpm_event proxy_fcgi

После чего добавили следующий фрагмент кода к виртуальному хосту Apache:

&lt;filesmatch ".php$"&gt;
    SetHandler "proxy:fcgi://127.0.0.1:9000/"
&lt;/filesmatch&gt;

Указанный порт должен соответствовать конфигурации php-fpm в 

/etc/php/7.0/fpm/pool.d/www.conf
. Более подробно о настройке php-fpm можно узнать здесь.

Затем мы настроили конфигурацию

mpm_event /etc/apache2/mods-available/mpm_event.conf
. Подробнее о каждой директиве для сайта на Apache и

Директива MaxRequestWorkers устанавливает ограничение на количество одновременных запросов. Значение, не равное нулю, предотвращает возможную утечку памяти.

<ifmodule mpm_event_module>
        StartServers              1
        MinSpareThreads          30
        MaxSpareThreads          75
        ThreadLimit              64
        ThreadsPerChild          30
        MaxRequestWorkers        80
        MaxConnectionsPerChild   80
</ifmodule>

Затем мы перезапустили сервер с помощью 

sudo service apache2 restart
. Тестирование на Pingdom показало, что время загрузки страницы сократилось вдвое:

Отключение .htaccess: Этот файл позволяет создать конфигурацию для каждого отдельного каталога в корне сервера без перезагрузки. Таким образом, обход всех каталогов, поиск файлов .htaccess при каждом запросе влечет за собой снижение производительности.

Выдержка из документации Apache:

Файлы 

следует использовать только в том случае, если у вас нет доступа к основному файлу конфигурации сервера. Любые настройки конфигурации , могут быть также выполнены в разделе файла конфигурации основного сервера.

Решение заключается в том, чтобы отключить этот файл в 

/etc/apache2/apache2.conf
:

Если нужно использовать .htaccess для конкретных каталогов, можно включить его в разделы виртуального хоста:

Дополнительные советы:

  • Управляйте кешем браузера с помощью mod_expires— устанавливая заголовки expires.
  • Оставьте HostNameLookups выключенным — ,это значение, используемое по умолчанию.
  • Apache2buddy— скрипт, который можно запустить и получить советы по настройке системы:
    curl -sL https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl | perl

Это сервер, работающий на основе событий. Переход на Nginx часто является решением многих проблем с производительностью сайта или сервера.

Более подробное визуальное пояснение архитектуры Nginx можно найти здесь.

Nginx рекомендует привязывать количество потоков workers к количеству ядер процессора, установив в 

для 
worker_processes значение auto
(по умолчанию используется значение 1). устанавливает количество соединений, которые может обработать каждый процесс . По умолчанию — 512, но это значение можно увеличить.

Keepalive-соединения также влияет на производительность.

Согласно официальному сайту Nginx:

HTTP keepalive-соединения — это необходимая функция производительности, которая снижает задержку и позволяет быстрее загружать веб-страницы.

Установление новых TCP-соединений может быть ресурсоемким. Протокол HTTP/2 частично решает эту проблему благодаря функциям мультиплексирования. Повторное использование существующего соединения может сократить время обработки запроса.

Workers Nginx могут обрабатывать тысячи входящих соединений одновременно. Если Nginx применяется в качестве обратного прокси-сервера, то он использует локальный пул keepalive-соединений без издержек TCP-соединения.

Параметр keepalive_requests устанавливает количество запросов, которые клиент может выполнить через одно keepalive-соединение.
Параметр

устанавливает время, в течение которого keepalive- соединение остается открытым.

Включение входящих keepalive-соединений требует помещения этих директив в основную конфигурацию Nginx:

proxy_http_version 1.1;
proxy_set_header Connection "";

Они управляются модулем ngx_http_upstream_module.

Если интерфейсное приложение продолжает опрашивать фоновое приложение о наличии обновлений, увеличение значений

и ограничит число соединений, которые необходимо установить.

Значение директивы

не должно быть слишком большим, чтобы позволить другим соединениям достигнуть вышестоящего сервера.

По умолчанию Nginx использует отдельный процесс PHP, в который он перенаправляет запросы PHP-файлов. В этом он действует как прокси.

Установка виртуального хоста с Nginx будет выглядеть так:

location ~ .php$ {
    fastcgi_param REQUEST_METHOD $request_method;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass 127.0.0.1:9000;
}

FastCGI — это протокол, отличный от HTTP. Поэтому первые две строки передают аргументы и заголовки в php-fpm. Третья строка указывает способ проксирования запроса — через сокет локальной сети.

Это удобно для многосерверных установок, поскольку мы можем указать удаленные серверы для проксирования запросов.

Но если мы размещаем всю установку в одной системе, нужно использовать Unix сокет для подключения к процессу прослушивания php:

fastcgi_pass unix:/var/run/php7.0-fpm.sock;

gzip_static: общепринятая рекомендация относительно производительности сервера заключается в необходимости сжатия статических ресурсов. Но нужно пытаться сжимать только файлы, размер которых превышает установленное значение. Так как сжатие ресурсов на лету при каждом запросе может быть ресурсозатратным.

Nginx предоставляет директиву

, которая позволяет обслуживать сжатые версии файлов с расширением .gz вместо обычных ресурсов:
location /assets {
    gzip_static on;
}

Таким образом, Nginx будет пытаться обслуживать 

вместо . Поэтому мощности ЦП не будут тратиться на сжатие «на лету» для каждого запроса.

Включить кеширование в Nginx довольно просто.

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g
  inactive=60m;

Эту директиву мы помещаем в файл виртуального хоста, вне блока

. Аргумент может быть любым путем, по которому сохраняется кэш. определяет количество уровней каталогов, в которых Nginx должен хранить кэшированное содержимое.

Аргумент

— это имя общей зоны памяти, используемой для хранения ключей кэша.
10m - это объем памяти, выделяемый
для этих ключей. не является обязательным параметром и устанавливает верхний предел для размера кэшируемого содержимого. В нашем случае это 10 ГБ. указывает, как долго содержимое может оставаться в кэше без запроса, прежде чем оно будет удалено Nginx.

После этого также следует указать строку с именем зоны памяти либо в блоке

или в блоке :

Дополнительный уровень надежности достигается путем указания Nginx обслуживать элементы из кэша, когда он сталкивается с ошибкой сервера в источнике:

proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;

Более подробную информацию о директивах блоков 

и  Nginx можно найти здесь.

Директивы

предназначены для статических ресурсов. Но чаще нужно кэшировать динамический вывод веб-приложений. В этом случае мы будем использовать следующую директиву:
fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=my_cache:10m inactive=60m;
 fastcgi_cache_key "$scheme$request_method$host$request_uri";
 fastcgi_cache_use_stale error timeout invalid_header http_500;
 fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
 add_header NGINX_FASTCGI_CACHE $upstream_cache_status;

Последняя строка устанавливает заголовки ответа, чтобы сообщить нам, был ли контент доставлен из кэша или нет.

Затем в блоке server или location можно установить исключения для кэширования. Например, если строка запроса присутствует в URL-адресе:

if ($query_string != "") {
    set $skip_cache 1;
}

Также в блоке server при использовании PHP мы добавляем следующий код:

location ~ .php$ {
    try_files $uri =404;
    include fastcgi_params;

    fastcgi_read_timeout 360s;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    fastcgi_pass unix:/run/php/php7.0-fpm.sock;

      fastcgi_index index.php;
      fastcgi_cache_bypass $skip_cache;
      fastcgi_no_cache $skip_cache;
      fastcgi_cache my_cache;
      fastcgi_cache_valid  60m;
}

Строки

и настраивают кэширование и исключения. Подробное описание этих директив можно найти в документации Nginx.

Мы рассмотрели несколько методов улучшения производительности веб-сервера. Достижение наилучших результатов в Apache и Nginx осуществляется путем тестирования и анализа конкретных случаев. Поэтому это бесконечная тема.

Данная публикация представляет собой перевод статьи «Apache vs Nginx Performance: Optimization Techniques» , подготовленной дружной командой проекта Интернет-технологии.ру

Сервер Apache в Linux: установка и настройка

Рассказываем про то, как установить и настроить Apache в Linux.

Apache — это кроссплатформенное программное обеспечение для гибкой настройки надежных веб-серверов. На базе Apache строится огромное количество веб-сервисов и сайтов.

Этот инструмент для создания серверов очень популярен в мире за счет высокого уровня безопасности и обширного количества модулей, которые можно подключить, чтобы упростить управление веб-ресурсами.

Apache считается свободным программным обеспечением, поэтому разрабатывается и поддерживается сообществом, а не отдельной компанией. Соответственно, и распространяется он бесплатно.

Процесс установки Apache-сервера мало чем отличается от установки любого другого программного обеспечения в Linux.

Я буду описывать все этапы на примере операционной системы Linux Mint (это дериватив от Ubuntu и Debian). Поэтому, если вы используете Fedora или какой-то другой дистрибутив, название пакетного менеджера apt-get и связанные опции надо будет заменить на подходящие аналоги.

  • Открываем терминал.
  • Для начала обновим список доступных в системе пакетов командой sudo apt-get update.
Команда обновления списка пакетов в UbuntuКоманда обновления списка пакетов в Ubuntu

Нужно обновить систему…

  • Терминал потребует ввести пароль суперпользователя, чтобы выполнить эту операцию. Вводим его.
Запрос на ввод пароля в терминалеЗапрос на ввод пароля в терминале

Во время ввода пароля набираемые символы могут не отображаться в терминале

  • Затем используем команду sudo apt-get upgrade, чтобы обновить все установленные в систему пакеты.
Команда обновления системных пакетов в UbuntuКоманда обновления системных пакетов в Ubuntu

Устанавливаем свежие версии приложений, имеющихся в системе

  • Терминал попросит подтвердить это действие. Для этого вводим в него заглавную букву «Д» (или Y в английской версии).
Запрос на подтверждение выполняемой операцииЗапрос на подтверждение выполняемой операции

Подтверждаем свои намерения

  • Затем переходим непосредственно к установке Apache с помощью команды sudo apt-get install apache2. В CentOS и ее дериватах Apache называется httpd.
Команда установки ApacheКоманда установки Apache

Собственно, все

Чтобы включить сервер Apache нужно выполнить одну из следующих команд:

  • sudo service apache2 start (универсальная).
  • sudo systemctl start apache2.service (для Debian и ему подобных).
  • sudo systemctl start httpd.service (для CentOS и ее дериватов).

А чтобы выключить:

  • sudo service apache2 stop (универсальная).
  • sudo systemctl stop apache2.service (для Debian и ему подобных).
  • sudo systemctl stop httpd.service (для CentOS и ее дериватов).

С незамысловатым процессом установки разобрались, теперь нужно настроить наш сервер.

Для начала добавим его в автозагрузку, чтобы каждый раз не запускать заново. Это можно сделать, введя в терминал команду sudo systemcl enable apache2 (это для Ubuntu)

Теперь разберем конфигурационные файлы, которые идут в комплекте с Apache и отвечают за его настройку.

  • Большая часть параметров хранится в файле /etc/apache2/apache2.conf. Тут указаны все базовые опции, необходимые для старта сервера и его полноценной работы.
  • Дополнительные настройки прописаны в файле /etc/apache2/conf-available/.
  • Модули Apache можно посмотреть и настроить в файле /etc/apache2/mods-available.
  • Файл /etc/apache2/sites-available отвечает за настройку виртуальных хостов.
  • В /etc/apache2/ports.conf указываются порты, которые Apache использует в работе.

Для начала разберемся с основным конфигурационным файлом.

Чтобы его открыть, вводим в терминал команду sudo nano /etc/apache2/apache2.conf

В нем содержатся следующие опции:

  • Timeout — эта опция отображает количество секунд, которое сервер будет тратить на попытку восстановить подключение, если оно по какой-то причине оборвется. По умолчанию установлено значение в 300 секунд, но его можно без последствий сократить вдвое.
  • Keep Alive — по умолчанию эта настройка включена, и благодаря ей сервер может передавать  несколько файлов единовременно.
  • MaxKeepAliveRequests — это максимальное количество доступных запросов на одно соединение с сервером.
  • KeepAliveTimeout — эта опция отображает количество секунд, через которое сервер разорвет соединение, если веб-страница не загрузится полностью. Слишком маленькое значение приведет к неработоспособности сайта у пользователей с медленным интернетом.
  • User — имя пользователя, запускающего сервер.
  • Group — группа пользователей, запускающего сервер.
  • HostnameLookups — эта опция интерпретирует IP-адреса в журнале работы (логе) сервера в полноценные доменные имена.
  • LogLevel — эта опция указывает на то, какие именно ошибки будут отправляться в журнал работы (лог) сервера.
  • Include — тут прописаны конфигурационные файлы, которые были перечислены в начале этого блока.
Конфигурационный файл /etc/apache2/apache2.confКонфигурационный файл /etc/apache2/apache2.conf

Здесь находятся все необходимые параметры для быстрого запуска сервера

В конце файла /etc/apache2/apache2.conf есть блок параметров Directory. С помощью него серверу можно выдать определенные права доступа на разные части файловой системы.

Параметры в этой части файла строятся следующим образом:

Указывается тег <Directory тут же в скобках прописывается адрес папки, на которую выдаются права. Скобка закрывается >. Затем вписываются опции на выбор пользователя. А потом тег закрывается.

По умолчанию там можно увидеть такую запись:

Options FollowSymLinks AllowOverride None Require all denied

Блок с настройками Directory в основном конфигурационном файлеБлок с настройками Directory в основном конфигурационном файле

Здесь можно более скрупулезно настроить отдельные папки

Список опций для параметров Directory
  • AllowOverride — если указана эта опция с параметром All, то Apache будет считывать параметры из файла .htaccess, который частенько используют для добавления дополнительных настроек или более тонких изменений в работе сервера.
  • DocumentRoot — сюда прописывается директория в файловой системе, из которой сервер будет брать файлы для отображения пользователю.
  • Options — дополнительные параметры для взаимодействия сервера с выбранной папкой. Например, можно разрешить переход по символическим ссылкам, указав параметр FollowSymLinks.
  • Require — рядом с этой опцией нужно указать имя пользователя, которому будет разрешено получить доступ к настраиваемой папке.
  • Order — рядом с этой опцией нужно указать один из аргументов: либо Allow from название хоста, либо Deny from название хоста. В первом случае указываем хосты, у которых будет доступ к настраиваемой папке, а во втором — наоборот.

Рассмотрим еще один конфигурационный файл, вносить изменения в который не обязательно. Здесь можно указать только порты, с которыми работает («слушает») сервер. По умолчанию установлен 80 порт, и это вполне рабочий вариант. Для подключений с использованием протокола SSL используется 443 порт.

Обычно здесь ничего менять не нужно.

Конфигурационный файл /etc/apache2/ports.confКонфигурационный файл /etc/apache2/ports.conf

Файл с настройками портов

Тут особо нечего обсуждать. По сути, в .htaccess прописываются те же параметры, что вы использовали бы в тегах.

У инструкций, вписанных в .htaccess тот же синтаксис, поэтому вы можете использовать те настройки, что уже были описаны выше (Order, Require). Также в .htaccess можно прописать запуск какого-либо модуля. Более того, его можно тут же настроить. Вводимые инструкции будут зависеть от самого модуля и поддерживаемых им параметров.

Функциональность Apache можно расширить за счет дополнительных модулей. Их количество весьма внушительное. Есть модули, повышающие скорость работы сайта. Есть те, что повышают безопасность. Некоторые нужны для сбора статистики и полезной информации о действующем сервере.

Взглянуть на список запущенных модулей можно с помощью команды apache2ctl -M

Также есть команда для включения нового модуля sudo a2enmod название модуля и выключения sudo a2dismod название модуля

Если что, все изменения, касающиеся модулей начинают действовать только после перезагрузки сервера.

Список запущенных модулей ApacheСписок запущенных модулей Apache

Это, то, что уже работает

Из полезных модулей, которые можно подключить, не загружая ничего на компьютер выделю:

  • expires — с помощью которого можно сократить период хранения кэшированных файлов браузером.
  • ssl — включающий одноименный метод шифрования на сервере. Это уже некий стандарт в современном вебе, поэтому его включают по умолчанию сразу после развертывания сервера.
  • rewrite — модуль для работы с ссылками (он может сделать их более удобными для восприятия или создать грамотную структуру переходов между страницами).

Есть и популярные сторонние модули. Например:

  • pagespeed — это модуль для Apache, который создала компания Google. Его основная задача — оптимизация веб-ресурсов. Он умеет сжимать данные, исправлять ошибки в тексте, контролировать размер файлов на сервере и так далее. Все в угоду производительности.
  • mod-security — дополнительный защитный слой для вашего сервера. Этот модуль запрещает серверу принимать трафик, который прописан в заранее подготовленных правилах.
  • spamhaus — еще одна попытка защитить сервер от взлома и других потенциальных угроз. Вместе с модулем подгружается база IP-адресов, которые считаются небезопасными и могут навредить серверу. И как вы уже поняли, модуль блокирует запросы с этих адресов.

Естественно, на сервере Apache (на одном компьютере) можно разместить несколько веб-ресурсов. Можно завести хоть сотню виртуальных хостов, каждый из которых будет со своим набором данных и уникальным содержимым.

Чтобы добавить новый хост на Apache-сервер, создадим новый документ с названием хоста в папке sites-available. Это можно сделать командой sudo nano /etc/apache2/sites-available/название файла.conf

Содержимое файла должно выглядеть следующим образом:

<VirtualHost *:80> ServerName название вашего сайта ServerAlias ссылка на ваш сайт в формате www.site.com ServerAdmin почтовый адрес администратора сайта в формате [email protected] DocumentRoot путь до папки, в которой лежат документы, связанные с конкретным хостом. Обычно это файлы в папке /var/www/ ErrorLog $APACHE_LOG_DIR/error.log CustomLog $APACHE_LOG_DIR/access.log combined

Файл с новым хостомФайл с новым хостом

Добавляем новый хост

Чтобы активировать новый хост (после его создания), вводим в терминал команду sudo a2ensite название хоста

Важно отметить, что при настройке виртуальных хостов на реальном серверном компьютере проведенных процедур было бы достаточно. А вот в случае с локальной «машиной» понадобится открыть файл hosts и прописать туда IP-адреса для нового хоста.

Post Views: 7

HTTPD - Apache2 интернет сервер

HTTPD - Apache2 интернет сервер

Apache - наиболее используемый интернет-сервер на линукс системах. Интернет-сервера используются для выдачи интернет-страниц по запросу клиентских компьютеров. Клиенты обычно запрашивают и просматривают интернет-страницы используя приложения интернет-браузеров, таких как Firefox, Opera, Chromium или Mozilla.

Пользователи вводят единообразный указатель ресурсов (URL) для определения интернет-сервера по его полностью квалифицированному доменному имени (FQDN) и пути до требуемого ресурса. Например, чтобы увидеть домашнюю станицу интернет-сайта Ubuntu, пользователь должен ввести только FQDN:

www.ubuntu.com

Для просмотра страницы о сообществе [Ubuntu] пользователь должен ввести следующий путь:

www.ubuntu.com/community

Наиболее распространенный протокол, используемый для передачи интернет-страниц, - это гипертекстовый протокол передачи (HTTP). Такие протоколы, как HTTP поверх SSL (HTTPS) и протокол передачи файлов (FTP) - протокол для загрузки и получения файлов, также используются.

Интернет-сервера Apache обычно используются в комбинации с движком базы данных MySQL, языком сценариев гипертекстового препроцессора (PHP) и другими популярными языками сценариев, таких как Python И Perl. Эта конфигурация получила название LAMP (Linux, Apache, MySQL and Perl/Python/PHP) и формирует мощную и крепкую платформу для разработки и развертывания интернет-приложений.

Установка

Интернет-сервер Apache2 доступен в Ubuntu Linux. Для установки Apache2:

  1. В терминале введите следующую команду:

sudo apt-get install apache2

Настройка

Apache2 настраивается помещением инструкций (directives) в обычные тестовые файлы настроек. Эти инструкции разделены между следующими файлами и каталогами:

  1. apache2.conf: основной файл настроек Apache2. Содержит глобальные настройки для всего Apache2.

  2. conf.d: (каталог) содержит файлы настроек, которые применяются глобально к Apache2. Другие пакеты, которые используют Apache2 для предоставления контента, могут добавлять файлы или символьные ссылки в этот каталог.

  3. envvars: файл, где устанавливаются переменные окружения Apache2.

  4. httpd.conf: устаревший основной файл настроек Apache2, названный по имени сервиса httpd. Теперь этот файл обычно пустой, поскольку большинство опций настроек были перемещены в каталоги, упомянутые далее. Файл может быть использован для для специфичных настроек пользователя, имеющих глобальный эффект в Apache2.

  5. mods-available: этот каталог содержит конфигурационные файлы как для загрузки модулей, так и для их настройки. Тем не менее не все модули имеют отдельные файлы настройки.

  6. mods-enabled: содержит символьные ссылки на файлы в /etc/apache2/mods-available. Когда создается символьная ссылка на файл настроек модуля, он включается при следующем рестарте apache2.

  7. ports.conf: содержит инструкции, которые определяют какие TCP порты прослушивает Apache2.

  8. sites-available: этот каталог содержит файлы настроек для виртуальных сетевых узлов (Virtual Hosts) Apache2. Виртуальные сетевые узлы позволяют настраивать Apache2 на множество сайтов с отдельными конфигурациями.

  9. sites-enabled: подобно mods-enabled содержит символьные ссылки на каталог /etc/apache2/sites-available. Аналогично, когда файл настроек из sites-available получает здесь символьную ссылку, соответствующий ему сайт будет активен при следующем перезапуске Apache2.

В дополнение к этому другие файлы настроек могут быть добавлены с использованием инструкции Include, а символы группировок могут использоваться для включения множества файлов настроек. Любая инструкция может быть добавлена в любой из этих файлов настроек. Изменения в основных конфигурационных файлах распознаются только после старта или рестарта Apache2.

Сервер также читает файлы, содержащие типы mime документов; имя файла задается инструкцией TypesConfig, обычно через /etc/apache2/mods-available/mime.conf, который также может включать дополнения и переопределения, а по умолчанию используется /etc/mime.types.

Общие настройки

Этот раздел рассматривает существенные параметры настройки сервера Apache2. Обратитесь к документации по Apache2 для уточнения деталей.

1. Apache2 по умолчанию поставляется с конфигурацией, дружественной к виртуальным хостам. Это означает, что он изначально настроен с единственным виртуальным хостом (используя инструкцию VirtualHost) который может быть изменен или использоваться как есть, если у вас единственный сайт, либо использоваться как шаблон для дополнительных виртуальных хостов, если у вас несколько сайтов. Если оставить его единственным, изначальный виртуальный хост будет обслуживать ваш сайт по умолчанию или пользователи сайта заметят, что введенный ими URL не совпадает с инструкцией ServerName любого из ваших созданных сайтов. Для изменения начального виртуального хоста отредактируйте файл /etc/apache2/sites-available/default.

Инструкции, установленные для виртуального хоста, влияют только на соответствующий виртуальный хост. Если инструкция установлена на весь сервер и не установлена в настройках виртуального хоста, используется общая настройка. Например, вы можете определить email адрес вебмастера и не определять его отдельно для каждого виртуального хоста.

Если вы хотите настроить новый виртуальный хост или сайт, скопируйте этот файл в тот же каталог с новым именем. Например:

sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mynewsite

Отредактируйте новый файл для настройки нового сайта, используя инструкции, описанные ниже.

2. Инструкция ServerAdmin определяет адрес email для оповещения администратора сервера. Изначальное значение [email protected] Его надо изменить на ваш email адрес (если именно вы являетесь администратором сервера). Если возникает проблема с сайтом, Apache2 показывает сообщение об ошибке, содержащее этот адрес для оповещения о проблеме. Ищите эту инструкцию в файле настроек вашего сайта в каталоге /etc/apache2/sites-available.

3. Инструкция Listen определяет порт, и в общем случае IP адрес, на которых Apache2 должен ожидать соединения. Если IP адрес не определен, Apache2 будет прослушивать все IP адреса, которые назначены компьютеру, где он запущен. Значение по умолчанию для Listen 80. Замените его на 127.0.0.1:80 чтобы Apache2 прослушивал только интерфейс внутренней петли, что сделает его недоступным из интернета; на 81 (например) для изменения порта доступа или оставьте как есть для стандартного функционирования. Эта инструкция может быть найдена и изменена в единственном файле /etc/apache2/ports.conf.

4. Инструкция ServerName необязательная и определяет на какой адрес FQDN ваш сайт должен отвечать. Изначальный виртуальный хост не имеет ServerName, поэтому отвечает на все запросы не соответствующие директивам ServerName других виртуальных хостов. Если вы приобрели доменное имя ubunturocks.com и хотите прописать его на вашем Ubuntu сервере, значение ServerName для файла настроек вашего виртуального хоста должно быть ubunturocks.com. Добавьте эту инструкцию в файл нового виртуального хоста, который вы создавали ранее (/etc/apache2/sites-available/mynewsite).

Возможно вы захотите, чтобы ваш сайт откликался на www.ubunturocks.com, поскольку многие пользователи считают префикс www необходимым. Используйте для этого инструкцию ServerAlias. Вы можете также применять для ServerAlias групповые символы.

Например, следующая конфигурация заставит ваш сайт отвечать на любые запросы с доменом, оканчивающимся на .ubunturocks.com.

ServerAlias *.ubunturocks.com

5. Инструкция DocumentRoot определяет где Apache2 будет искать файлы, которые являются содержимым сайта. По умолчанию используется значение /var/www, как определено в /etc/apache2/sites-available/default. Если желаете, можете изменить это значение в файле сайта вашего виртуального хоста и не забудьте создать этот каталог, если необходимо!

Включите новый VirtualHost, используя утилиту a2ensite, и перезапустите Apache2:

sudo a2ensite mynewsite
sudo service apache2 restart

Убедитесь, что заменили mynewsite на более понятное имя для VirtualHost. Один из способов это называть файл по значению ServerName виртуального хоста.

Аналогично используйте утилиту a2dissite для выключения сайтов. Это может быть полезным при разрешении проблем с несколькими виртуальными хостами:

sudo a2dissite mynewsite
sudo service apache2 restart
Настройки по умолчанию

Этот раздел раскрывает возможности настроек значений по умолчанию сервера Apache2. Например, если вы добавили виртуальный хост, значения, которые вы определите в его конфигурации переопределят значения для данного виртуального хоста. Для инструкций, не определенных в настройках виртуального хоста, будут использоваться значения по умолчанию.

1. DirectoryIndex - это страница по умолчанию, выдаваемая сервером, когда пользователь запрашивает индекс каталога указанием прямого слеша (/) после его имени.

Например, когда пользователь запрашивает страницу http://www.example.com/this_directory/, он (или она) получит либо страницу, определяемую DirectoryIndex, если она существует, список файлов в каталоге, сгенерированный сервером, если не существует и определена опция Indexes, или страницу Permission Denied (недостаточно прав доступа) в остальных случаях. Сервер попытается найти один из файлов, перечисленных в инструкции DirectoryIndex и вернет первый найденный. Если не найдет ни одного и если установлено Options Indexes для данного каталога, сервер создаст и вернет список в формате HTML подкаталогов и файлов в этом каталоге. Значение по умолчанию, находящееся в /etc/apache2/mods-available/dir.conf это «index.html index.cgi index.pl index.php index.xhtml index.htm». Поэтому, если Apache2 найдет файл в запрашиваемом каталоге, соответствующий любому из этих имен, первый же из них будет показан [клиенту].

2. Инструкция ErrorDocument позволяет вам определить файл для Apache2, используемый при определенных ошибочных событиях. Например, если пользователь запросил ресурс, который не существует, возникнет ошибка 404. По умолчанию Apache2 просто вернет код возврата HTTP 404. Прочитайте /etc/apache2/conf.d/localized-error-pages для детальных инструкций по использованию ErrorDocument, включающий расположение файлов примеров.

3. По умолчанию сервер пишет журнал обмена в файл /var/log/apache2/access.log. Вы можете поменять это для каждого сайта в файлах настроек ваших виртуальных хостов с помощью инструкции CustomLog или спуститься на уровень настроек по умолчанию, определяемых в /etc/apache2/conf.d/other-vhosts-access-log. Вы можете также определить файл, в который будут сохраняться ошибки, через инструкцию ErrorLog, которая изначально указывает на var/log/apache2/error.log. Они хранятся отдельно от журнала обмена чтобы помочь в решении проблем с вашим сервером Apache2. Вы можете также определить LogLevel (изначально значение "warn") и LogFormat (смотрите /etc/apache2/apache2.conf для значений по умолчанию).

4. Некоторые опции задаются на уровне каталогов вместо уровня сервера. Options - одна из таких директив. Раздел Directory заключается в XML-подобные теги, как показано ниже:

<Directory /var/www/mynewsite>
...
</Directory>

Инструкция Options внутри раздела Directory принимает одно или несколько из следующих значений (среди прочего), разделенные пробелами:

  • ExecCGI - Разрешает выполнение CGI сценариев. CGI сценарии не выполняются, если данная опция не выбрана.

Большинство файлов не должны выполняться как CGI сценарии. Это может быть очень опасно. CGI сценарии должны находиться в отдельном каталоге и вне вашего DocumentRoot. И только для этого каталога должна указываться опция ExecCGI. Так сделано изначально и по умолчанию CGI сценарии располагаются в /usr/lib/cgi-bin.
  • Includes - Позволяет включения на стороне сервера. Включения на стороне сервера позволяют файлам HTML включать другие файлы. Смотрите документацию Apache SSI (сообщества Ubuntu) для дополнительных деталей.

  • IncludesNOEXEC - Позволяет включения на стороне сервера, но блокирует команды #exec и #include в CGI сценариях.

  • Indexes - Показывает форматированный список содержимого каталога, если не найдены DirectoryIndex (как например index.html) в запрашиваемом каталоге.

По соображениям безопасности эта опция обычно не устанавливается и обычно не должна присутствовать для вашего каталога DocumentRoot. Включайте эту опцию осторожно на уровне каталогов только если вы уверены, что хотите показать пользователям полное содержание этого каталога.

  • Multiview - Поддерживает зависящие от содержимого просмотры; эта опция по умолчанию выключена по соображениям безопасности. Смотрите документацию Apache2 по этой опции.

  • SymLinksIfOwnerMatch - Следует по символическим ссылкам если целевой файл или каталог имеет того же владельца, что и ссылка.

Настройки httpd

Этот раздел раскрывает некоторые основные конфигурационные настройки сервиса httpd.

LockFile - инструкция LockFile устанавливает путь к блокирующему файлу (lockfile) когда сервер скомпилирован с опцией USE_FCNTL_SERIALIZED_ACCEPT или USE_FLOCK_SERIALIZED_ACCEPT. Он должен сохраняться на локальном диске. Стоит оставить значение по умолчанию если только каталог журналов не расположен на NFS ресурсе. В противном случае исходное значение стоить изменить на каталог локального диска с правами на чтение только для root.

PidFile - инструкция PidFile устанавливает файл, в который сервер записывает ID своего процесса (pid). Этот файл должен быть доступен на чтение только root. В большинстве случаев этот параметр стоит оставить без изменений.

User - инструкция User устанавливает userid (ID пользователя), используемый сервером для ответа на запросы. Эта настройка определяет права доступа сервера. Любые файлы, недоступные этому пользователю, также будут недоступны для посетителей вашего сайта. По умолчанию используется пользователь «www-data».

Пока вы находитесь в здравом уме и твердой памяти, не используйте в качестве пользователя root. Использование здесь root создаст серьезные пробоины в безопасности вашего сервера.

Group - инструкция Group аналогична директиве User. Group устанавливает группу под которой сервер будет отвечать на запросы. Значение по умолчанию также «www-data».

Модули Apache2

Apache2 - модульный сервер. Это означает, что только самая базовая функциональность включена в ядро сервера. Расширенные возможности доступны через модули, которые могут быть загружены в Apache2. По умолчанию базовый набор модулей включается в сервер на этапе компиляции. Если сервер скомпилирован для использования динамически загружаемых модулей, то модули могут быть скомпилированы отдельно и добавлены в любое время с использованием инструкции LoadModule. В противном случае Apache2 должен быть перекомпилирован для добавления или удаления модулей.

Ubuntu компилирует Apache2 с возможностью динамической загрузки модулей. Конфигурационные директивы могут быть включены по условию присутствия соответствующего модуля в блоке <IfModule>.

Вы можете установить дополнительные модули Apache2 и использовать их с вашим интернет сервером. Например, запустите следующую команду в терминале для установки модуля авторизации MySQL:

sudo apt-get install libapache2-mod-auth-mysql

Ищите дополнительные модули в каталоге /etc/apache2/mods-available.

Используйте утилиту a2enmod для включения модуля:

sudo a2enmod auth_mysql
sudo service apache2 restart

Аналогично a2dismod выключит модуль:

sudo a2dismod auth_mysql
sudo service apache2 restart

Настройка HTTPS

Модуль mod_ssl добавляет важную возможность для сервера Apache2 - возможность шифрованных соединений. Таким образом, когда ваш браузер соединяется с использованием SSL, используется префикс https:// в начале адреса URL в строке навигации.

Модуль mod_ssl доступен в пакете apache2-common. Выполните следующую команду в терминале для включения этого модуля:

sudo a2enmod ssl

Настройки по умолчанию для HTTPS находятся в файле /etc/apache2/sites-available/default-ssl. Чтобы Apache2 предоставлял HTTPS, также требуются файлы ключа и сертификата. Изначальная настройка HTTPS использует сертификат и ключ, созданные пакетом ssl-cert. Они подходят для тестирования, но должны быть заменены на сертификат, соответствующий вашему сайту или серверу. Для информации по созданию ключей и получению сертификатов смотрите раздел Сертификаты.

Для настройки Apache2 для HTTPS введите следующее:

sudo a2ensite default-ssl

Каталоги /etc/ssl/certs и /etc/ssl/private используются по умолчанию. Если вы установили сертификат и ключ в другие каталоги, убедитесь что изменили соответственно опции SSLCertificateFile и SSLCertificateKeyFile.

С Apache2, теперь настроенным на HTTPS, перезапустим сервис для разрешения новых настроек:

sudo service apache2 restart

В зависимости от того как вы выпускали свой сертификат, вам может потребоваться ввести кодовую фразу при старте Apache2.

Вы можете получить доступ к страницам защищенного сервера набрав https://your_hostname/url/ в адресной строке вашего браузера.

Права разделения записи

Чтобы более одного пользователя имели право записи в один и тот же каталог, необходимо дать право записи группе, которая их объединяет. Следующий пример предоставляет права на запись в каталог /var/www для группы «webmasters».

sudo chgrp -R webmasters /var/www
sudo find /var/www -type d -exec chmod g=rwxs "{}" \;
sudo find /var/www -type f -exec chmod g=rws  "{}" \;
Если доступ должен быть предоставлен более чем одной группе на каталог, используйте Списки управляемого доступа (ACL).

Ссылки

  1. Документация по Apache2 содержит более глубокую информацию по директивам настройки. Также смотрите пакет apache2-doc для официальной документации по Apache2.

  2. Apache Cookbook от O'Reilly - отличный ресурс по созданию специфичных настроек для Apache2.

  3. Для вопросов по Apache2 в Ubuntu используйте IRC канал #ubuntu-server на freenode.net.

  4. Для обычно интегрируемого с PHP и MySQL Apache2 хорошим ресурсом будет страницаApache MySQL PHP Ubuntu Wiki.


Отправить ответ

avatar
  Подписаться  
Уведомление о