Вступление
Nginx - один из самых популярных веб-серверов в мире, известный своим частым использованием в качестве балансировщика нагрузки и обратного прокси-сервера. Он более дружественен к ресурсам, чем Apache, и многие из крупнейших и наиболее активно посещаемых сайтов в Интернете зависят от Nginx в обслуживании своего контента.
В этом руководстве мы продемонстрируем, как установить Nginx на сервер FreeBSD 11.2.
Предпосылки
Перед началом этого руководства вам понадобится доступ к серверу, на котором работает FreeBSD. Это руководство было написано специально для сервера под управлением FreeBSD 11.2, хотя оно также должно работать на более старых поддерживаемых версиях операционной системы.
Если вы новичок в работе с FreeBSD, вам может быть полезно настроить этот сервер, следуя these инструкциям ,
Кроме того, если вы планируете настроить доменное имя для этого сервера, вам потребуется следующее:
-
Зарегистрированное доменное имя, которым вы владеете и контролируете. Если у вас еще нет зарегистрированного доменного имени, вы можете зарегистрировать его у одного из множества регистраторов доменных имен (например, Namecheap, GoDaddy и т. Д.).
-
DNS * A Record *, который указывает ваш домен на публичный IP-адрес вашего сервера. Вы можете следовать thutorial этого имени хоста для получения подробной информации о том, как их добавить.
Шаг 1 - Установка Nginx
Для начала мы установим Nginx с помощью + pkg +
, встроенного в FreeBSD инструмента управления бинарными пакетами. Следующая команда обновит вашу локальную копию доступных пакетов, а затем установит пакет + nginx +
:
sudo pkg install nginx
Если вы впервые запускаете + pkg +
, вам будет предложено подтвердить, что вы разрешаете ему самозагрузиться. Для этого нажмите + y +
, а затем + ENTER +
. Затем, когда появится запрос, подтвердите, что вы одобряете установку пакета + nginx +
, нажав + y +
и затем + ENTER +
еще раз.
Если вы используете оболочку + csh +
или + tcsh +
, обязательно запустите команду + rehash +
. Это информирует оболочку о новых установленных вами приложениях:
rehash
Nginx теперь установлен на вашем сервере, но еще не запущен. На следующем шаге мы позволим Nginx запускаться каждый раз, когда сервер загружается, и запускать его для этого сеанса, а также проходить процесс защиты сервера путем настройки брандмауэра с IPFW.
Шаг 2 - Включение службы Nginx и настройка брандмауэра с IPFW
Чтобы FreeBSD запустил Nginx как обычный сервис, вы должны сообщить FreeBSD, что хотите включить его. Это позволит вам управлять им как любой другой службой, а не как отдельным приложением, а также настроит FreeBSD для автоматического запуска при загрузке.
Для этого сначала нужно знать правильный параметр + rc +
, который нужно установить для службы + nginx +
. + rc +
- это утилита FreeBSD, которая управляет процессами автоматической загрузки системы. Скрипты для каждого сервиса, доступного в системе, находятся в каталоге + / usr / local / etc / rc.d +
. Они определяют параметры, которые используются для включения каждой службы с помощью переменной + rcvar +
. Мы можем увидеть, на что настроен + rcvar +
каждого сервиса, набрав:
grep rcvar /usr/local/etc/rc.d/*
После установки эта команда выведет листинг, подобный следующему:
Output/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=
/usr/local/etc/rc.d/rsyncd:rcvar=rsyncd_enable
Параметр, который вам нужно установить для службы + nginx +
, выделен здесь в этом выводе. Также полезно знать имя самого скрипта - последний компонент пути перед двоеточием - это имя, которое FreeBSD использует для ссылки на сервис.
Чтобы включить службу + nginx +
, вы должны добавить ее + rcvar +
в файл + rc.conf +
, который содержит информацию о глобальной конфигурации системы, на которую ссылаются сценарии запуска. Используйте предпочитаемый вами редактор, чтобы открыть файл + / etc / rc.conf
с привилегиями` + sudo`. Здесь мы будем использовать + ee +
:
sudo ee /etc/rc.conf
В верхней части файла уже будет несколько параметров + rcvar +
. Добавьте параметр + nginx_enable +
+ rcvar +
под ними и установите для него " YES "
:
/etc/rc.conf
. . .
sshd_enable="YES"
. . .
Находясь в файле + rc.conf +
, мы добавим еще несколько директив для включения и настройки брандмауэра IPFW. IPFW - это межсетевой экран с отслеживанием состояния, написанный для FreeBSD. Он предоставляет мощный синтаксис, который позволяет настраивать правила безопасности для большинства случаев использования.
Прямо под добавленным параметром + nginx_enable +
добавьте следующие выделенные строки:
/etc/rc.conf
. . .
nginx_enable="YES"
Вот что делает каждая из этих директив и их настройки:
-
+ 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 +
- что означает «без зависаний» - запустит брандмауэр, предотвращая остановку, а также перенаправит стандартный вывод и ошибку во временный файл журнала:
sudo nohup service ipfw start >/tmp/ipfw.log 2>&1
Однако если вы используете оболочки + csh +
или + tcsh +
, это перенаправление вызовет перенаправление + Ambiguous output. +
В вашем выводе. Если вы используете одну из этих оболочек, запустите следующую команду, чтобы запустить + ipfw +
:
sudo nohup service ipfw start >&/tmp/ipfw.log
Затем запустите сервис + nginx
sudo service nginx start
Затем, чтобы проверить, что Nginx способен правильно обслуживать контент, введите общедоступный IP-адрес вашего сервера в адресную строку предпочитаемого вами веб-браузера:
http://
Если все работает правильно, вы увидите целевую страницу Nginx по умолчанию:
изображение: https: //assets.digitalocean.com/freebsd/nginx/nginx_default_page.png [страница по умолчанию для Nginx]
Это показывает, что Nginx установлен и работает правильно, и что он разрешен через брандмауэр, как и ожидалось. Тем не менее, есть еще несколько изменений конфигурации, которые необходимо внести, чтобы он работал с нестандартными настройками или обслуживал контент с использованием доменного имени.
Шаг 3 - Настройка блока сервера
При использовании веб-сервера Nginx server blocks (аналогично виртуальным хостам в Apache) можно использовать для инкапсуляции деталей конфигурации и размещения нескольких доменов с одного сервера. Мы создадим домен с именем * example.com *, но вы должны * заменить его своим собственным доменным именем *. Чтобы узнать больше о настройке доменного имени с помощью DigitalOcean, см. Наш Introduction to DigitalOcean DNS.
Nginx во FreeBSD 11.2 имеет один серверный блок, включенный по умолчанию, который настроен для обслуживания документов из каталога в + / usr / local / www / nginx +
. Хотя это хорошо работает для одного сайта, он может стать громоздким, если вы размещаете несколько сайтов. Вместо того, чтобы изменять + / usr / local / www / nginx +
, давайте создадим структуру каталогов внутри + / usr / local / www +
для нашего сайта * example.com *.
Создайте каталог для * example.com * следующим образом, используя флаг + -p +
для создания любых необходимых родительских каталогов:
sudo mkdir -p /usr/local/www//html
Затем назначьте владельца каталога пользователю * www *, профилю пользователя Nginx по умолчанию:
sudo chown -R www:www /usr/local/www/
Права доступа к вашему веб-корню должны быть правильными, если вы не изменили значение + umask +
, но вы можете убедиться, набрав:
sudo chmod -R 755 /usr/local/www/
Затем создайте пример страницы + index.html
, используя` + ee + `:
sudo ee /usr/local/www//html/index.html
Внутри добавьте следующий пример HTML:
/usr/local/www/example.com/html/index.html
<html>
<head>
<title>Welcome to !</title>
</head>
<body>
<h1>Success! The server block is working!</h1>
</body>
</html>
Сохраните и закройте файл, когда вы закончите.
Чтобы Nginx обслуживал этот контент, необходимо создать блок сервера с правильными директивами. Откройте основной файл конфигурации Nginx. По умолчанию это хранится в каталоге + / usr / local / etc / nginx / +
:
sudo ee /usr/local/etc/nginx/nginx.conf
Когда вы впервые откроете файл, в самом верху вы увидите следующее:
/usr/local/etc/nginx/nginx.conf
#user nobody;
worker_processes 1;
. . .
Раскомментируйте директиву + user +
, удалив знак решетки (+ # +
), а затем измените пользователя с * nobody * на * www *. Затем обновите директиву + worker_processes +
, которая позволяет вам выбирать, сколько рабочих процессов будет использовать Nginx. Оптимальное значение для ввода здесь не всегда очевидно или легко найти. Установка его в + auto +
говорит о том, что Nginx устанавливает его равным одному рабочему на ядро ЦП, что в большинстве случаев будет достаточно:
/usr/local/etc/nginx/nginx.conf
user ;
worker_processes ;
. . .
Затем прокрутите вниз до блока + server +
. Со всеми удаленными комментариями это будет выглядеть так:
/usr/local/etc/nginx/nginx.conf
. . .
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;
}
}
Удалите весь этот блок сервера, включая все закомментированные строки, и замените его следующим содержимым:
/usr/local/etc/nginx/nginx.conf
. . .
server {
access_log /var/log/nginx/.access.log;
error_log /var/log/nginx/.error.log;
listen 80;
server_name www.;
location / {
root /usr/local/www//html;
index index.html index.htm;
}
}
. . .
Вот что делают директивы в этом блоке сервера:
-
+ access_log +
: эта директива определяет местоположение журналов доступа сервера. -
+ error_log +
: определяет файл, в который Nginx будет записывать свои журналы ошибок. -
+ listen +
: директива+ listen +
объявляет, какой порт Nginx должен прослушивать. В этом случае мы устанавливаем порт+ 80 +
, чтобы он мог прослушивать HTTP-трафик. -
+ server_name +
: здесь укажите Nginx на ваше доменное имя и любые псевдонимы, которые у вас есть для него. Если у вас нет доменного имени, укажите Nginx на публичный IP-адрес вашего сервера. -
+ root +
: определяет корень документа сайта, который вы создали ранее на этом шаге. -
+ index +
: эта директива определяет файлы, которые будут использоваться в качестве индекса, и в каком порядке они должны проверяться.
Все вместе, с удаленными комментариями, файл будет выглядеть так:
/usr/local/letc/nginx/nginx.conf
user www;
worker_processes ;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
access_log /var/log/nginx/.access.log;
error_log /var/log/nginx/.error.log;
listen 80;
server_name www.;
location / {
root /usr/local/www/;
index index.html index.htm;
}
}
}
Сохраните и закройте файл, когда вы закончите. Затем проверьте ваш файл конфигурации на наличие синтаксических ошибок, набрав:
sudo nginx -t
Если в вашем файле конфигурации нет обнаруживаемых синтаксических ошибок, вы увидите следующее:
Outputnginx: 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: // +
, где вы должны увидеть что-то вроде этого:
изображение: https: //assets.digitalocean.com/articles/nginx_server_block_1404/first_block.png [первый серверный блок Nginx]
В качестве последнего шага мы рассмотрим некоторые команды, которые позволят вам управлять службой 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. Отсюда вы можете зашифровать веб-трафик вашего сервера, включив HTTPS. Чтобы узнать, как это сделать, обратитесь к Works, чтобы обезопасить Nginx с помощью Let Encrypt на FreeBSD. Вы также можете install и настроить MySQL и PHP, который вместе с Nginx даст вам полный стек FEMP.