lest, just lest

Заметки о web-разработке, администрировании Linux и настройке Mac OS X

Установка и настройка Nginx на CentOS 5 с Cpanel

без комментариев

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

Поэтому вполне естественно использовать Nginx в качестве фронтэнда для Apache. Nginx позволяет экономить значительный объем памяти и процессорного времени, как правило используемых многочисленными процессами Apache, отдающими контент клиентам.

mod_rpaf

В случае использования Nginx в качестве реверсивного прокси перед Apache, ip-адрес посетителя, получаемый Apache, будет неверным, так как все запросы к Apache приходят от Nginx.

Чтобы в Apache записывал реальные ip-адреса посетителей вместо ip-адреса сервера, необходим специальный модуль Apache (mod_rpaf).

Скачиваем, разархивируем, переходим в только что созданную директорию и запускаем команду под root:

/usr/local/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

Затем заходим в WHM, Main >> Service Configuration >> Apache Configuration > Include Editor > Pre Main Include и добавляем следующиее, заменив LIST_OF_YOUR_IPS списком ip-адресов, управляемых с помощью Cpanel:

LoadModule rpaf_module modules/mod_rpaf-2.0.so

RPAFenable On
# Enable reverse proxy add forward
RPAFproxy_ips 127.0.0.1 LIST_OF_YOUR_IPS
# which ips are forwarding requests to us
RPAFsethostname On
# let rpaf update vhost settings
# allows to have the same hostnames as in the "real"
# configuration for the forwarding Apache
RPAFheader X-Real-IP
# Allows you to change which header mod_rpaf looks
# for when trying to find the ip the that is forwarding
# our requests

Установка и настройка Nginx

Устанавливаем зависимости (в моем случае не хватало только pcre-devel, остальное на сервере с Cpanel обычно уже установлено):

yum install pcre-devel

Скачиваем Nginx с http://sysoev.ru/nginx/download.html, разархивируем, переходим в директорию и собираем исходники:

./configure
make
make install

Создаем директорию для хранения логов Nginx:

mkdir /var/log/nginx

Изменяем стандартные настроики Nginx в файле /usr/local/nginx/conf/nginx.conf:

user  nobody;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    resolver   127.0.0.1;

    include       mime.types;
    default_type  application/octet-stream;

    sendfile       on;
    tcp_nopush     on;

    keepalive_timeout  65;

    proxy_set_header  Host       $host;
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For  $remote_addr;

    server {
        listen 80 default;
        location / {
            proxy_pass http://$host:81;
        }
    }
}

Создаем init.d скрипт /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:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /var/run/nginx.pid

# 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/local/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

lockfile=/var/lock/subsys/nginx

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
esac

Делаем init.d скрипт исполняемым и включаем автозапуск Nginx при загрузке системы:

chmod +x /etc/init.d/nginx
chkconfig nginx on

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

service nginx configtest

Изменение конфигурации Cpanel

Теперь нужно перенести Apache на другой порт, например, 81-й. Можно просто заменить 0.0.0.0:80 на 0.0.0.0:81 в WHM на станице "Tweak Settings", или отредактировать файл /var/cpanel/cpanel.config, заменив порт 80 в опции apache_port на 81:

apache_port=0.0.0.0:81

Запукаем /usr/local/cpanel/whostmgr/bin/whostmgr2 --updatetweaksettings для применения изменений.

Остается лишь запустить Nginx для приема запросов на 80-м порту и их проксирования к Apache:

service nginx start

Related posts:

  1. Мониторинг nginx с помощью munin
  2. Установка nginx на Ubuntu
  3. Установка и настройка OpenVZ на Debian Lenny
  4. Настройка ssh клиента
  5. Установка Sphinx на Debian Lenny

Автор: lest

Январь 24, 2010 в 21:19

Опубликовано в linux

Метки: , , , , ,

Leave a Reply