Установка Nginx из исходного кода на сервере CentOS 6.4

Nginx (произносится «engine x») – это популярный обратный прокси и HTTP-сервер, а также почтовый прокси-сервер.

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

Требования

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

Примечание: в качестве домена в статье используется example.com.

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

yum -y install gcc gcc-c++ make zlib-devel pcre-devel openssl-devel

Создайте каталог для хранения исходного кода:

mkdir -p src && cd src

Теперь все подготовлено к выполнению инструкций данной статьи.

Зачем собирать программы из исходников?

Компилировать исходный код нужно, чтобы:

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

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

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

Модули Nginx и сторонние модули

Nginx имеет множество модулей, с помощью которых можно расширять функциональность VPS.

Среди наиболее популярных сторонних модулей для Nginx следует отметить:

  • SPDY (протокол для передачи контента); был внедрен в nginx 1.5.0, а ранее предоставлялся в качестве патча.
  • Google Pagespeed при помощи передовых технологий уменьшает время загрузки страницы, ускоряет сайт и увеличивает производительность связанных с ним  ресурсов (CSS, JavaScript, изображения), не требуя изменить существующий контент или обработку.
  • ModSecurity – это открытый брандмауэр для веб-приложений, способный защитить сервер приложений от известных атак.
  • TCP Proxy позволяет nginx вместо стандартного сокета использовать для проксирования сервер tcp.

Сборка Nginx из исходного кода

Загрузка исходников

Найдите номер текущей версии Nginx на сайте проекта.

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

nginxVersion="1.5.5"
wget http://nginx.org/download/nginx-$nginxVersion.tar.gz
tar -xzf nginx-$nginxVersion.tar.gz
ln -sf nginx-$nginxVersion nginx

Подготовка исходного кода

Прежде чем приступить к компилированию, нужно задать базовые параметры nginx.

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

./configure --help

Ниже приведен список основных парамтеров, переопределяющих стандартные системные пути в /etc/ во избежание ошибок. Параметры user и group используются для запуска рабочих процессов nginx без привилегий.

--user
--group
--prefix
--sbin-path
--conf-path
--pid-path
--lock-path
--error-log-path
--http-log-path

Другие параметры:

  • –with-http_gzip_static_module разрешает сборку модуля gzip (прежде чем обслужить файл для клиента с поддержкой gzip, этот модуль будет искать предварительно сжатые файлы; его цель – предотвратить многократное сжатие одного и того же файла). Данный модуль необходим для уменьшения объема отправляемой информации.
  • –with-http_stub_status_module разрешает другие плагины для nginx, что откроет доступ к данным о состоянии веб-сервера.
  • –with-http_ssl_module – разрешает сборку модуля для запуска HTTPS-сервера. Также читайте статью «Создание сертификата SSL на сервере nginx в CentOS 6».
  • –with-pcre – поиск соответствий регулярных выражений при определении маршрутов.
  • –with-file-aio разрешает асинхронный ввод/вывод, что лучше, чем вариант по умолчанию (рекомендуется использовать этот параметр, если пользователи могут загружать статические файлы).
  • –with-http_realip_module позволяет получить IP клиента с помощью балансировщика нагрузки.
  • –without-http_scgi_module отключает модуль SCGI (как правило, это делается при использовании скриптов CGI).
  • –without-http_uwsgi_module отключает поддержку модуля UWSGI (опять же, при использовании скриптов CGI).
  • –without-http_fastcgi_module отключает модуль FastCGI (при использовании скриптов CGI).

Пример конфигурации кода

cd nginx
./configure \
--user=nginx                          \
--group=nginx                         \
--prefix=/etc/nginx                   \
--sbin-path=/usr/sbin/nginx           \
--conf-path=/etc/nginx/nginx.conf     \
--pid-path=/var/run/nginx.pid         \
--lock-path=/var/run/nginx.lock       \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module        \
--with-http_stub_status_module        \
--with-http_ssl_module                \
--with-pcre                           \
--with-file-aio                       \
--with-http_realip_module             \
--without-http_scgi_module            \
--without-http_uwsgi_module           \
--without-http_fastcgi_module

Сборка кода Nginx

Настроив код согласно требованиям, запустите:

make
make install

Запуск nginx

Добавьте в систему пользователя nginx:

useradd -r nginx

Теперь нужно настроить автоматический запуск файла /etc/init.d/nginx при загрузке системы:

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# pidfile:     /var/run/nginx.pid
# user:        nginx
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
lockfile=/var/run/nginx.lock
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2

Примечание: при желании этот код можно получить так:

wget -O /etc/init.d/nginx https://gist.github.com/sairam/5892520/raw/b8195a71e944d46271c8a49f2717f70bcd04bf1a/etc-init.d-nginx

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

chmod +x /etc/init.d/nginx

Теперь настройте автоматическую загрузку сервиса при запуске системы:

chkconfig --add nginx
chkconfig --level 345 nginx on

В файле /etc/nginx/nginx.conf нужно увеличить параметры types_hash_bucket_size и server_names_hash_bucket_size.

http {
include       mime.types;
default_type  application/octet-stream;
# add the below 2 lines under http around line 20
types_hash_bucket_size 64;
server_names_hash_bucket_size 128;

Запустите сервер (VPS  будет запущен на порт 80).

service nginx start

Завершающие действия

Посетите доменное имя или IP в браузере. На экране появится:

Welcome to nginx!

Готово! Сборка nginx завершена.

Поддержка nginx

При внесении каких-либо изменений в бинарные файлы nginx нужно перезагружать веб-сервер:

service nginx restart

Изменив конфигурации в файле nginx.conf, используйте команду:

service nginx reload

Обновление веб-сервера nginx

Чтобы обновить nginx до последней версии, посетите официальный сайт проекта.

Запустите следующие команды, чтобы получить код:

ssh root@example.com
cd ~/src/
nginxVersion="1.5.5" # set the value here from nginx website
wget http://nginx.org/download/nginx-$nginxVersion.tar.gz
tar -xzf nginx-$nginxVersion.tar.gz
rm nginx # removes the soft link
ln -sf nginx-$nginxVersion nginx
cd nginx
./configure \
--user=nginx                          \
--group=nginx                         \
--prefix=/etc/nginx                   \
--sbin-path=/usr/sbin/nginx           \
--conf-path=/etc/nginx/nginx.conf     \
--pid-path=/var/run/nginx.pid         \
--lock-path=/var/run/nginx.lock       \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module        \
--with-http_stub_status_module        \
--with-http_ssl_module                \
--with-pcre                           \
--with-file-aio                       \
--with-http_realip_module             \
--without-http_scgi_module            \
--without-http_uwsgi_module           \
--without-http_fastcgi_module
make
make install
service nginx restart

Tags: , , , ,

Добавить комментарий