Настройка web server freebsd

Стандартная установка

Начнем с нуля установку Freebsd 11 на одиночный жесткий диск. Вставляем iso образ в автозагрузку и загружаемся с диска. Нас встречает традиционное окно приветствия с тремя вариантами продолжения:

  1. Install — начать установку системы.
  2. Shell — перейти в консоль.
  3. Live CD — загрузиться в режиме Live CD.

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

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

Теперь выбираем компоненты, которые будут установлены. Я обычно ничего не ставлю, кроме lib32. Все, что нужно, можно потом установить последней версии из интернета.

На следующем этапе выбираем разбивку жесткого диска. Можно вручную указать все необходимые разделы, выбрать размер и т.д. Я обычно этого не делаю и все устанавливаю на одном корневом разделе. Давно уже так поступаю на всех системах и не вижу в этом никаких проблем. Наиболее частая рекомендация — вынести в отдельный раздел все логи, чтобы случайно заполнив все свободное место они не повесили сервер. На практике у меня такого ни разу не было, поэтому считаю лишним каждый раз возиться с разделами ради очень условного удобства. Правда есть нюанс — у меня на всех серверах всегда настроен мониторинг свободного места на жестком диске. Так что я успеваю оперативно среагировать на проблемы со свободным местом. Ну и слежу за ротацией логов само собой, не оставляю их расти до больших размеров.

Так что выбираем первый пункт — Auto (UFS). Установку freebsd 11 на zfs мы рассмотрим позже.

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

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

Длится она буквально несколько минут. Чистая система ставится очень быстро. По ходу дела будет предложено указать пароль для root. Сделайте это. Далее нужно будет выбрать сетевой интерфейс для настройки.

Если у вас их несколько, то выберите тот, который вы хотите настроить для доступа к сети. После выбора интерфейса нужно будет согласиться с настройкой ip адреса на нем. Дальше я выбираю получить настройки по DHCP. Так проще всего. Если вам нужно вручную указать ip адрес, то откажитесь от dhcp и введите сетевые параметры вручную.

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

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

Установка движется к завершению. Нужно указать, какие службы вы хотите запускать автоматически при загрузке системы. Обязательно укажите sshd, чтобы подключаться к серверу удаленно, еще ntpd не помешает. Остальное на ваше усмотрение, я больше ничего не указываю. dumped стоит по-умолчанию, пусть останется.

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

На заключительном этапе вам будет предложено добавить пользователей в систему. Если вы этого не сделаете, то не сможете подключиться по ssh к серверу. По-умолчанию в freebsd пользователю root запрещено подключаться по ssh. Это можно исправить только зайдя локально рутом и отредактировав настройки ssh. Так что создайте хотя бы одного пользователя и добавьте его в группу wheel, чтобы можно было подключиться по ssh и сделать su для получения root доступа.

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

Вы должны загрузиться в свежеустановленной системе Freebsd 11. На этом базовая установка закончена.

5: Настройка маршрутизации IPv4 NAT

FreeBSD включает natd как часть брандмауэра ipfw, который обеспечивает маршрутизацию NAT и может использоваться для работы OpenVPN. Отредактируйте /etc/rc.conf:

Добавьте эти строки в конец файла:

  • firewall_enable включает брандмауэр ipfw, необходимый natd.
  • firewall_type=”open” по умолчанию открывает трафик в брандмауэре.
  • gateway_enable устанавливает в net.inet.ip.forwarding значение 1, что включает маршрутизацию IPv4 в системе.
  • natd_enable включает маршрутизацию NAT.
  • natd_interface – внешний интерфейс.
  • natd_flags делает NAT динамическим, а флаг -m сохраняет номера портов.

Теперь перезагрузите сервер, чтобы загрузить ipfw и natd:

Войдите снова. После перезагрузки не забудьте запустить команду sudo tcsh, чтобы стать пользователем root.

ОПИСАНИЕ

Файл dhcpd.conf содержит информацию о настройкахdhcpd, сервера DHCP разработанного в ISC

Файл dhcpd.conf имеет простой текстовый формат. Разбор файла производится
встроенным в dhcpd парсером. Файл может содержать дополнительные пробелы,
символы табуляции и пустые строки для придания более читабельного вида.
Ключевые слова не чувствительны к регистру. Комментарии могут располагаться
в любом месте, он только не в кавычках. Комментарии начинаются с символа #
и продолжаются до конца строки.

По существу файл состоит из секций-объявлений вида: имя_секции {…}.
В фигурных скобках могут быть заключены другие секции(подсекции) и параметры

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

  • что и как делать (например на какой срок выдавать адрес)
  • делать ли вообще (например выдавать ли адреса неизвестным клиентам)
  • какие дополнительные параметры, кроме IP адреса, предоставлять клиенту
    (например шлюз по умолчанию или адреса серверов DNS).

Секции-объявления используются для:

  • описания топологии сети
  • описания клиентов сети
  • описания адресов которые должны предоставлены клиентам
  • присвоить группу параметров одновременно в нескольким секциям

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

Секции описывающие топологию сети включают следующие подсекции:

shared-network и  subnet.
Если клиентам в подсети адреса назначаются динамически, то
инструкция range должна быть использована в секцииsubnet. Для клиентов со статически назначенными адресами, или для конфигураций
в которых обслуживаются только известные клиенты, для каждого из них должен быть
описан параметр host
Если необходимо присвоить значения параметрам, в нескольких подсекциях,
которые не сгруппированы на основе принадлежности к одной подсети, то их можно
сгруппировать, поместив в секцию group.

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

Иногда случается что в одном физическом сегменте сосуществуют несколько IP подсетей.
Например в организации существует требование использовать 8-битные маски подсетей,
но сеть разрослась до размеров превышающих 254 хоста, в этом случае необходимо использовать
две подсети с 8-битными масками до тех пор пока новый ethernet сегмент не будет добавлен.
В этом случае секции subnet описывающие две эти подсети могут быть заключены в
секцию shared-network.

В некоторых случаях встречаются топологии когда клиенты находятся болле чем в одной
подсети, и в этом случае бывает предпочтительно назначить этим клиентам набор параметров
отличный от тех что назначаются другим клиентам в той же подсети. Клиенты которые
явно объявляются в подсекциях host, могут быть объединены в группу
с помощью объявления group, и в этой секции указываются параметры общие для
всей группы. Для клиентов чьи адреса назначаются динамически не существует способа
назначения параметров всей группе иначе как сгруппировав в соответствии в топологией сети.

Когда клиент загружается, начальные параметры определяются в соответствующем клиенту
объявлении host, затем проверяется секция group (если она существует)
которая содержит в себе host, далее проверяется секция subnet соответствующая
подсети в которой находится клиент, после этого проверяется указаны ли какие-нибудь параметры
в секции shared-network(если есть), содержащей нашу подсеть, ну и наконец
проверяются глобальные параметры, которые могут быть указаны перед всеми объявлениями.

Когда dhcpd ищет секцию host для соответствующего клиента, он следует
следующим правилам:
сперва ищется объявление host где указан параметр fixed-address
и секция subnet или shared network совпадает с подсетью в которой
находится клиент. Если нет соответствующих записей, dhcpd ищет объявление host
без параметра fixed-address. Если подходящих записей не найдено, то dhcpd считает
что нет записей для этого клиента, даже если они есть для этого клиента в другой подсети.

4: Создание клиентских сертификатов

Каждому клиенту также потребуется сертификат и ключ для аутентификации и подключения к VPN. Убедитесь, что вы находитесь в каталоге /usr/local/etc/openvpn/easy-rsa/.

Выполните следующую команду, где clientName – это имя, которое вы хотите использовать для сертификата данного конкретного клиента.

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

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

Примечание: Рекомендуется использовать индивидуальные сертификаты для каждого клиента, и этого OpenVPN требует по умолчанию. Однако в случае необходимости это поведение можно отключить в конфигурации OpenVPN (как – расскажем позже).

Если вы изменили размер ключа (не 2048), вам нужно будет изменить конфигурацию OpenVPN, чтобы она соответствовала имени файла с размером ключа, который вы использовали. Если вы не помните, вы можете уточнить правильное имя файла dh с помощью этой команды:

Теперь отредактируйте файл server.conf:

Замените строку dh dh2048.pem этой строкой:

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

Повторите этот раздел для сертификата каждого отдельного клиента, который вы хотите создать.

6: Настройка маршрутизации OpenVPN и DNS

По умолчанию OpenVPN не настроен для  маршрутизации трафика клиента через VPN. Чтобы трафик шел через OpenVPN, раскомментируйте некоторые строки в файле /usr/local/etc/openvpn/server.conf:

Найдите эти три строки и раскомментируйте их:

Предустановленные DNS-серверы предназначены для OpenDNS, но вы можете установить для них любой DNS (например, Google DNS с 8.8.8.8 и 8.8.4.4).

Опциональные настройки

Вы также можете разрешить клиентам напрямую общаться по IP-адресам друг друга, раскомментировав строку:

Если, как упоминалось ранее, вы хотите использовать один ключ и сертификат для нескольких клиентов (напоминаем, это опасно), раскомментируйте эту строку:

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

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

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

Также доступны дополнительные шифры, такие как aes-256-cbc.

Запуск приложений

Следующим этапом тюнинга ОС является настройка сети и запуск необходимых приложений в файле /etc/rc.conf.

# Задаем имя сервера
hostname="host.domain.com"
# Настраиваем сеть
ifconfig_em0="inet 172.16.1.5 netmask 255.255.255.0"
ifconfig_em1="inet 10.16.1.51 netmask 255.255.255.0"
defaultrouter="172.16.1.1"
# Запуск SSHD при загрузки
sshd_enable="YES"
# Запрещаем SSHD выполнять запросы к DNS
sshd_flags="-u0"
# Отключаем использование USB
usbd_enable="NO"
# Отключаем sendmail sendmail_enable=NONE
# Запускаем ntpd при старте ОС
ntpd_enable="YES"
# Отключаем NFS
inetd_enable="NO"
portmap_enable="NO"
nfs_client_enable="NO"
nfs_reserved_port_only="NO"
nfs_server_enable="NO"
# Небольшая защита от DDOSа
tcp_drop_synfin="YES"
icmp_drop_redirect="YES"
icmp_log_redirect="NO"
# Запускаем систему журналирования
syslogd_enable="YES"
# Указываем syslog сохранять только локальные сообщений
# и не выполняет DNS запросов
syslogd_flags="-s -n"
# Включить fsck при загрузке
fsck_y_enable="YES"
# Выполнять во время загрузки ОС
background_fsck="NO"
# Сохраняем корки ядра
dumpdir="/home"
dumpdev="AUTO"
# Отключить SNMPD
snmpd_enable="NO"
# Настройка фаервола
firewall_enable="YES"
firewall_script="/etc/rc.ipfw"

И напоследок добавим в файл /etc/rc.local скрипты которые нужно выполнить при загрузке.

# Привязывание очередей прерываний сетевых карт к процессорным ядрам
# по мотивам <a href="http://dadv.livejournal.com/139366.html" target="_blank"> этой статьи</a>.
/usr/local/startup/cpuset-emigb.sh

FreeBSD 11: WEB-сервер своими руками. MySQL 5.5 + Nginx + PHP-FPM 5.6

Инструкция по настройке полноценного WEB-сервер на основе FreeBSD 11. В комплекте у нас MySQL 5.5, PHP-FPM 5.6.27 и Nginx. Никаких невероятных откровений по тюнингу и быстродействию Вы здесь не найдёте. Наша цель получить готовый WEB-сервер с полным набором приложений максимально простым путём. Поехали.

Установка MySQL 5.5

Параметр config-recursive позволяет сразу выбрать составляющие всех подтянутых портов, чтобы после их выбора Вам осталось только ждать окончания установки.

Добавляем в автозапуск
Запускаем MySQL сервер:
Проверяем статус MySQL

Если всё хорошо, увидим что-то вроде

pid может быть любой.

Запускаем первоначальную настройку MySQL для удаления тестовых БД и задания пароля:
Проверяем работает ли указанный пароль:

Вводим пароль и видим, что в начале строки появилось

MySQL работает! Идём дальше!

Установка PHP-FPM 5.6

Обязательно ставим галочку Build FPM version. Ждём окончания установки. Ставим все расширения, которые могут нам понадобиться:

Обязательно в расширениях выберите MySQL!

Добавляем PHP-FPM в автозагрузку FreeBSD:
Делаем небольшие правки конфигурационного файла PHP-FPM

Проверим, не ошиблись ли мы во время правки файла

и смотрим статус процесса

Уже 2 шага позади. Двигаемся дальше!

Установка Nginx

  1. Ничего не меняется, идём в порты и ставим
  2. Сразу добавим Nginx в автозагрузку:
  3. Правим nginx.conf. Для тестов сильно править стандартный конфиг мы не будем. Просто отметим места, которые НЕОБХОДИМЫ для запуска Nginx в связке с PHP-FPM. Тюнинг Nginx — отдельная тема! Отметим здесь следующие моменты: в секции localtion добавим index.php. Далее блок, отвечающий за PHP: здесь мы дописываем путь root как у location, к fastcgi_pass дописываем unix:/tmp/php-fpm.sock (который мы указали при настройке PHP-FPM в php-fpm.conf), остальное просто примите на веру!
  4. Проверяем правильность заполнения конфига:

В папке, которая у нас указана как корень сервера, создаём файл index.php, файл index.html удаляем. Содержимое index.php приведено ниже.

Этот файл, при запросе к нему, отдаст Вам всю информацию по серверу.

Запускаем Nginx, проверяем статус

Скрипты

Скрипт инициализации фаервола /etc/rc.ipfw:

#!/bin/sh

WAN="em0"
LAN="em1"
OPEN_PORT="80,443"
IPFW=`which ipfw`
RET=$?

if ; then
echo "IPFW not found."
exit ${RET}
fi

${IPFW} -f flush
${IPFW} -f table 1 flush

${IPFW} add 100 allow ip from any to any via lo0
${IPFW} add 110 deny ip from any to 127.0.0.0/8
${IPFW} add 120 deny ip from 127.0.0.0/8 to any
${IPFW} add 130 allow ip from any to any via ${LAN}
${IPFW} add 140 deny all from table\(1\) to me
${IPFW} add 150 deny all from any to any frag

${IPFW} add 160 allow carp from any to any via ${WAN}
${IPFW} add 180 allow tcp from any to any via ${WAN} established
${IPFW} add 200 check-state
${IPFW} add 210 allow tcp from me to any via ${WAN} setup keep-state
${IPFW} add 220 allow udp from me to any via ${WAN} keep-state
${IPFW} add 230 allow tcp from any to me dst-port ${OPEN_PORT} via ${WAN}
${IPFW} add 240 allow icmp from any to any icmptypes 0,8 via ${WAN}
${IPFW} add 65530 deny ip from any to any

exit 0

Скрипт привязывания прерываний очередей сетевых карт к процессорным ядрам /usr/local/startup/cpuset-emigb.sh:

#!/bin/sh
cpus=`sysctl -n kern.smp.cpus`
DRIVER=`pciconf -l | egrep 'em|igb' | sed -E 's/^(+).*//' | head -n 1`
case "$DRIVER" in
em)
echo $DRIVER
i=1
vmstat -ai | egrep "em:x" | sed -E 's/^irq(+): (em):(+).*/  /' |
while read irq iface queue
do
cpu=$(( $i % $cpus ))
echo "Binding ${iface} queue ${queue} (irq ${irq}) -> CPU${cpu}"
cpuset -l $cpu -x $irq
i=$(( $i + 1 ))
done
;;
igb)
echo $DRIVER
vmstat -ai | sed -E '/^irq.*que/!d; s/^irq(+): igb(+):que (+).*/  /' |
while read irq iface queue
do
cpu=$(( ($iface+$queue) % $cpus ))
echo "Binding igb${iface} queue ${queue} (irq ${irq}) -> CPU${cpu}"
cpuset -l $cpu -x $irq
done
;;
esac

Проверка отказоустойчивости zpool

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

# zpool status -v
  pool: zroot
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        zroot       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            da0p3   ONLINE       0     0     0
            da1p3   ONLINE       0     0     0

errors: No known data errors

Оба диска на месте. Теперь выключим сервер и вынем один из дисков. Посмотрим, как поведет себя сервер.

# zpool status -v
  pool: zroot
 state: DEGRADED
status: One or more devices could not be opened.  Sufficient replicas exist for
        the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
   see: http://illumos.org/msg/ZFS-8000-2Q
  scan: none requested
config:

        NAME                     STATE     READ WRITE CKSUM
        zroot                    DEGRADED     0     0     0
          mirror-0               DEGRADED     0     0     0
            2081140553640658652  UNAVAIL      0     0     0  was /dev/da0p3
            da0p3                ONLINE       0     0     0

errors: No known data errors

Как видно, диска нет, но система благополучно загрузилась и нормально работает. Если мы вернем этот же диск на место и перезагрузимся, то все станет в порядке, никаких лишних движений делать не надо. Но представим, что у нас диск вышел из строя и нам надо установить новый. Вставляем новый чистый диск в сервер и загружаемся. Новый диск получил то же название, что и вышедший из строя — /dev/da0. Разделов на нем нет.

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

# zpool offline zroot da0p3

Пул теперь в таком состоянии:

# zpool status -v
  pool: zroot
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Online the device using 'zpool online' or replace the device with
        'zpool replace'.
  scan: none requested
config:

        NAME                     STATE     READ WRITE CKSUM
        zroot                    DEGRADED     0     0     0
          mirror-0               DEGRADED     0     0     0
            2081140553640658652  OFFLINE      0     0     0  was /dev/da0p3
            da1p3                ONLINE       0     0     0

errors: No known data errors

Скопируем таблицу разделов с живого диска на новый. Посмотрим для начала на нее:

# gpart show
=>      40  20971440  da1  GPT  (10G)
        40      1024    1  freebsd-boot  (512K)
      1064       984       - free -  (492K)
      2048   4194304    2  freebsd-swap  (2.0G)
   4196352  16773120    3  freebsd-zfs  (8.0G)
  20969472      2008       - free -  (1.0M)

Создаем такую же таблицу на новом диске, скопировав ее со старого:

# gpart backup da1 > /root/da1.backup
# gpart restore da0 < /root/da1.backup

Смотрим, что получилось:

# gpart show
=>      40  20971440  da1  GPT  (10G)
        40      1024    1  freebsd-boot  (512K)
      1064       984       - free -  (492K)
      2048   4194304    2  freebsd-swap  (2.0G)
   4196352  16773120    3  freebsd-zfs  (8.0G)
  20969472      2008       - free -  (1.0M)

=>      40  20971440  da0  GPT  (10G)
        40      1024    1  freebsd-boot  (512K)
      1064       984       - free -  (492K)
      2048   4194304    2  freebsd-swap  (2.0G)
   4196352  16773120    3  freebsd-zfs  (8.0G)
  20969472      2008       - free -  (1.0M)

То, что надо. Запишем на новый диск загрузчик:

# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
partcode written to da0p1
bootcode written to da0

Говорим пулу, что мы меняем жесткий диск:

# zpool replace zroot /dev/da0p3
Make sure to wait until resilver is done before rebooting.

If you boot from pool 'zroot', you may need to update
boot code on newly attached disk '/dev/da0p3'.

Assuming you use GPT partitioning and 'da0' is your new boot disk
you may use the following command:

        gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0

Умный zpool сам нам напомнил, чтобы мы не забыли про загрузчик. После замены диска быстро прошел resilver (синхронизация) и пул перешел в состояние ONLINE

# zpool status -v
  pool: zroot
 state: ONLINE
  scan: resilvered 532M in 0h0m with 0 errors on Sat Oct 15 01:29:49 2016
config:

        NAME        STATE     READ WRITE CKSUM
        zroot       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            da0p3   ONLINE       0     0     0
            da1p3   ONLINE       0     0     0

errors: No known data errors

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

Дополнительные материалы по Freebsd

Онлайн курс «DevOps практики и инструменты»

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, научиться непрерывной поставке ПО, мониторингу и логированию web приложений, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

Проверьте себя на вступительном тесте и смотрите программу детальнее по .

Рекомендую полезные материалы по Freebsd:
  • Установка
  • Настройка
  • Обновление
  • Шлюз
  • Прокси сервер
  • Веб сервер NGINX
  • Веб сервер Apache

Описание установки Freebsd 11 на одиночный диск, либо на софтовый raid1, сделанный средствами zfs, которые поддерживает стандартный установщик.

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

Описание и нюансы обновления системы Freebsd с помощью утилиты freebsd-update. Показано пошагово на конкретном примере обновления.

Настройка Freebsd шлюза для обеспечения выхода в интернет. Используется ipfw и ядерный нат, dnsmasq в качестве dhcp и dns сервера. Мониторинг сетевой активности с помощью iftop.

Подробная настройка на Freebsd прокси сервера squid + sams2 — панели управления для удобного администрирования.

Настройка максимально быстрого web сервера на базе Freebsd и nginx + php-fpm. Существенный прирост производительности по сравнению с классическим apache.

Настройка web сервера на Freebsd в связке с apache, nginx, php и mysql. Пошаговая установка и настройка каждого компонента.

Устанавливаем php и phpextensions

Дальше устанавливаем php, настройки оставляем настройки по-умолчанию:

# cd /usr/ports/lang/php5
 # make config-recursive
 # make install clean

После установки создаем файл конфигурации:

# cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

Устанавливаем расширения:

# cd /usr/ports/lang/php5-extensions
# make config-recursive

Помимо настроек по-умолчанию, обязательно добавляем CURL, DOM, POSIX, FTP, GD, HASH, ICONV, XML, JSON, MBSTRING, MYSQL, MYSQLI, OPENSSL, SOCKETS, TOKENIZER, XMLREADER, ZLIB, EXIF, GETTEXT,

# make install clean

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

# cd /usr/ports/www/mod_php5
 # make install clean

Для того, чтобы apache правильно обрабатывал php файлы, необходимо в конфиг httpd.conf добавить следующие строки:

<IfModule mod_php5.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php index.html
</IfModule>

Теперь можно запустить apache и проверить, все ли у нас в порядке. Сначала проверим, нет ли у нас ошибок в конфигурации:

# apachectl -t
AH00526: Syntax error on line 15 of /usr/local/etc/apache24/extra/httpd-vhosts.conf:
Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration

У нас ошибка, модуль mod_rewrite не подключен. Чтобы это исправить, раскомментируем в конфиге апача строку

LoadModule rewrite_module libexec/apache24/mod_rewrite.so

Проверяем снова:

# apachectl -t
AH00557: httpd: apr_sockaddr_info_get() failed for websrv.local
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

Снова ошибка, но не критичная, можно работать и с ней, но мы все равно ее исправим. В фале httpd.conf находим строку со значением ServerName и приводим ее к виду:

ServerName websrv.local:80

Сохраняем файл, проверяем конфигурацию:

# apachectl -t
Syntax OK

Все в порядке, можно стартовать apache:

# /usr/local/etc/rc.d/apache24 start

Проверяем, все ли запустилось:

# ps ax | grep httpd
60555 - Ss 0:00.06 /usr/local/sbin/httpd -DNOHTTPACCEPT
60556 - I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
60557 - I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
60558 - I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
60559 - I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
60560 - I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT

Если получаете что-то подобное, значит все в порядке. Сейчас можно в браузере набрать http://ip-сервера/ и увидеть страничку с одной единственной надписью:

It works!

Это означает, что веб сервер apache работает, все в порядке.

Устанавливаем ftp сервер vsftpd

Начнем нашу настройку с установки ftp сервера vsftpd. Для авторизации мы будем использовать системные учетные записи, анонимный доступ отключим.

Первым делом обновим порты:

После обновления, ставим сервер:

Компоненты оставляем по-умолчанию. Добавляем загрузку vsftpd в /etc/rc.conf:

Редактируем конфиг /usr/local/etc/vsftpd.conf, приводим его к следующему виду:

Проверяем, запустился ли демон:

В ответ должны увидеть что-то похожее:

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

Рекомендую подробнее ознакомиться с настройками сервера, обратить внимание на директивы userlist_enable, userlist_file, chroot_local_uses, chroot_list_enable, chroot_list_file. С помощью них можно ограничивать доступ к серверу и перемещение пользователей по папкам

Вообще, у vsftpd много настроек и возможностей, в интернете достаточно статей на подобную тему. Можно без проблем хранить базу пользователей сервера в mysql. В завершение порекомендую ограничить доступ к ftp через firewall.

Дополнительные материалы по Freebsd

Рекомендую полезные материалы по Freebsd:
  • Установка
  • Настройка
  • Обновление
  • Шлюз
  • Прокси сервер
  • Веб сервер NGINX
  • Веб сервер Apache

Описание установки Freebsd 11 на одиночный диск, либо на софтовый raid1, сделанный средствами zfs, которые поддерживает стандартный установщик.

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

Описание и нюансы обновления системы Freebsd с помощью утилиты freebsd-update. Показано пошагово на конкретном примере обновления.

Настройка Freebsd шлюза для обеспечения выхода в интернет. Используется ipfw и ядерный нат, dnsmasq в качестве dhcp и dns сервера. Мониторинг сетевой активности с помощью iftop.

Подробная настройка на Freebsd прокси сервера squid + sams2 — панели управления для удобного администрирования.

Настройка максимально быстрого web сервера на базе Freebsd и nginx + php-fpm. Существенный прирост производительности по сравнению с классическим apache.

Настройка web сервера на Freebsd в связке с apache, nginx, php и mysql. Пошаговая установка и настройка каждого компонента.

FreeBSD 11: WEB-сервер своими руками. MySQL 5.5 + Nginx + PHP-FPM 5.6

Инструкция по настройке полноценного WEB-сервер на основе FreeBSD 11. В комплекте у нас MySQL 5.5, PHP-FPM 5.6.27 и Nginx. Никаких невероятных откровений по тюнингу и быстродействию Вы здесь не найдёте. Наша цель получить готовый WEB-сервер с полным набором приложений максимально простым путём. Поехали.

Установка MySQL 5.5

Параметр config-recursive позволяет сразу выбрать составляющие всех подтянутых портов, чтобы после их выбора Вам осталось только ждать окончания установки.

Добавляем в автозапуск
Запускаем MySQL сервер:
Проверяем статус MySQL

Если всё хорошо, увидим что-то вроде

pid может быть любой.

Запускаем первоначальную настройку MySQL для удаления тестовых БД и задания пароля:
Проверяем работает ли указанный пароль:

Вводим пароль и видим, что в начале строки появилось

MySQL работает! Идём дальше!

Установка PHP-FPM 5.6

Обязательно ставим галочку Build FPM version. Ждём окончания установки. Ставим все расширения, которые могут нам понадобиться:

Обязательно в расширениях выберите MySQL!

Добавляем PHP-FPM в автозагрузку FreeBSD:
Делаем небольшие правки конфигурационного файла PHP-FPM

Проверим, не ошиблись ли мы во время правки файла

и смотрим статус процесса

Уже 2 шага позади. Двигаемся дальше!

Установка Nginx

  1. Ничего не меняется, идём в порты и ставим
  2. Сразу добавим Nginx в автозагрузку:
  3. Правим nginx.conf. Для тестов сильно править стандартный конфиг мы не будем. Просто отметим места, которые НЕОБХОДИМЫ для запуска Nginx в связке с PHP-FPM. Тюнинг Nginx — отдельная тема! Отметим здесь следующие моменты: в секции localtion добавим index.php. Далее блок, отвечающий за PHP: здесь мы дописываем путь root как у location, к fastcgi_pass дописываем unix:/tmp/php-fpm.sock (который мы указали при настройке PHP-FPM в php-fpm.conf), остальное просто примите на веру!
  4. Проверяем правильность заполнения конфига:

В папке, которая у нас указана как корень сервера, создаём файл index.php, файл index.html удаляем. Содержимое index.php приведено ниже.

Этот файл, при запросе к нему, отдаст Вам всю информацию по серверу.

Запускаем Nginx, проверяем статус

Настройка Nginx

Сначала запустите веб-сервер:

В каталоге /usr/local/etc откройте каталог nginx:

Теперь откройте главный конфигурационный файл Nginx:

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

Раскомментируйте и измените директиву user в начале файла. Веб-сервер должен работать как пользователь www, поскольку так его находит PHP-FPM.

В директиве worker_processes нужно указать количество CPU или ядер системы.

Примечание: Чтобы узнать количество CPU сервера, введите в командную строку sysctl hw.ncpu.

Теперь нужно настроить логирование ошибок при помощи директивы error_log. Укажите путь к логу (/var/log/nginx/error.log) и уровень логирования (info).

В блоке http нужно настроить лог доступа (/var/log/nginx/access.log).

В блоке server нужно отредактировать директиву server_name и указать в ней доменное имя или IP сервера. Также здесь можно настроить доступ к домену с префиксом www.

В главном блоке server нужно настроить директивы root и index. Каталог document root будет находиться в /usr/local/www/nginx, а директива index должна обслуживать файлы index.php прежде index.html и index.htm.

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

В завершение нужно настроить блок location, отвечающий за обработку файлов PHP. Он обрабатывает запросы, которые заканчиваются на .php; он будет обрабатывать только сами файлы, а в случае если файл не найден он вернёт ошибку 404.

Здесь нужно использовать настроенный в php-fpm.conf сокет. Также нужно настроить некоторые другие опции проксирования FastCGI (частично – в файле fastcgi_params). Настройте параметр SCRIPT_FILENAME, чтобы PHP знал, какие файлы выполнять.

Общий вид раскомментированных настроек веб-сервера:

Сохраните и закройте файл.

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

В этом каталоге создайте пустые лог-файлы:

Теперь можно настроить document root. Согласно конфигурации каталог document root находится в /usr/local/www/nginx, но символьная ссылка указывает на каталог /usr/local/www/nginx-dist.

Нужно удалить ссылку и создать новый каталог:

Чтобы протестировать работу веб-сервера, скопируйте файл index.html в новый root-каталог.

Также нужно создать временный файл info.php, чтобы проверить, может ли Nginx передавать запросы PHP-FPM.

Добавьте в файл следующий код, который сгенерирует HTML-страницу, предоставляющую информацию о настройках PHP:

Сохраните и закройте файл.

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

Если ошибок не обнаружено, на экране появится такой результат:

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

Перезапустите Nginx:

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: