Установка и настройка 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:
Затем заходим в WHM, Main >> Service Configuration >> Apache Configuration > Include Editor > Pre Main Include и добавляем следующиее, заменив LIST_OF_YOUR_IPS списком ip-адресов, управляемых с помощью Cpanel:
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 обычно уже установлено):
Скачиваем Nginx с http://sysoev.ru/nginx/download.html, разархивируем, переходим в директорию и собираем исходники:
make
make install
Создаем директорию для хранения логов Nginx:
Изменяем стандартные настроики Nginx в файле /usr/local/nginx/conf/nginx.conf:
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:
#
# 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 при загрузке системы:
chkconfig nginx on
Проверяем правильность конфигурации nginx:
Изменение конфигурации Cpanel
Теперь нужно перенести Apache на другой порт, например, 81-й. Можно просто заменить 0.0.0.0:80 на 0.0.0.0:81 в WHM на станице "Tweak Settings", или отредактировать файл /var/cpanel/cpanel.config, заменив порт 80 в опции apache_port на 81:
Запукаем /usr/local/cpanel/whostmgr/bin/whostmgr2 --updatetweaksettings для применения изменений.
Остается лишь запустить Nginx для приема запросов на 80-м порту и их проксирования к Apache:
Related posts: