Настраиваем сервер для LiveStreet. Часть V. Apache.

Предыдущие части:

Начиная с этого момента настраивать окружение можно по разному. Глобально можно свести к трём тезисам:
  • Применить light HTTP сервер для раздачи статики и проксирования тяжёлых запросов
  • Применить fast cgi PHP
  • Применить кэширование данных в оперативной памяти
Для каждого пункта возможно использовать разный софт и/или различные связки программ. И во всех случаях получить хороший результат.

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

В любом случае, я описываю именно то окружение, которые использую сам, и субъективно считаю наилучшим по совокупности достоинств. Это проверенное и работающее решение: nginx+apache+php-fpm

Устанавливаем:
apt-get install apache2 apache2-doc apache2-utils

apt-get -t squeeze-backports install libapache2-mod-rpaf

Во время установки будет писать что-то по поводу «Could not reliably determine the server's fully qualified domain» — игнорировать.

Выключаем дефолтный сайт и включаем/выключаем кое-какие моды:
a2dissite default

a2enmod rewrite headers actions

a2dismod autoindex deflate status auth_basic authn_file authz_groupfile authz_user

В конфигурационный файл /etc/apache2/httpd.conf (который будет, по идее, пустым) вносим единственную строку:
ServerName localhost
В конфигурационном файле /etc/apache2/ports.conf меняем значения опций NameVirtualHost и Listen на следующие:
NameVirtualHost 127.0.0.1:8080
Listen 127.0.0.1:8080

Теперь можно установить modsecurity. Я, настоятельно, рекомендую.

Ставим mod-security(он ругнётся):
apt-get -t squeeze-backports install libapache2-modsecurity


Правим конфигурационный файл /etc/apache2/mods-available/mod-security.load. Первая строка должна выглядеть так(исправление — прописать полный путь к libxml2):
LoadFile /usr/lib/libxml2.so.2

Включаем его конфигурацию, по умолчанию:
mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf


Создаём директории для нашего сайта (имя директории сайта совпадает с доменом, для удобства):
mkdir -p /var/www/superls.ru/public

mkdir -p /var/www/superls.ru/logs


Замечание: здесь и далее предполагается что superls.ru — доменное имя нашего сайта.

Теперь, создаем конфигурационный файл /etc/apache2/sites-available/superls.ru для нашего сайта:
vim /etc/apache2/sites-available/superls.ru

Название файла, опять для удобства, совпадает с именем домена. Конфигурация изначально предполагает наличие кое-чего, что ещё не стоит, потом разберемся. Внимание на директиву ServerAdmin она должна быть разумной. Содержимое:
Header always unset "X-Powered-By"
ServerSignature Off
ServerTokens Prod

<VirtualHost 127.0.0.1:8080>

     ServerAdmin server@superls.ru
     ServerName superls.ru
     DocumentRoot /var/www/superls.ru/public/
     ErrorLog /var/www/superls.ru/logs/apache.error.log
     CustomLog /var/www/superls.ru/logs/apache.access.log combined
     UseCanonicalName Off

     <IfModule mod_fastcgi.c>
        AddHandler php-fastcgi .php  

        Action php-fastcgi /usr/sbin/php-fpm.fcgi  
        ScriptAlias /usr/sbin/php-fpm.fcgi /usr/sbin/php-fpm  

        <Directory /usr/sbin>  
           Options ExecCGI FollowSymLinks  
           SetHandler fastcgi-script  
           Order allow,deny  
           Allow from all  
        </Directory>  
     </IfModule>

</VirtualHost>


Активируем сайт:
a2ensite superls.ru

Рестартуем Apache, для уверенности:
/etc/init.d/apache2 restart


Теперь нам нужно убедится что оно работает. Для этого добавим(временно!!! ) наш сайт в конфигурационный файл в /etc/hosts вписать туда:
127.0.0.1 superls.ru

Создаём тестовый файл /var/www/superls.ru/public/test.html:
vim /var/www/superls.ru/public/test.html

Произвольного содержания. Например пишем там:
Ты установил Apache2, дружок. Возьми с полки пирожок.

Запускаем lynx одноименной командой:
lynx

жмем кнопку G набиваем адрес (с http:// ): superls.ru:8080/test.html смотрим на наш спич и радуемся :)

Продолжение в следующей части:
Часть VI. PHP.

16 комментариев

avatar
Header always unset "X-Powered-By"

Зачем? )
avatar
Я лично следую правилу «скрывать всё что можно» :)
avatar
Например что вы тут хотите скрыть?
avatar
В последних версиях LS туда подставляет своё значение.
Для php — в php.ini есть специальная настройка
expose_php = Off
. Она скроет этот заголовок. Так что нет смысла подключать доп. модуль апача ради только скрытия одного заголовка.
А ещё,
ServerSignature Off
ServerTokens Prod

Это в принципе указывается в /etc/apache2/conf.d/security.
avatar
Ну собственно LS я и хочу, в частности, убрать. Плюс был у меня опыт когда еще софт на сервере такие заголовки добавлял, так что, признатся, я таскаю по привычке. И опыт когда expose_php = Off убирал заголовки PHP но не приложений был тоже. Может от версий зависит, не знаю. В данном конкретном случае может и не надо. Я протестирую.
avatar
Тогда другой совет. Раз модуль подключен и используется в конфигах, заключить его в
<IfModule mod_headers.c> </IfModule>
. Иначе не дай бог из-за этого самого мало нужного бэкэнд свалится в 500.
И ещё, я что-то не понял, а к чему у вас
<Directory /usr/sbin>

Там-же системные бинарники лежат.
avatar
Протестировал.
expose_php = Off заголовок LS не убирает, что кстати никто и не обещал, в документации.
Можно, конечно, просто закомментировать его в index.php — но это плохой путь, т.к. модификация оригинального кода движка.
Либо использовать mod_headers как сделано у меня, что Imho правильнее.
Либо на уровне nginx тоже, наверное, можно решить.

IfModule mod_headers.c на мой взгляд излишество — мы же знаем что мы установили, а что нет. Это не тот случай когда нужны дополнительные проверки.

Вся секция mod_fastcgi.c взята откуда-то, уже не помню откуда, с минимальными изменениями. Работает, как часы, менять ничего там не хочу в силу отсутствия 100% понимания. Если есть приложения что там поменять — давайте. Протестирую, если будет работать и выглядеть лучше — поменяем :)
avatar
expose_php = Off заголовок LS не убирает, что кстати никто и не обещал, в документации.
Ага, expose_php убирает пхпшный заголовок X-Powered-By. Тот, что выставляет LS, убирать какраз разве в движке. Ну одну строчку закоментировать — это ерунда. Некоторые тут гораздо больше меняют )
Либо на уровне nginx тоже, наверное, можно решить.
Можно. proxy_hide_header, fastcgi_hide_header. Или модулем headers-more.
Это не тот случай когда нужны дополнительные проверки.
Всегда лучше учитывать все проверки, поверьте.
Если есть приложения что там поменять — давайте.
fastcgi модуль апача я никогда не использовал, и даже вникать сейчас как-то мало охота в него. Да и другими делами тут занят пока )
avatar
Добрый день!

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

А теперь несколько ламерксих вопросов.

ние на директиву ServerAdmin она должна быть разумной

1. Что значит «разумной»? В директиве указывается е-маил куда будут приходить собщения о проблемах с сервиром или что?

И потом у меня такая проблема. У меня сейчас есть сайт, но он на шаред-хостинге. Хостер уже ругается на нагрузку, пришлось перевестись на дорогой тариф. Собственно, поэтому сейчас вожусь с настройкой VPS.

В общем, для начала хочу повесить сайт на тестовый домен, однако все настройки (имена папок итп) делаю для основого домена.

Так вот, как настроить /etc/apache2/sites-available/superls.ru для того, чтобы можно было обращаться по тестовому домену. Или например, можно было обращаться по нескольким доменам?
avatar
Правильно ли я понимаю, что нужно использовать ServerAlias?

ServerName superls.ru
ServerAlias superls.ru www.superls.ru, test.my, www.test.my


Т.е. если прописать это в конф. файле, то сайт будет окрываться по адресам: superls.ru www.superls.ru, test.my, www.test.my?
avatar
Я бы просто в ServerName вписал бы пока тестовый домен и не мучался, когда переезд завершится — сменить, да и всё.
avatar
Просто этот e-mail (из ServerAdmin) будет фигурировать на станицах-ошибках aпача по умолчанию. Так что ерунду там лучше не писать.
avatar
Да, спасибо, уже разобрался.
avatar
Не будет, т.к у вас указано,
ServerSignature Off
, а должно быть хотя-бы EMail или On.
Плюс, чтобы там оно было показано, не нужно менять странички ошибок.
avatar
В x64 существует баг с modsecurity, связанный с отличием путей к библиотекам, из-за которого не подключается libxml. Для исправления первым делом нужно определить, где находится Ваша библиотека libxml2.so.2:

updatedb
locate libxml2.so.2

Возможны 2 варианта: /usr/lib/x86_64-linux-gnu/libxml2.so.2 или /usr/lib/i386-linux-gnu/libxml2.so.2. Далее необходимо отредактировать файл /etc/apache2/mods-enabled/mod-security.load, заменив путь, по которому расположена подключаемая библиотека с /usr/lib/libxml2.so.2 на путь к библиотеке в Вашей системе.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.