Установка Nginx в FreeBSD 11.2

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

В этом мануале вы узнаете, как установить Nginx на сервер FreeBSD 11.2.

Требования

Для работы вам понадобится сервер FreeBSD. Этот мануал был написан специально для сервера FreeBSD 11.2, хотя он также должен подойти и более старым версиям операционной системы.

Если вы новичок в FreeBSD, вам может пригодиться мануал Начало работы с FreeBSD.

Если вы хотите настроить домен, вам понадобится:

  • Зарегистрированное доменное имя. Если у вас пока его нет, вы можете легко зарегистрировать его (например, на Namecheap, GoDaddy и т.д.).
  • DNS-запись А, которая свяжет ваш домен с IP-адресом сервера (читайте мануал Как настроить имя хоста).

1: Установка Nginx

Для начала мы установим Nginx с помощью pkg, встроенного инструмента управления бинарными пакетами FreeBSD. Следующая команда обновит ваши локальные пакеты, а затем установит пакет nginx:

sudo pkg install nginx

Если вы запускаете pkg впервые, вам будет предложено разрешить ему автозагрузку. Для этого нажмите y, а затем Enter. Затем, когда появится запрос, подтвердите установку пакета nginx, нажав y, а затем еще раз Enter.

Если вы используете оболочку csh или tcsh, обязательно запустите команду rehash. Она сообщит оболочке о новых установленных вами приложениях:

rehash

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

echo $SHELL

В выводе будет путь к текущей оболочке:

/bin/tcsh

Веб-сервер Nginx установлен, но еще не запущен. Далее мы добавим Nginx в автозагрузку и запустим его в текущей сессии, а также рассмотрим процесс защиты сервера путем настройки брандмауэра IPFW.

2: Включение сервиса Nginx и настройка брандмауэра IPFW

Чтобы система FreeBSD запускала Nginx как обычный сервис, вы должны включить его. Это позволит вам управлять им как любым другим сервисом, а не как отдельным приложением, и позволит FreeBSD автоматически запускать веб-сервер при загрузке.

Для этого вам сначала нужно узнать правильный параметр rc, который нужно установить для сервиса nginx. rc — это утилита FreeBSD, которая управляет процессами автоматической загрузки системы. Скрипты для каждого сервиса, доступного в системе, находятся в каталоге /usr/local/etc/rc.d. С помощью переменной rcvar они определяют параметры, которые используются для включения каждого сервиса. Чтобы увидеть значение rcvar каждого сервиса, введите:

grep rcvar /usr/local/etc/rc.d/*

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

/usr/local/etc/rc.d/cloudconfig:rcvar="cloudinit_enable"
/usr/local/etc/rc.d/cloudfinal:rcvar="cloudinit_enable"
/usr/local/etc/rc.d/cloudinit:rcvar="cloudinit_enable"
/usr/local/etc/rc.d/cloudinitlocal:rcvar="cloudinit_enable"
/usr/local/etc/rc.d/nginx:rcvar=nginx_enable
/usr/local/etc/rc.d/rsyncd:rcvar=rsyncd_enable

Параметр, который вам нужно установить для сервиса nginx, выделен в этом выводе красным. Также полезно знать имя самого скрипта (это последний компонент в пути перед двоеточием) – это имя, которое FreeBSD использует для ссылки на сервис.

Чтобы включить сервис nginx, вы должны добавить его rcvar в файл rc.conf, он содержит информацию о глобальной конфигурации системы, на которую ссылаются сценарии запуска.  Откройте файл /etc/rc.conf в редакторе.

sudo ee /etc/rc.conf

В верхней части файла уже будет несколько параметров rcvar. Добавьте под ними параметр nginx_enable rcvar и установите для него значение YES:

. . .
sshd_enable="YES"
nginx_enable="YES"
. . .

Находясь в файле rc.conf, добавьте еще несколько директив для включения и настройки IPFW. IPFW – это брандмауэр с отслеживанием состояния, написанный для FreeBSD. Он предоставляет мощный синтаксис, который позволяет настраивать правила безопасности для широкого спектра вариантов использования.

Сразу под параметром nginx_enable добавьте следующие строки:

. . .
nginx_enable="YES"
firewall_enable="YES"
firewall_type="workstation"
firewall_myservices="22/tcp 80/tcp"
firewall_allowservices="any"

Вот что делает каждая из этих директив:

  • firewall_enable=»YES»: значение «YES» позволяет брандмауэру запускаться при загрузке сервера.
  • firewall_type=»workstation»: FreeBSD предоставляет несколько типов брандмауэров по умолчанию, каждый из которых имеет несколько разные конфигурации. Объявив тип workstation, вы говорите брандмауэру защищать этот сервер только с помощью правил с отслеживанием состояния.
  • firewall_myservices=»22/tcp 80/tcp»: в директиве firewall_myservices вы можете указать список портов TCP, которые будут открыты в брандмауэре. В этом примере мы откроем порты 22 и 80, чтобы пропустить трафик SSH и HTTP.
  • firewall_allowservices=»any»: позволяет машине с любого IP-адреса обмениваться данными через порты, указанные в директиве firewall_myservices.

После этого сохраните файл и закройте редактор: нажав клавиши Ctrl + C, введите команду exit и нажмите Enter.

Затем запустите сервис брандмауэра ipfw. Поскольку это первый запуск брандмауэра на этом сервере, есть вероятность, что это приведет к остановке вашего сервера и сделает его недоступным по SSH. Следующая команда nohup (означает «no hangups») запустит брандмауэр, предотвращая остановку, а также перенаправит стандартный вывод и ошибки во временный лог:

sudo nohup service ipfw start >/tmp/ipfw.log 2>&1

Если вы используете оболочку csh или tcsh, то это перенаправление вызовет сообщение «Ambiguous output redirect.» в вашем выводе. Если вы используете одну из этих оболочек, используйте следующую команду, чтобы запустить ipfw:

sudo nohup service ipfw start >&/tmp/ipfw.log

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

sudo service ipfw stop
sudo service ipfw start
sudo service ipfw restart

Запустите сервис nginx:

sudo service nginx start

Затем, чтобы подтвердить, что Nginx может правильно обслуживать контент, введите внешний IP-адрес сервера в адресную строку браузера:

http://your_server_ip

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

curl -4 icanhazip.com

Если все работает правильно, вы увидите приветственную страницу Nginx по умолчанию.

Это подтверждает, что Nginx установлен и работает правильно, и что его трафик проходит через брандмауэр. Однако в конфигурации есть еще несколько изменений, которые необходимо внести, чтобы веб-сервер работал с нестандартными настройками или обслуживал контент по домену.

3: Настройка виртуального хоста

Веб-сервер Nginx использует так называемые блоки server (аналог виртуальных хостов Apache) для создания индивидуальной конфигурации каждого домена и размещения нескольких доменов на одном сервере. Здесь мы настроим блок для условного домена example.com, а вы должны заменить его своим собственным доменным именем.

По умолчанию в Nginx во FreeBSD 11.2 включен один блок server, который настроен для обслуживания документов из каталога /usr/local/www/nginx. Этого достаточно для обслуживания одного сайта, но не подходит для размещения нескольких сайтов. Вместо того чтобы изменять /usr/local/www/nginx, давайте создадим структуру каталогов в /usr/local/www для нашего сайта example.com.

Создайте каталог для example.com, используя флаг –p (он создаст все необходимые родительские каталоги):

sudo mkdir -p /usr/local/www/example.com/html

Затем передайте права на каталог пользователю www (он по умолчанию предназначен для запуска Nginx):

sudo chown -R www:www /usr/local/www/example.com

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

sudo chmod -R 755 /usr/local/www/example.com

Теперь создайте простую страницу index.html:

sudo ee /usr/local/www/example.com/html/index.html

Вставьте в файл такие строки:

<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success!  The example.com server block is working!</h1>
</body>
</html>

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

Чтобы Nginx мог обслуживать контент, нужно создать блок server с правильными директивами. Откройте конфигурационный файл Nginx. По умолчанию он находится в /usr/local/etc/nginx/.

sudo ee /usr/local/etc/nginx/nginx.conf

Примечание: Как правило, следует избегать редактирования файла nginx.conf по умолчанию. Однако в этом же каталоге есть файл nginx.conf-dist, он идентичен стандартному файлу nginx.conf. Если вам когда-нибудь понадобится вернуться к стандартной конфигурации, вы сможете просто скопировать этот файл с помощью следующей команды:

sudo cp /usr/local/etc/nginx/nginx.conf-dist /usr/local/etc/nginx/nginx.conf

В начале файла вы увидите:

#user  nobody;
worker_processes  1;
. . .

Раскомментируйте директиву user, удалив символ решетки (#), а затем измените пользователя с none на www. Затем обновите директиву worker_processes, которая позволяет выбирать, сколько рабочих процессов будет использовать Nginx. Оптимальное значение не всегда легко найти. Если установить режим auto, Nginx установит по одному процессу на каждое ядро процессора, в большинстве случаев этого будет достаточно:

user  www;
worker_processes  auto;
. . .

Затем найдите блок server. Без комментариев он будет выглядеть так:

. . .
server {
listen       80;
server_name  localhost;
location / {
root   /usr/local/www/nginx;
index  index.html index.htm;
}
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   /usr/local/www/nginx-dist;
}
}

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

. . .
server {
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
listen       80;
server_name  example.com www.example.com;
location / {
root   /usr/local/www/example.com/html;
index  index.html index.htm;
}
}
. . .

Вот что делают эти директивы:

  • access_log: эта директива определяет расположение лога доступа.
  • error_log: определяет расположение лога ошибок.
  • listen: объявляет порты, которые прослушивает Nginx. В данном случае это трафик HTTP по порту 80.
  • server_name: указывает доменное имя, которое обслуживает Nginx, а также все алиасы. Если у вас нет домена, направьте Nginx на внешний IP-адрес сервера.
  • root: определяет корневой каталог сайта, который вы создали ранее.
  • index: указывает файлы, которые будут использоваться в индексе, и определяет порядок их проверки.

В целом без комментариев файл будет выглядеть так:

user  www;
worker_processes  1;
events {
worker_connections  1024;
}
http {
include       mime.types;
default_type  application/octet-stream;
sendfile        on;
keepalive_timeout  65;
server {
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
listen       80;
server_name  example.com www.example.com;
location / {
root   /usr/local/www/example.com;
index  index.html index.htm;
}
}
}

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

Затем проверьте ошибки в конфигурации.

sudo nginx -t

Если ошибок в файле нет, вы увидите такой вывод:

nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

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

Когда все ошибки в конфигурации будут исправлены, перезагрузите nginx, чтобы внести изменения:

sudo service nginx reload

Теперь Nginx должен обслуживать контент в файле index.html. Проверьте это, перейдя по ссылке http://example.com. Вы должны увидеть:

Success!  The example.com server block is working!

В последнем разделе мы расскажем, как управлять сервисом Nginx.

4: Управление процессом Nginx

Теперь, когда веб-сервер установлен и запущен, нужно научиться управлять его процессом.

Чтобы остановить веб-сервер, введите:

sudo service nginx stop

Чтобы запустить его:

sudo service nginx start

Чтобы остановить и сразу запустить его, введите:

sudo service nginx restart

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

sudo service nginx reload

Вспомните, как в разделе 2 мы включили сервис nginx, добавив директиву nginx_enable=»YES» в файл rc.conf. Если вы хотите отключить сервис nginx, чтобы он не запускался автоматически при загрузке сервера, вам нужно снова открыть этот файл и удалить эту строку.

Заключение

Теперь у вас есть полностью рабочий экземпляр Nginx. После этого вы можете защитиь свой трафик с помощью шифрования, а также установить и настроить MySQL и PHP, чтобы получить стек FEMP.

Читайте также:

Tags: , ,