четверг, 24 декабря 2009 г.

freebsd отключить sendmail

Собственно проблемма в том, что на моем сервере sendmail не нужен, а он ставится на фряху по умолчанию и мне хотелось бы его выключить, чтобы не валил кучу лишних уведомлений. Также может понадобиться отключить sendmail если вы хотите установить другой MTA, например postfix.

Итак, как написано в руководстве по freebsd, необходимо прописать следующие строки в файле /etc/rc.conf

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
ежели вы хотите использовать sendmail только для исходящей почты и не принимать входящую, то достаточно поставить только строку
sendmail_enable="NO"

четверг, 19 ноября 2009 г.

Настройка виртуальных хостов на одном айпи с использованием связки apache и nginx

У меня настроена связка Апача и Nginx на системе с одним выделенным айпи адресом, где Апач обрабатывает динамику, а Nginx выдает статику, то есть Нгиникс проксирует данные для Апача. Подробнее о настройке веб сервера вы можете прочитать в соответствующей статье в этом блоге. Требовалось завести в системе пачку хостов с различием по доменным именам, например, host.ru, host2.ru и так далее.

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

Настройка виртуальных хостов в Nginx.

server {
listen 85.249.???.???:80;
server_name host.spb.ru www.host.spb.ru;
location / {
proxy_pass http://85.249.???.???:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* \.(html|jpeg|jpg|gif|png|css|js|pdf|txt|tar)$ {
root /usr/local/www/apache22/data/host.spb.ru;
}

Как видно, у нас прописан адрес и порт, на котором будет слушать нгиникс, имя хоста и имя хоста с www, это необходимо для корректного индексирования сайта поисковиками (по крайней мере, это верно для моей системы). Далее идут настройки для связки с Апачем. В строчке location указываются расширения файлов, которые будет выдавать Nginx, строка root указывает путь до директории, где хронятся файлы, относящиеся к данному хосту.

Настройка виртуальных хостов в Апаче.


DocumentRoot "/usr/local/www/apache22/data/host.spb.ru/"
ServerName host.spb.ru
ServerAlias www.host.spb.ru


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

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

www.host.spb.ru CNAME host.spb.ru

Чтобы запросы с www отправлялись на этот же сервер.

Если вы нигде не ошиблись, то все должно работать! :-) Удачи!

среда, 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"

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

пятница, 3 июля 2009 г.

Настройка сети

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

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

ifconfig_fxp0="inet 84.246.77.15 netmask 255.255.255.0"
ifconfig_rl0="inet 192.168.0.55 netmask 255.255.255.0"

гду fxp0 - внешний интерфейс, rl0 - внутренний. В данном примере сервер является шлюзом между сетью интернет и внутренней сетью. Поэтому для того, чтобы внутренние пользователи могли получить доступ к сети Интернет, на сервере необходимо сконфигурировать службу NAT. Для этого в rc.conf необходимо добавить следующие строки:

defaultrouter="84.246.77.1" - указываем роутер для отправки пакетов в инет (выдается провайдером)
gateway_enable="YES" - указываем, что наш сервер является шлюзом

ipnat_enable="YES" - включаем систему натирования, которая будет автоматически загружаться
ipnat_program="/sbin/ipnat -CF -f" - флаги -CF очищают таблицу правил NAT, а -f указывает, чт нужно загрузить правила из файла
ipnat_rules="/etc/ipnat.rules" - путь к файлу с правилами
ipnat_flags=""

Теперь при перезагрузке системы NAT будет подниматься автоматически. Осталось составить таблицу правил натирования и сохранить её в файл /etc/ipnat.rules. В простейшем случае она будет состоять из одной строки:

map fxp0 192.168.0.0/24 ->85.249.77.16/32

то есть при запросах из подсети 192.168.0.0/24 в интернет пакетам будет присваиваться адрес отправителя 85.249.77.16/32. Конечно же будет производиться и обратная трансляция адресов.

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

rdr fxp0 0.0.0.0/0 port 26000 -> 192.168.0.10 port 26000 tcp

Более подробно про составление правил можно почитать в файлах из папки /usr/share/examples/ipfilter/. Осталось только стартануть ipnat командой

/etc/rc.d/ipnat start

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

/sbin/ipnat -CF -f /etc/ipnat.rules

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

ifconfig fxp0 ether 10-0F-3D-1A-E3-45

На этом вроде все.

Начало

Описывать процесс установки особого желания нет, так как он элементарен, но поделиться тем где можно эту самую FreeBSD вполне себе хочется. Кроме официального сайта, дистриб фряхи можно найти в разделе яндекса mirror. Яндекс меня приятно удивил коллекцией дистрибутивов и скоростью их раздачи.

А теперь пару слов о том, что можно сделать сразу после установки новой системы. Лично я прежде чем что-либо устанавливать, предпочитаю обновить порты (коллекция программ, оптимизированых для FreeBSD). Для этого можно использовать команды:

portsnap fetch
- загружает дерево портов в заархивированном виде,
portsnap extract
- распаковывает и переписывает дерево портов.
В первую очередь стоит устанавливать файловый менеджер Midnight Commandeer (mc). Чтобы узнать где находится соответствующий порт, можно выполнить команду
whereis mc

однако, с большой долей вероятности, он окажется в директории /usr/ports/misc/mc. Переходим в эту директорию и выполняем команду
make

появится окошко с настройками, где все можно оставить по умолчанию. После того как вы выбирете OK, mc скомпилируется. Для окончательной установки нужно выполнить команду
make install

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