Site icon 8HOST.COM

Установка 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 следует отметить:

Сборка 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

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

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

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