Debian apache


The Apache2 HTTP Server is a modular program, where we can choose its functionality by including in the server a set of modules. The modules can be statically compiled into the httpd binary when the server is built. Alternatively, modules can be compiled as Dynamic Shared Objects (DSOs) that exist separately from the main httpd binary file.

Normally enabling one particular apache DSO module will involve editing the main apache configuration file and adding a LoadModule line to enable the loading of the particular module. Depending from the module itself, we might need to add also some configuration directives. This will work fine on Debian also, but I am going to show you the Debian particular method of managing apache2 modules.

Regardless of the apache MPM (Multi-Processing Modules) you are using: apache2-mpm-prefork, apache2-mpm-worker or apache2-mpm-perchild after the installation you will end up with some default modules: some already enabled and some ready to be used. Opposed to a RedHat based system for example (where they will try to enable all the possible modules) the Debian package will enable by default only a very small amount of modules. Here are the modules enabled by default:


Compiled statically inside the apache2 binary: core, http_core, prefork/worker/perchild, mod_access, mod_auth, mod_log_config, mod_logio, mod_env, mod_setenvif, mod_mime, mod_status, mod_autoindex, mod_negotiation, mod_dir, mod_alias, mod_so.

  • You can get the list of compiled in modules from the command line with, apache2 -l

  • These modules can’t be disabled without recompiling the apache package

  • For more details on the build-in modules you can check Appendix 1.

Standard apache2 modules installed and ready to be enabled: actions, asis, auth_anon, auth_dbm, auth_digest, auth_ldap, cache, cern_meta, cgi, cgid, dav, dav_fs, deflate, disk_cache, expires, ext_filter, file_cache, headers, imap, include, info, ldap, mem_cache, mime_magic, proxy, proxy_connect, proxy_ftp, proxy_http, rewrite, speling, ssl, suexec, unique_id, userdir, usertrack, vhost_alias.

  • only one module is enabled by default: mod_userdir

  • You can enable any of these modules at any time with as shown bellow.

  • For more details on the standard modules installed you can check Appendix 2.


Other apache2 modules available: you can install additional apache2 modules that are not standard if needed. Probably you will like to have php installed that way, but maybe some others based on the particular need. The installation uses the regular apt commands, for example:

aptitude install libapache2-mod-php4 

The list of additional modules that can be installed includes: mod-geoip, mod-jk, mod-mono, mod-perl2,mod-php4, mod-php5, mod-python, mod-rpaf, mod-ruby, mod-suphp.

  • For the full list of extra modules available you can check Appendix 3.

  • Normally when you install one of the extra modules the debian package will automatically enable it. If needed, you can disable it as shown bellow (if you don’t want to completely remove it).

Managing apache2 modules in Debian:

The Debian apache2 package provides a unique mode of managing modules. All the loading and configuration related entries are found in individual files inside folder /etc/apache2/mods-available/. Here we will find files like module_name.load (and if needed module_name.conf). Also all additional installed modules will place their configuration files in the same place.

Inside the folder /etc/apache2/mods-enabled/ we will find all the enabled modules. Here we will find symlinks to the files from mods_available for all the enabled modules. _Only the modules found in this folder will be enabled at run time. _


For example the configuration file for mod_rewrite includes only one line to load the module:

So in order to enable one additional module we will only have to create the proper symlinks from the mods-available to the mod-enabled files… But why not use the little tools Debian provides us for this:

  • a2enmod: enables an apache2 module (this does nothing else but creates the proper links to the module .load and .conf files). For example to enable the rewrite module:
  • a2dismod: disables an apache2 module (removes the links from mod-enabled for the module). For example to disable the rewrite module:

Running a2enmod without any parameter will show the possible choices:

Running a2dismod without any parameter again will show us the list of enabled modules and allow to choose one:

Don’t forget to reload the apache daemon, after making any changes to the list of enabled modules:

/etc/init.d/apache2 reload 

www.ducea.com


Количество веб-сайтов с каждым годом увеличивается, а количество свободных IP-адресов больше не становится. Почему бы не привязать к одному адресу несколько сайтов? Итак, начнем. Надеюсь, что операционная система установлена (в моем случае GNU/Debian 5.0.4 lenny) и проделаны базовые настройки, если нет, рекомендуется посмотреть, например, тут. Команды, описанные в статье, начинающиеся с символа # следует выполнять из-под административной учетной записи root или через команду sudo, команды, начинающиеся с символа $, допускается выполнять обычным пользователем.

Установка

Собственно сначала нам потребуется установить сам веб-сервер.

Если были установлены только базовые компоненты Debian (что есть правильно для веб-сервера), то явно не помешает наличие консольного браузера. Мне лично нравится w3m:

Пришло время проверить работу нашего веб-сервера:

или

Надпись «It works!» – хороший знак, наш веб-сервер работает. Можно выйти из браузера клавишей q или почитать справку w3m, нажав комбинацию Shift+H. По умолчанию в apache доступен только один сайт, который расположен в директории /var/www, именно там можно обнаружить файл index.html, который и содержит надпись «It works!». В эту директорию можно помещать другие html-файлы, и все они будут доступны из браузера.

Структура виртуальных хостов


Теперь займемся созданием дополнительных виртуальных сайтов. Сначала нужно определиться со структурой каждого из сайтов и определиться с их месторасположением. Можно оставить как есть и создавать структуры в /var/www, но будет удобнее создать их в домашнем каталоге пользователя в папке www. Для примера создадим структуру двух сайтов с именами aaa.local и bbb.local (невозбранно создавать и с любыми другими именами www.domain.com, www.supersite.ru и т.п.) в домашней директории пользователя user. Структура сайта будет иметь 3 директории: htdocs (для html и php -файлов сайта), cgi-bin (для cgi-скриптов) и logs (для логов).

Т.к. структура сайта bbb.local будет аналогичной, то просто копируем содержимое aaa.local

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

Настройка веб-сервера

Теперь нужно дать знать веб-серверу о наличии виртуальных хостов. Все настройки apache2 находятся в каталоге /etc/apache2, для начала откроем файл /etc/apache2/ports.conf в любом текстовом редакторе (я использую и рекомендую к использованию «странный» и «неудобный» vim, но подойдет и дефолтовый в Debian nano, далее в тексте статьи я буду использовать именно vim):

или

Вот его содержимое (без закомментированных строк):

Необходимо убедиться, что присутствует строка NameVirtualHost *:80, она подразумевает использование виртуальных хостов на стандартном 80 порту для всех * интерфейсов. Если этой строки нет или она закомментирована символом #, то ее нужно добавить/раскомментировать.


Если вывести содержимое каталога настроек веб-сервера /etc/apache2 командой:

то среди прочего можно увидеть две интересные директории: sites-available и sites-enabled. Первая директория предназначена для описания всех виртуальных хостов веб-сервера, а вторая – для активных, т.е. включенных. Опишем наш первый хост aaa.local в директории sites-available, т.е создадим его конфигурацию, для этого командой:

cоздаем конфигурационный файл aaa.local.conf такого содержания:

Имя файла настроек aaa.local.conf можно выбирать любое другое, но такой выбор мне видится наиболее наглядным: хост — aaa.local, конфигурация – aaa.local.conf. Думаю понятно, что то же самое нужно проделать для хоста bbb.local. Очевидно, что проще не набивать bbb.local.conf с нуля, а скопировать aaa.local и отредактировать уже его, изменяя упоминания aaa.local на bbb.local в названиях и путях:

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

Конечно, в обоих случаях index.html не является полноценным html-файлом в виду отсутствия в нем каких-либо тегов, но для теста работы хостов этого достаточно.

Осталось сделать, чтобы веб-сервер отзывался по именам aaa.local и bbb.local. Т.к. настройка DNS – тема для отдельной статьи, считаем хосты локальными и добавляем их в файл /etc/hosts c помощью текстового редактора.

Должно получиться что-то такое:

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

Активировать/деактивировать виртуальные хосты можно двумя путями:

  1. С помощью создания/удаления символических ссылок в директории /etc/apache2/sites-enabled на созданные конфигурации хостов.
  2. С помощью команд a2ensite и a2dissite.

По сути оба метода эквивалентны, первый чуточку сложнее, но отражает смысл происходящего, поэтому рассмотрим сначала его. Создадим символические ссылки в каталоге /etc/apache2/sites-enabled на конфигурации aaa.local.conf и bbb.local.conf:

Можно перезапускать веб-сервер командой

и проверять работу виртуальных хостов

Если при этом отображается содержимое созданного нами индексного файла «Хост aaa.local работает», то все получилось. Можно проверить работу второго виртуального хоста таким же образом. Чтобы деактивировать виртуальный хост, нужно просто удалить соответствующую символическую ссылку и перезапустить веб-сервер, например, для хоста bbb.local

Упомянутый второй способ в принципе делает то же самое (создает и удаляет символические ссылки на конфигурации в каталоге /etc/apache2/sites-enabled) с помощью специальных команд a2ensite — apache2 enable site (включить сайт апача) и a2dissite – apache2 disable site (выключить сайт апача). Активируем повторно хост bbb.local


После выполнения команды появится сообщение:

которое говорит о том, что нужно активировать новую конфигурацию командой reload, что и делаем:

На этом все. В следующих статьях будут рассмотрены вопросы связки веб-сервера apache2 с php и СУБД, использования SSL на виртуальных хостах и др.

Комментарии и спасибы приветствуются ? При копировании статьи просьба оставлять ссылку на оригинал.

combucho.wordpress.com

Apache Modules¶

One of the great advantages of the Apache web server is its modular architecture. You can add or remove functionality as dictated by your requirements. In the default Apache build, you would find a section near the top of your httpd.conf file with instructions to load each module. Later in the file, you would find configuration sections specific to each module, possibly wrapped in a <IfModule> directive. This arrangement can be tricky from the perspective of a system administrator who may need to install or uninstall various Apache modules. Identifying the configuration changes that are required by a module or that require a specific module can be difficult to do by hand and even harder to automate with a script.

To make things easier on the server administrator, Debian takes advantage of the fact that Apache configuration files may contain an Include directive which pulls in additional configuration files.


bian creates two non-standard directories: /etc/apache2/mods-enabled and /etc/apache2/mods-available. Whenever you install an Apache module from a Debian package, the module will drop one or two files into the mods-available directory. The mandatory ${module}.load contains the Apache Load directive to load the module into your web server. The optional ${module}.conf file contains additional configuration directives necessary for the operation of the module.

Installing a module from a Debian package makes it available to your server, but does not (necessarily) automatically activate the module in your server. To activate the module, use the a2enmod command:

The a2enmod command will create symbolic links in the mods-enabled directory pointing to your ${module}.load and, if it exists, ${module}.conf. To force a running Apache to re-read its configuration files and thus load the module, you must then send it the force-reload signal.


Likewise, to disable a module:

Issue either command without a module argument and it will print a list of appropriate module names.

You can, of course, manually manage the symbolic links in the mods-enabled directory, but it is safer and easier to use the provided scripts.

www.control-escape.com

Установка Apache

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

  apt-get update  

NL from 39E - 2

Далее необходимо установить пакет самого веб-сервера Apache:

  apt-get install apache2  

После завершения установки веб-сервер будет готов к работе. Проверить его работоспособность можно просто, открыв в веб-браузере IP-адрес сервера, на который был установлен пакет Apache. Для версии 2.4 страница заглушка выглядит следующим образом:

Debian apache

Конфигурационный файл Apache, находится в /etc/apache2/apache2.conf

Директория /etc/apache2/sites-enabled/ содержит файлы конфигурации созданных веб-сервисов, а директория /etc/apache2/sites-available/ символические ссылки на файлы конфигураций веб-сервисов, которые на данный момент включены.

С помощью данных файлов конфигураций можно управлять настройкой виртуальных хостов. Сервер Apache позволяет размещать несколько виртуальных хостов (сервисов) на одном сервере. По умолчанию все содержимое веб сервисов располагается в папке /var/www. Размещение содержимого можно изменять, указав это в конфигурационном файле виртуального хоста, за это отвечает директива DocumentRoot.

Рассмотрим создание простейшей веб странички с надписью “Hello World”. Для начала создадим папку, где будет храниться содержимое. Для этого выполним команду:

  mkdir /var/www/helloworld.net  

В данной папке создадим простейший html файл index.html следующего содержания:

  <html>   <head>   <title>Hello World</title>    </head>   <body>   <p>This is a test page.</p>   </body>  </html>  

После того как содержимое простейшей странички присутствует, необходимо создать конфигурационный файл виртуального хоста. Для этого в папке /etc/apache2/sites-available/ создадим файл helloworld.net.conf (не забудьте про расширение conf) со следующим содержимым:

  <VirtualHost*:80>   ServerName helloworld.net   ServerAdmin user@user.net   ServerAlias www.helloworld.net   DocumentRoot /var/www/helloworld.net   CustomLog ${APACHE_LOG_DIR}/helloworld.net.access.log combined   ErrorLog ${APACHE_LOG_DIR}/helloworld.net.error.log  </VirtualHost>  

Здесь присутствуют параметры:

  • ServerName – доменное имя виртуального хоста (нашей странички);
  • ServerAdmin – адрес электронной почты администратора;
  • ServerAlias – псевдоним виртуального хоста (доменное имя хоста с добавлением www);
  • DocumentRoot – место, где хранится содержимое самого сервиса;
  • CustomLog — название файла журнала доступа с сервису;
  • ErrorLog – название файла журнала ошибок.

Подробное описание всех параметров и их значений в конфигурационном файле можно посмотреть в официальной документации(http://httpd.apache.org/docs/2.4).

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

  cd /etc/apache2/sites-enabled  ln -s ../sites-available/helloworld.net.conf helloworld.net.conf  

Также включение и выключение виртуальных хостов можно выполнять, применяя команды a2ensite и a2dissite соответственно.

Для включения:

  a2ensite helloworld.net  

Для выключения:

  a2dissite helloworld.net  

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

  /etc/init.d/apache2 restart  

Теперь можно проверить работу созданной странички.

Debian apache

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

  xxx.xxx.xxx.xxx helloworld.net  

Где xxx.xxx.xxx.xxx – это IP-адрес сервера с установленным Apache. Файл hosts, находится:

  • C:WindowsSystem32driversetc (в Win7);
  • /etc/hosts (в Debian).

Установка PHP

Следующий шаг – это установка скриптового языка PHP. Установка осуществляется командой:

  apt-get install php5  

Теперь необходимо проверить работу PHP. Для этого добавим в папку с содержимым сайта (/var/www/helloworld.net) файл test.php. В данный файл необходимо написать следующее:

  <?php  phpinfo();   ?>  

UK from 85USD

Теперь откроем ссылку helloworld .net/test.php в браузере. Получим следующую картину.

Debian apache

Следует отметить, что существует модуль PHP под сервер Apache. Этот модуль позволяет Apache и PHP работать более эффективно. Проверить установлен ли модуль можно:

  dpkg -l | grep libapache2-mod-php5  

Если модуля нет, то его надо установить:

  apt-get install libapache2-mod-php5.  

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

  ls -l /etc/apache2/mods-enabled/ | grep php5  

Должно появиться следующее:

  lrwxrwxrwx 1 root root 27 Sep 2 10:07 php5.conf -> ../mods-available/php5.conf  lrwxrwxrwx 1 root root 27 Sep 2 10:07 php5.load -> ../mods-available/php5.load  

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

  a2enmod php5  

Выключается модуль командой a2dismod.

introserv.eu

В большинстве случаев, если вы имеете собственный веб-сервер с «белым» ip-адресом, то после установки Apache2  в Debian 8, сайт «заливается» в директорию /var/www/html — которая прописана в файле /etc/apache2/sites-available/000-default.conf

Однако, если мы хотим разместить несколько сайтов? Допустим, что у нас есть несколько приобретенных доменных имен. Например:

  • school.ru
  • moodle.school.ru
  • школа.рф
  • support.org

и один «белый» ip-адрес. Что нужно делать?

В Apache2 такая возможность, конечно-же, предусмотрена.

Но тут нужно понимать, как работает механизм обработки запросов к серверу. Представить это можно так:

apache2 dns

а) В соответствии со схемой, нам нужно настроить на DNS-записи на DNS-сервере.

б) Настроить Веб-сервер для работы с несколькими виртуальными хостами.

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

1. Устанавливаем веб-сервер, если он еще не установлен:

2. Для того, чтобы обезопасить работу на сервере, в директориях, которые будут созданы для размещения сайтов передадим права на директории пользователю (у меня это webuser, под которым будем работать с файлами сайта). Для этого установим модуль apache2-mpm-itk:

3. Создаем директорию для нашего сайта в /var/www/ и передаем права на нее нашему пользователю webuser :

4. Создаем файл конфигурации виртуального хоста для school.ru:

И прописываем в нем:

Сохраняем изменения.

5. «Включаем» сайт. Это можно сделать путем создания символьной ссылки на конфигурационный файл виртуального хоста school.ru.conf в директорию /etc/apache2/sites-enabled, либо специальной утилитой apache2:

«Выключить» сайт можно командой:

6. Перезапускаем apache2:

7. Для того, чтобы проверить работу виртуального хоста school.ru создадим в директории /var/www/school.ru файл index.html c содержимым:

<body><h1>Hello!</h1></body>

8. Запускаем браузер и переходим по адресу http://school.ru

Источники: 

  • http://httpd.apache.org/
  • http://interface31.ru/tech_it/2015/06/nastraivaem-veb-server-na-baze-apache-v-debian-ubuntu-server.html
  • https://habrahabr.ru/post/226971/

it-school.pw

LAMP-Debian-Ubuntu-000.jpgВеб-сервер Apache без преувеличения можно назвать стандартом де-факто в интернет. Большинство популярных систем управления сайтами и иных веб-приложений разрабатываются таким образом, чтобы работать с данным веб-сервером «из коробки». Поэтому, если вам нужен веб-сервер широкого применения, то Apache будет лучшим выбором. В данной статье мы расскажем, как установить и настроить полноценный веб-сервер на базе Debian / Ubuntu Server.

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

Кроме самого веб-сервера нам понадобится система управления базами данных, в данной отрасли стандартом де-факто давно является MySQL, и один из скриптовых языков для работы веб-приложений, на сегодняшний день пальму первенства уверенно держит PHP. Все вместе образует классическую связку, именуемую еще LAMP-сервер, аббревиатура расшифровывается как: Linux — Apache — MySQL — PHP.

Для установки мы будем использовать платформу Debian / Ubuntu. Системы, в зависимости от релиза, отличаются набором ПО, но все изложенное ниже будет одинаково применимо к любой из них. Существующие отличия будут оговорены отдельно. На момент написания статьи актуальны следующие релизы систем и версии ПО:

  • Debian 8 Jessie: Apache 2.4.10, PHP 5.6.7, MySQL 5.5.43
  • Debian 7 Squeeze: Apache 2.2.22, PHP 5.4.39, MySQL 5.5.43
  • Ubuntu Server 14.04 LTS: Apache 2.4.7, PHP 5.5.9, MySQL 5.5.43
  • Ubuntu 12.04 LTS: Apache 2.2.22, PHP 5.3.10, MySQL 5.5.43

Все вышеуказанные выпуски содержат относительно современные версии ПО, но есть некоторые особенности. Так входящий в состав Ubuntu 14.04 и Debian 8, Apache 2.4 имеет достаточно серьезные отличия от Apache 2.2 и не все CMS (системы управления контентом, «движки») и веб-приложения умеют работать с ним, особенно это касается старых версий. Так, например, вы не сможете использовать Apache 2.4 для веб-доступа к базам 1С:Предприятие. Поэтому, если вы решили выбрать версию 2.4 — уточните совместимость с нею всех планируемых к размещению CMS и веб-приложений.

Кроме того, MySQL из состава Ubuntu Server 12.04 / 14.04 не работает внутри контейнеров OpenVZ, которые широко используются для предоставления услуги VPS. Проблема решается заменой MySQL из репозитория на версию от MySQL Community (разработчики) или один из форков, например, MariaDB.

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

Мы не будем останавливаться на установке и подготовке серверной ОС, более подробно вы можете ознакомиться с этим процессом в наших статьях для Debian и Ubuntu Server. Также не забудьте правильно настроить язык и региональные стандарты системы. Все приведенные ниже действия следует выполнять с правами суперпользователя, например, с помощью команды sudo.

Установка Apache

Установка веб-сервера предельно проста:

apt-get install apache2

Для проверки его работы наберите в браузере IP-адрес сервера, и вы увидите стандартную страницу заглушку:

LAMP-Debian-Ubuntu-001.jpgДля Apache 2.4 она выглядит несколько иначе, но смысл от этого не меняется.

Настройки сервера содержатся в /etc/apache2/apache2.conf, к которому подключаются дополнительные файлы из директорий mods-enabled и sites-enabled. При этом никто не мешает вам внести все указанные настройки непосредственно в apache2.conf — все будет работать, но это резко снижает удобство администрирования, так как требует постоянной правки основного файла конфигурации, в то время как настройки во внешних файлах легко включаются и отключаются при помощи специальных инструментов.

С этой целью каталоги mods-enabled и sites-enabled не содержат файлов конфигурации, а только символические ссылки на директории mods-available и sites-available, где следует располагать сами файлы. Как понятно из названий, в данных каталогах находятся настройки модулей и виртуальных хостов. Если с модулями дело приходится иметь редко, то управлять таким образом виртуальными хостами, т.е. сайтами, очень удобно.

Подробно о виртуальных хостах и расположении содержимого сайта мы уже писали в статье по Lighttpd, все сказанное там справедливо и для нашего случая. Вы вольны выбрать любую схему размещения данных, мы же предпочитаем хранить содержимое сайтов внутри /var/www в папках с именем домена.

Следующий вопрос, который следует решить, это права доступа к файлам и папкам сайта. По умолчанию их владельцем должен являться веб-сервер (пользователь и группа www-data), в противном случае скрипты могут работать неожиданным образом или не работать вообще. Более удобно и безопасно запускать содержимое сайтов от имени пользователя, а не веб-сервера. Для этого установим следующий пакет:

apt-get install apache2-mpm-itk

В Ubuntu 14.04 при установке данного пакета вы можете столкнуться с ошибкой:

dpkg: error processing package apache2-mpm-itk (--configure):
проблемы зависимостей -- оставляем не настроенным

Это известный баг, для его исправления выполните:

a2dismod mpm_event
apt-get install -f

Если мы заглянем в папку sites-enabled, то увидим там уже готовую конфигурацию для сайта по умолчанию, т.е. того, что будет показано при наборе IP-адреса сервера. Данная настройка указывает на папку /var/www или /var/www/html для Apache 2.4, где расположена страница заглушка. После того как вы добавите свои сайты, выводиться будет первый по списку сайт.

Допустим мы хотим разместить на нашем сервере содержимое сайта example.com, сначала создадим необходимые директории и сделаем их владельцем пользователя, который будет работать с сайтом:

mkdir /var/www/example.com
chown andrey:andrey /var/www/example.com

Теперь создадим файл виртуального хоста и приступим к его заполнению:

touch /etc/apache2/sites-available/example.com

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

touch /etc/apache2/sites-available/example.com.conf

Внутри разместите следующий текст:

<VirtualHost 1.2.3.4:80>
ServerName example.com
ServerAdmin mail@example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
CustomLog ${APACHE_LOG_DIR}/example.com.access.log combined
ErrorLog ${APACHE_LOG_DIR}/example.com.error.log
AssignUserID andrey andrey
<Directory /var/www/example.com>
Options -Includes -Indexes -ExecCGI
AllowOverride All
</Directory>
</VirtualHost>

Разберем содержимое более подробно. Начинается секция виртуального хоста с ее определения <VirtualHost 1.2.3.4:80>, где указывается IP-адрес и порт, на котором данный хост работает, если вы хотите принимать соединения на всех сетевых интерфейсах, то вместо адреса поставьте «звездочку» — *. Внутри секции располагаются следующие директивы:

  • ServerName — имя виртуального хоста, должен иметь значение полного доменного имени (FQDN), в нашем случае example.com, определяет, какое доменное имя обслуживает данный виртуальный хост.
  • ServerAdmin — контактный адрес электронной почты администратора домена, включается в сообщения об ошибках веб-сервера, рекомендуется завести для этих целей отдельный ящик.
  • ServerAlias — алиас имени хоста, обязательно значение www.example.com, чтобы ваш сайт работал как с www, так и без.
  • DocumentRoot — корневая папка виртуального хоста, указываем директорию размещения сайта, т.е. /var/www/example.com
  • CustomLog — имя и расположение лога доступа, переменная ${APACHE_LOG_DIR} указывает на стандартную директорию логов веб-сервера, это позволяет использовать стандартный механизм ротации логов для всех сайтов, в имени лога рекомендуем указывать имя хоста, чтобы сразу было понятно где какой лог. Не забудьте в конце опцию combined, данная опция указывает формат лога и задается в apache2.conf.
  • ErrorLog — имя и расположение лога ошибок, полностью аналогичен логу доступа, но не требуется указывать формат лога.
  • AssignUserID — имя и группа пользователя (через пробел) от имени которых будет работать данный виртуальный хост, задается только если установлен apache2-mpm-itk, в противном случае эта директива не нужна.

Внутри секции виртуального хоста размещаем еще одну секцию <Directory /var/www/example.com>, которая включает директивы, применяемые не к хосту, а к каталогу, в нашем случае к корневому каталогу виртуального хоста. Там располагается директива Options, которая содержит следующие опции (перед каждой из которых ставится + или -, разрешая или запрещая опцию):

  • ±Includes — разрешает / запрещает SSI (Server Side Includes — включения на стороне сервера), в нашем случае выключено в целях безопасности. Имеет смысл включать только в том случае, если ваш сайт явно требует данной опции.
  • ±Indexes — разрешает / запрещает показывать содержимое каталога при отсутствии индексного файла, отключено в целях безопасности.
  • ±ExecCGI — разрешает / запрещает выполнение сценариев CGI, отключаем в целях безопасности.

За ней следует директива AllowOverride, которая устанавливает использование директив из файлов .htaccess, по умолчанию сервер устанавливает для /var/www данную директиву в None, что запрещает использовать директивы .htaccess во всех вложенных директориях. Для того чтобы разрешить использование директив .htaccess установите данную директиву в All, что разрешит использовать в .htaccess любые директивы.

Этим список доступных опций (как и директив) не исчерпывается, но их рассмотрение выходит за рамки данной статьи и будет рассмотрено в отдельном материале. Вы можете самостоятельно ознакомиться с ними в официальной документации.

Закрываем открытые секции: </Directory> и </VirtualHost>, затем сохраняем файл. Конфигурация виртуального хоста готова.

Чтобы включить сайт необходимо сделать символьную ссылку на файл конфигурации в каталоге sites-enabled, а, чтобы выключить — удалить эту ссылку. Это можно сделать вручную, при помощи команды ln -s, или использовать специальную утилиту apache:

a2ensite example.com 

Данная команда включит сайт, для выключения введите:

a2dissite example.com

В качестве опции команде передается имя конфигурационного файла из sites-available, в случае Apache 2.4 без расширения. После каждого такого действия веб-сервер необходимо перезапустить:

service apache2 reload

Чтобы проверить работу виртуального хоста разместите в его корневой директории любой html-файл и обратитесь к серверу по имени домена (при этом А-запись домена должна быть настроена и указывать на ваш веб-сервер).

Например, создадим индексный файл:

touch /var/www/examlpe.com/index.html

И разместим в нем строку:

<body><h1>OK!</h1></body>

В итоге в браузере вы должны увидеть следующее:

LAMP-Debian-Ubuntu-002.jpg

Установка PHP

Если веб-сервер был нужен вам для размещения статического содержимого или сторонних веб-приложений, например, публикации баз 1С:Предприятия, то дальше можно не читать. Но если вы собираетесь создать сайт на основе популярных CMS — вам потребуется поддержка скриптового языка PHP, на базе которого разработаны большинство современных «движков».

Важно! В современных дистрибутивах используется более новая версия PHP7, чтобы работать с новой версией языка вместо php5 в приведенных ниже командах следует указывать php7.0, например, вместо php5-imagick нужно набрать php7.0-imagick

Выполним команду:

apt-get install php5

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

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

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

apt-get install php5-gd

После чего не забудьте перезапустить веб-сервер:

service apache2 reload

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

Установим утилиту и модуль PHP для нее:

apt-get install imagemagick php5-imagick

Для проверки работы PHP создадим в корневой директории сайта специальный скрипт:

touch /var/www/examlpe.com/info.php

И внесем в него следующий текст:

<?php
phpinfo();
?>

Теперь наберем в браузере http://example.com/info.php, в результате работы данного скрипта вы увидите стандартную страницу с информацией о PHP, установленных модулях, настройках и т.д.

Миниатюра изображения для LAMP-Debian-Ubuntu-003.jpg

interface31.ru

1. Постановка задачи

Дано
Debian-сервер «из коробки» (установлен из дистрибутива)

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

  • Ограничить возможность обзора файловой системы определенной папкой для пользователя проекта.
  • Ограничить возможность запуска бинарников пользователями
  • Ограничить возможность открытия портов на сервере (нужно как-то по другому сформулировать)
  • Автоматизировать добавление пользователя в систему: создание папки, конфига apache, пользователей mysql или postgres

2. Решение

  • 2.0 Обновление системы
  • 2.1 SSH
  • 2.2 Файловая система
  • 2.3 Apache
  • 2.3.1 Права пользователей [apache2-mpm-itk ]
  • 2.3.2 Отдельные tmp для каждого сайта
  • 2.3.3 Sendmail
  • 2.4 FTP
  • 2.5 MySQL + Postgres
  • 2.6 Firewall
  • 2.7 chroot
  • 2.8 Автоматизация

2.0 Обновляемся

Ставим свежие версии пакетов. Вот мой список репозиториев:

# file: /etc/apt/sources.list # Yandex deb http://mirror.yandex.ru/debian/ lenny main  deb http://mirror.yandex.ru/debian/ lenny contrib non-free  deb-src http://mirror.yandex.ru/debian/ lenny main  deb-src http://mirror.yandex.ru/debian/ lenny contrib non-free  # Security fix  deb http://security.debian.org/ lenny/updates main  deb http://security.debian.org/ lenny/updates contrib non-free  deb-src http://security.debian.org/ lenny/updates main  deb-src http://security.debian.org/ lenny/updates contrib non-free  
debian:~# apt-get update debian:~# apt-get dist-upgrade

2.1 Генерируем ключи для SSH

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

neoveneficus@book:~$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/neoveneficus/.ssh/id_rsa):  /home/neoveneficus/.ssh/id_rsa already exists. Overwrite (y/n)? y Enter passphrase (empty for no passphrase):  Enter same passphrase again:  Your identification has been saved in /home/neoveneficus/.ssh/id_rsa. Your public key has been saved in /home/neoveneficus/.ssh/id_rsa.pub. The key fingerprint is: cb:07:dd:67:21:37:ab:93:e1:60:40:ce:0e:b8:b8:e3 neoveneficus@book The key's randomart image is: +--[ RSA 2048]----+ | . | | . + | |. . + . + | |.. o . . + + | |+ . o S . o o | |.o . + = . o | |.E . * o | | . o | | . | +-----------------+

Обратите внимание — ключи генерируются на Вашей рабочей машине, а затем публичный ключ заливается на сервер:

neoveneficus@book:~/.ssh$ scp ~/.ssh/id_rsa.pub root@217.212.252.146:.ssh/authorized_keys neoveneficus@book:~/.ssh$ cat ~/.ssh/id_rsa.pub | ssh root@217.212.252.146 "cat > ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys"

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

2.2 Файловая система. Права пользователей.

Поговорим про файловую систему. Я предлагаю выделить для наших сайтов отдельную папку в корне файловой системы.

debian:~# cd /  debian:/# mkdir -m 755 web

Домашние папки наших пользователей будут такого вида:

  • /web/site1
  • /web/site2

Создаем пользователей и расставляем права:

debian:~# useradd site1 -b /web/ -m -U -s /bin/false debian:~# passwd site1 debian:~# chmod 754 /web/site1 debian:~# mkdir -p -m 754 /web/site1/public_html/www debian:~# mkdir -p -m 777 /web/site1/tmp debian:~# chmod +t /web/site1/tmp debian:~# chown -R site1:site1 /web/site1/

Пользователь site1 будет иметь домашнюю папку /web/site1. Ключ -m означает, что папка будет создана автоматически. -U — так же будет создана одноименная группа, куда пользователь будет помещен. Пользователь не будет иметь шелла. Все, что будет доступно из веба — будет находится в папке public_html. Если когда-нибудь захочется иметь поддомены — разместим их в папках рядом с www.

2.3 Apache

2.3.1 Права пользователей. Модификация Apache [apache2-mpm-itk]

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

Для исправления этого недоразумения нам понадобится установить модифицированную версию аpache. Пакет называется apache2-mpm-itk. Установив пакет, мы получим возможность в конфигах файла указывать, от какого пользователя и группы должен работать apache при обработке сайта.

debian:~# apt-get install apache2-mpm-itk

Пользователь и группа задается строкой в конфиге:

AssignUserId site1 site1

В тоже время мы хотим, чтобы, используя web-шелл, нельзя было править файлы нашего проекта, кроме тех, на которыx стоят права o+w.

drwxr-xr-- 2 site1 site1 4096 Мар 5 10:17 . drwxr-xr-x 3 site1 site1 4096 Мар 5 10:14 .. -rwxr-x--- 1 site1 site1 0 Мар 5 10:14 index.php -rwxrw---- 1 site1 site1 0 Мар 5 10:17 tmp.txt

Для этого в нашем конфиге мы будем писать:

AssignUserId www-data site1

Таким образом apache сможет прочитать index.php, выполнить и отдать в браузер, но не сможет изменить его. А tmp.txt изменить сможет.
Важный момент — нужно запретить консоль у пользователя www-data

debian:~# usermod -s /bin/false www-data
2.3.2 Отдельный tmp для каждого сайта

Предотвращаем инклуд сессий с соседнего сайта. + Запрещаем php выходить выше пользовательской домашней дирректории.

В конфиг нашего сайта нужно добавить диррективы open_basedir, upload_tmp_dir, session.save_path

Получаем такой минималистичный конфиг:

# file: /etc/apache2/sites-available/site1 <VirtualHost *:80>  DocumentRoot "/web/site1/public_html/www/"  ServerName "test1"  ErrorLog /web/site1/error_log  CustomLog /web/site1/access_log combined  AssignUserId www-data site1   php_admin_value open_basedir "/web/site1/:."  php_admin_value upload_tmp_dir "/web/site1/tmp"  php_admin_value session.save_path "/web/site1/tmp" </VirtualHost>

После создания конфига нужно сделать сайт активным с помощью команды:

debian:~# a2ensite site1

А затем перечитать конфиги:

debian:~# /etc/init.d/apache2 reload
2.3.3 Sendmail

Почему я вынес Sendmail отдельным пунктом? Потому что по умолчанию он не работал. Пришлось повозится. Я расскажу самый простой способ. Чтобы php умел отправлять письма, проделываем следующие операции.

# file: /etc/php5/apacge2/php.ini [раскомментируем и изменим строку] ++ sendmail_path = /usr/sbin/exim4 -t

Для конфигурации Exim4 (по умолчанию в качестве Mail Transfer Agent используется именно он) существует пакет exim4-config. Воспользоваться им можно так:

debian:~# dpkg-reconfigure exim4-config

После этого вам начнут задавать вопросы. На первый (Общий тип почтовой конфигурации) отвечаем:

  • интернет-сайт; прием и отправка почты напрямую, используя SMTP

А далее жмем Enter до конца настройки. Теперь все должно работать.

2.4 vsftpd

Теперь разберемся с FTP. Для работы был выбран vsftpd.

debian:~# apt-get install vsftpd

Далее меняем конфиг:

# file:/etc/vsftpd.conf listen=YES # Запрещаем анонимный доступ anonymous_enable=NO # Открываем локальным пользователям доступ к домашним директориям по FTP local_enable=YES # Разрешаем команды на запись write_enable=YES  dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES ascii_upload_enable=YES ascii_download_enable=YES ftpd_banner=Welcome to our FTP service.  # "Запираем" пользователей в домашних папках chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd  pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/vsftpd.pem

Говорим демону vsftpd перечитать конфиги:

debian:~# /etc/init.d/vsftpd reload

2.5 MySQL + PostgreSQL

Ставим MySQL

debian:~# apt-get install mysql-server phpmyadmin

Создаем нового пользователя.

debian:~# echo "CREATE USER 'site1'@'localhost' IDENTIFIED BY 'Пароль_для_пользователя_site1'; GRANT USAGE ON * . * TO 'site1'@'localhost' IDENTIFIED BY 'Пароль_для_пользователя_site1' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; CREATE DATABASE IF NOT EXISTS site1 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; ; GRANT ALL PRIVILEGES ON site1 . * TO 'site1'@'localhost';" | mysql --user=root --password=Пароль_mysqlroot mysql

Ставим Postgres

debian:~# apt-get install postgressql phppgadmin

Меняем пароль на пользователя postgres:

debian:~# echo "password" | sudo -u postgres psql Enter new password: Новый_пароль_postgres  Enter it again: Новый_пароль_postgres

После установки рутового пароля для пользователя postgres нам мнужно поправить конфиг. По умолчанию любой локальный пользователь может запустить psql с правами суперпользователя без ввода пароля. Исправляем.

#file /etc/postgresql/8.3/main/pg_hba.conf -- local all postgres ident sameuser -- local all all ident sameuser ++ local all postgres md5 ++ local all postgres md5 

В /etc/phppgadmin/apache.conf открываем доступ извне.

order deny,allow deny from all allow from 127.0.0.0/255.0.0.0 ::1/128 # allow from all

Меняем на:

order deny,allow deny from all allow from 127.0.0.0/255.0.0.0 ::1/128 # allow from all

Говорим apache перечитать конфиги:

debian:~# /etc/init.d/apache2 reload

У постгрес есть один нюанс. Юзеры всегда видят названия соседних БД. Чтобы они не мозолили глаз нашим пользователям в phppgadmin, правим конфиг:

# file:/etc/phppgadmin/config.inc.php -- $conf['owned_only'] = false; ++ $conf['owned_only'] = true;

Пользователи создаются такой командой:

debian:~# echo "CREATE USER site1 WITH PASSWORD 'Пароль_для_пользователя_site1' NOCREATEDB NOINHERIT NOCREATEUSER ; CREATE DATABASE site1 owner site1;" | sudo -u postgres psql

2.6 Firewall

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

debian:~# apt-get install arno-iptables-firewall   * Do you want to manage the firewall setup with debconf? : Да  * External network interfaces: eth0  * Open external TCP-portrs: 21 22 53 80 443 3128 5432 5001 5900 6881:6889  * Open external UDP-portrs: 53 3130 5001 6881:6889  * Internal network interfaces: <в нашем случае оставляем пустым>  * Соглашаемся на перезагрузку firewall'а.

2.7 Запуск Apache2 в chroot среде [посредством libapache2-mod-chroot]

Что такое chroot’инг? Это создание специальной среды (песочницы), изолированной от окружения. Скажем, процесс apache не должен иметь доступа к папкам home. В тоже время в изолированную среду нужно брать все, что нужно для работы. Самый простой способ — это воспользоваться libapache2-mod-chroot.

debian:~# apt-get install libapache2-mod-chroot debian:~# a2enmod mod_chroot debian:~# /etc/init.d/apache2 restart

Chroot’инг — это интересная тема с кучей своих проблем, связанных с тем, что помимо apache обычно требуется куча дополнительных программ, библиотек и средств для работы. Поэтому я не буду делать статью в статье, и отправлю Вас на отличный материал по этой теме. Используйте программу ldd и берите с собой в изолированное окружение все, что нужно именно Вам.

sudouser.com/zapusk-web-servera-apache2-v-srede-chroot-v-debian-i-ubuntu.html

2.8 Автоматизация добавления новых пользователей

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

Постскриптум

Буду рад замечаниям. Особенно интересны мысли по поводу chroot. Кто знает простые рецепты?

habr.com

Обновляем репозитории

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

apt-get update

Обновляем репозитории в Debian 7

Установка Apache в Debian 7

Установка Apache не должна вызвать сложностей. Все сводится к вызову одной единственной команды (репозитории классная вещь):

apt-get install apache2

Поле ее выполнения будет выдано сообщение об отсутствии некоторых пакетов и предложение на загрузку. Соглашайся, и приготовься пару минут лицезреть бегущие в консоли надписи. После завершения процесса установки протестируй работоспособность web-сервера. Для этого открой браузер и перейди по адресу http://ip_твоего_сервера. Если ты поднимаешь хост в DigitalOcean, то IP адрес ты узнаешь из панели управления дроплетами или выполнив в консоле команду:

Устанавливаем Apache в Debian 7

ifconfig eth0 | grep inet | awk '{ print $2 }'

Корректно установленный web-сервер выдаст страницу с надписью “It works!”.

Проверка работоспособности Apache в Debian 7

Установка MySQL в Debian 7

Следующим компонентом, который нам предстоит установить, будет СУБД MySQL. Для загрузки и установки MySQL требуется выполнить опять же одну команду:

apt-get install mysql-server

Менеджер пакетов нам также предложит загрузить и установить зависимые компоненты, а после их загрузки будет запущена конфигурационная утилита. Первым ее вопросом будет запрос пароля для учетной записи “root”. Придумываем пароль посложней и жмем “enter”. Советую вводить пароль с клавиатуры самостоятельно, а не из буфера. Одина раз, таким образом я ввел ошибочный пароль и потом пришлось переустанавливать MySQL.

После завершения установки MySQL тебе потребуется выполнить сценарий: mysql_secure_installation. Для этого в окне терминала напиши команду:

mysql_secure_installation

Установка mySQL в Debian 7

Сценарий сразу запросит у тебя пароль от учетной записи «root», который ты задавал во время установки. Вводи пароль и жми клавишу “Enter”. Если пароль был введен правильно, сценарий предложит его сменить. Поскольку ты наверняка придумал хороший пароль во время установки, вводи «N», тем самым отказавшись от смены пароля.

Запускаем сценарий для завершения установки mySQL в Debian 7

Следующим вопросом будет предложение на удаление анонимных пользователей. На боевом хостинге они не нужны, поэтому соглашаемся (вводим в терминале “Y”).

Далее сценарий предложит заблокировать root пользователю возможность подключаться с удаленных хостов. Для безопасности это очень хорошо, поэтому соглашаемся. Пользователь с полными правами должен подключаться к серверу баз данных только локально. Вводим «Y» и жмем клавишу «Enter». В очередном вопросе мастер предложит удалить тестовые базы. Они нам не нужны, поэтому соглашаемся. Последний вопрос будет связан с разрешение перезагрузки таблицы привилегий. Соглашаемся, и все наши ответы на предыдущие вопросы немедленно вступят в силу.

Завершение установки mySQL в Debian 7

Устанавливаем PHP5 в Debian 7

Последним шагом будет установка PHP. Выполняется она также просто, как и установка Apache. Вводим в окне терминала команду:

apt-get install php5 php-pear php5-mysql

Установка php5 в debian 7 занимает немного времени. Чтобы убедиться в корректности установки интерпретатора, потребуется перезапустить Apache. PHP взаимодействует с WEB-сервером посредством модуля, который будет автоматически запущен с перезапуском Apache. Для перезапуска Apache используй команду:

service apache2 restart

Проверяем работоспособность PHP

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

nano /var/www/phpinfo.php

Она запустит текстовый редактор «nano». В нем вводим стандартную, для проверки работы интерпретатора PHP строчку:

<?php  phpinfo(); ?>

Сохраняем изменения в файле (ctrl + o) и закрываем файл (ctrl + x). Этим нехитрым действием мы создали файл по пути /var/www/phpinfo.php – папке хоста по умолчанию. Соответственно, чтобы обратиться к данному файлу удаленно мы должны вбить в браузере:

http://<ip_сервера>/phpinfo.php

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

PHP готов к работе

Готов к труду и обороне

На этом шаге можешь считать, что WEB-сервер на Debian 7 полностью готов к работе. Ключевые компоненты установлены и готовы обслуживать толпы клиентов. Для полного счастья не хватает FTP доступа и удобной панели управления базами данных. Об этом, я расскажу завтра.

iantonov.me


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.