среда, 12 августа 2009 г.

Установка и базовая настройка веб-сервера

24.07.2009
установка apache+nginx+mod_rpaf+mysql+php+eAccelerator

Вначале просто установим все необходимые компоненты. Естественно из портов. На всякий случай напомню нужные команды:

make
make install

Итак, вот список путей до портов, которые будем устанавливать:

/usr/ports/www/apache22 (текущая версия 2.2.11)
/usr/ports/www/nginx (0.7.61)
/usr/ports/www/mod_rpaf/ (видимо 0.6)
/usr/ports/databases/mysql50-server/ (5.0.83, уже существуют более поздние версии, ищите рядом)
/usr/ports/lang/php5/ (5.2.10)
/usr/porst/lang/php5-extension (следует выбрать необходимые пункты, не забыв про модуль для mysql)
/usr/ports/www/eaccelerator/(0.9.5.3)

Также может понадобиться:

/usr/ports/databases/mysql50-client/

Стоит установить и вот это тоже:

/usr/ports/databases/mysql50-scripts/

eAccelerator - система, которая ускоряет выполнение php скриптов вплоть до 10 раз за счет их компилирования и хранения в памяти.

mod_rpaf - так как у нас nginx стоит фронтэндом для apache, то запросы приходящие на апач имеют айпи адрес такой же как у самого сервера, что не позволяет нормально вести статистику посещений (например). mod_rpaf исправляет данную неприятность.

После установки, которая не должна вызвать проблем перейдем к настройке. Начнем с mysql:

1. Создаем конфигурационный файл для mysql на основе одного из типовых:

cp /usr/locale/share/mysql/my-small.cnf /etc/my.cnf

2. Добавляем в него строки для настройки ведения логов и в целях безоасности привязываем мускуль к локальному хосту:

[mysqld]
log=/var/log/mysql.log
bind-address=127.0.0.1

3. Создаем файл для лога и выставляем ему права:

touch /var/log/mysql.log
chown mysql:mysql /var/log/mysql.log

4. Стартуем MySQL:

/usr/local/etc/rc.d/mysql-server start

5. Используем скрипт для настройки безопасности мускуля:

/usr/local/bin/mysql_secure_installation

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

Теперь перейдем к настройке mod_rpaf. Собственно, настраивать тут нечего, просто нужно добавить несколько строчек в конфигурационный файл апача:

1. Открываем файл /usr/local/etc/apache22/httpd.conf и дописываем в соответствующий раздел строку:

LoadModule rpaf_module libexec/apache22/mod_rpaf.so

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

2. Там же, чуть ниже вписываем следующее:

RPAFenable On
RPAFsethostname On
RPAFproxy_ips 84.238.71.16 # IP нужно сменить на адрес вашего сервера
RPAFheader X-Forwarded-For

С mod_rpaf покончено, переходим к PHP. Тут и того меньше, просто нужно создать файл /usr/local/etc/php.ini из файла /usr/local/etc/php.ini-recommended c помощью команды:

cp /usr/local/etc/php.ini-recommended /usr/local/etc/php.ini

На очереди у нас стоит eAccelerator.

1. Для того, чтобы он заработал, в только что созданый php.ini добавляем следующие строки:

extension="eaccelerator.so"
eaccelerator.shm_size = "160"
eaccelerator.cache_dir = "/var/cache/php-eaccelerator"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.debug = 0
eaccelerator.log_file = "/var/log/eaccelerator_log"
eaccelerator.name_space = ""
eaccelerator.check_mtime = "1"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "3600"
eaccelerator.shm_prune_period = "0"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
eaccelerator.keys = "none"
eaccelerator.sessions = "none"
eaccelerator.content = "none"
eaccelerator.allowed_admin_path = ""

2. Создаем директорию для кэша и выставляем ей права:

mkdir /var/cache/php-eaccelerator
chmod 777 /var/cache/php-eaccelerator

Теперь настроим главных виновников торжества - nginx и apache. Начнем с апача. Как вам уже известно, его конфигурационный файл можно найти в директории /usr/local/etc/apache22/ и называется он httpd.conf. Нам необходимо добиться того, чтобы апач правильно понимал что делать с php-скриптами, а также повесить его на нестандартный порт, например на порт 8080. Итак, приступим:

1. Находим строку, начинающуюся с Listen и приводим её к следующему виду:

Listen 84.238.71.16:8080 # необходимо исправить на айпи-айдрес вашего сервера

2. Находим раздел начинающийся с и вставляем туда следующее:

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

3. Находим раздел и добавляем к строке начинающейся с DirectoryIndex следующее: index.php index.phps

Все, начальная настройка апача закончена. Остался только nginx. Нужно выполнить следующие шаги:

1. Находим раздел server, в нем правим строки listen и server_name:

listen 84.238.71.16:80; # ip адрес вашего сервера и стандартный http порт 80
server_name gesundes.org.ru www.gesundes.org.ru; # ваш домен с www и без

2. Находим (или создаем) подраздел location (находится внутри раздела server) и вставляем туда:

location / {
proxy_pass http://84.238.71.16:8080/; # не забываем менять ip-адрес
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

3. Добавляем еще один подраздел:

location ~* \.(jpeg|jpg|gif|png|css|js|pdf|txt|tar)$ {
root /usr/local/www/apache22/data/; }

в первой строке указываем расширения файлов, которые будет обрабатывать nginx, остальные файлы будет обрабатывать апач. Во второй строке указывается путь до корневой директории, в которой хранятся файлы, относящиеся к вашему сайту. По умолчанию, апач использует директорию /usr/local/www/apache22/data/ поэтому в для nginx нужно указать такуюже.

Осталось только запустить все необходимые сервисы. MySQL уже запущен, теперь нужно позаботиться о apache и nginx. Выполним следующие команды:

/usr/local/sbin/apachectl start
/usr/local/etc/rc.d/nginx start

Стоит помнить, то апач пишет логи в файлы httpd-error.log и httpd-access.log в директории /var/log/. Nginx использует файлы nginx-error.log и nginx-access.log в той же директории.

Для того, чтобы при перезагрузке все установленые сервисы поднимались автоматически, в файл /etc/rc.conf нужно внести изменения:

mysql_enable="YES"
apache22_enable="YES"
nginx_enable="YES"

Веб-сервер установлен и готов к работе.