Марат-блог
Услуги по продвижению и разработке сайта
Отправить заявку
Заказать обратный звонок

Спасибо, Ваша заявка принята.

В ближайшее время менеджер свяжется с Вами.

Главная » DEV » Установка и настройка Nginx на CentOS под управлением CPanel/WHM
Установка и настройка Nginx на CentOS под управлением CPanel/WHM
Программирование
973
08 сентября 2014

Установка и настройка Nginx на CentOS под управлением CPanel/WHM

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

1. Устанавливаем модуль mod_rpaf

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

Модуль: mod_rpaf
Модуль восстанавливает реальный адрес клиента REMOTE_ADDR на backend сервере, при условии что адрес удаленного клиента (прокси) указан в httpd.conf и установлен подходящий заголовок X-Forwarded-For (или определенный в конфигурации).

Скачать с сайта последнюю версию можно здесь: http://stderr.net/apache/rpaf/download/

# cd /usr/local/src
# wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
# tar xvfz mod_rpaf-0.6.tar.gz
# cd mod_rpaf-0.6
# /usr/local/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

Настраиваем mod_rpaf

Открываем WHM
WHM: Main >> Service Configuration >> Apache Configuration > Include Editor > Pre Main Include

выбираем версию apache запущенную на сервере, в появившееся пустое поле, вставляем следующий код и корректируем его:

<Location /server-status>
SetHandler server-status
Order deny,allow
Allow from all
</Location>

LoadModule rpaf_module modules/mod_rpaf-2.0.so

RPAFenable On
# Enable reverse proxy add forward

RPAFproxy_ips 127.0.0.1 (добавляем список IP-адресов, управляемых с помощью Cpanel, пишем через пробел)

RPAFsethostname On
# let rpaf update vhost settings allowing to have
# the same hostnames as in the “actual” configuration for the
# forwarding apache installation

RPAFheader X-Real-IP
# Allows you to change which header we have mod_rpaf looking for
# when trying to find the ip the that is forwarding our requests

2. Устанавливаем библиотеку PCRE

Последнюю версию можно скачать здесь:
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/

# cd /usr/local/src
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.10.tar.gz
# tar xvfz pcre-8.10.tar.gz
# cd pcre-8.10
# ./configure
# make
# make install

3. Устанавливаем Nginx

Последнюю версию или старую, скачиваем с сайта : http://sysoev.ru/nginx/

# cd /usr/local/src
# wget http://sysoev.ru/nginx/nginx-0.8.53.tar.gz
# tar xvfz nginx-0.8.53.tar.gz
# cd nginx-0.8.53
# ./configure
# make
# make install

Создаем директорию для хранения логов Nginx:
# mkdir /var/log/nginx

Изменяем стандартные настройки Nginx в конфигурационном файле /usr/local/nginx/conf/nginx.conf
В место стандартного расположение логов error_log .... меняем на более привычный для CPanel
error_log /var/log/nginx/error.log;

Смотрите пример файла конфигурации nginx:
user nobody;
# no need for more workers in the proxy mode
worker_processes 4;

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

worker_rlimit_nofile 8192;

events {
worker_connections 2048; # you might need to increase this setting for busy servers
use epoll; # Linux kernels 2.4.x change to rtsig
}

http {
server_names_hash_max_size 8192;
server_names_hash_bucket_size 256;

client_max_body_size 200m;
client_body_buffer_size 128k;

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

sendfile on;
tcp_nopush on;
tcp_nodelay on;

keepalive_timeout 70;
server_tokens off;

gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_types text/plain application/x-j&#097;vascript text/xml text/css;
ignore_invalid_headers on;

client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 4k;
large_client_header_buffers 4 32k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;

include "/usr/local/nginx/conf/vhost.conf";
}


4. Изменяем конфигурацию Cpanel/WHM

Теперь нужно перенести Apache на другой порт.
Открываем CPanel/WHM и меняем порт на котором будет работать apache

WHM: Main >> Server Configuration >> Tweak Settings

Находим строчку:
The port on which Apache listens for HTTP connections. Specifying a specific IP will prevent Apache from listening on all other IPs. (default: 0.0.0.0:80) - 0.0.0.0:80

меняем на 0.0.0.0:81

В командной строке запускаем:
# /usr/local/cpanel/whostmgr/bin/whostmgr2 –updatetweaksettings

Открываем конфигурационный файл апача, ищем 80 порт, если не находим то все в порядке
# vi /usr/local/apache/conf/httpd.conf

если был найден 80-й порт то запускаем, пересоздание конфигурационного файла httpd.conf, и перезапускаем апачь:
# /scripts/rebuildhttpdconf
# /etc/init.d/httpd restart

5. Импортируем все домены на сервере в файл vhost.conf

Создаем файл nginx.sh в том же каталоге или /root, в общем где удобно :)

# vi nginx.sh

Вставляем следующий код :
#!/bin/sh

cat > "/usr/local/nginx/conf/nginx.conf" &lt;&lt;EOF
user nobody;
# no need for more workers in the proxy mode
worker_processes 4;

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

worker_rlimit_nofile 8192;

events {
worker_connections 2048; # you might need to increase this setting for busy servers
use epoll; # Linux kernels 2.4.x change to rtsig
}

http {
server_names_hash_max_size 8192;
server_names_hash_bucket_size 256;

client_max_body_size 200m;
client_body_buffer_size 128k;

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

sendfile on;
tcp_nopush on;
tcp_nodelay on;

keepalive_timeout 70;
server_tokens off;

gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_types text/plain application/x-j&#097;vascript text/xml text/css;
ignore_invalid_headers on;

client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 4k;
large_client_header_buffers 4 32k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;

include "/usr/local/nginx/conf/vhost.conf";
}

EOF

/bin/cp /dev/null /usr/local/nginx/conf/vhost.conf

cd /var/cpanel/users
for USER in *; do
for DOMAIN in &#96;cat $USER | grep ^DNS | cut -d= -f2&#96;; do
IP=&#96;cat $USER|grep ^IP|cut -d= -f2&#96;;
ROOT=&#96;grep ^$USER: /etc/passwd|cut -d: -f6&#96;;
echo "Converting $DOMAIN for $USER";

cat &gt;&gt; "/usr/local/nginx/conf/vhost.conf" &lt;&lt;EOF
server {
access_log off;

error_log /var/log/nginx/error.log warn;
listen 80;
server_name $DOMAIN www.$DOMAIN;

# uncomment location below to make nginx serve static files instead of Apache
# NOTE this will cause issues with bandwidth accounting as files wont be logged
#location ~* \.(gif|jpg|jpeg|png|wmv|avi|mpg|mpeg|mp4|js|css)$ {
# root $ROOT/public_html;
#}

location / {
proxy_send_timeout 90;
proxy_read_timeout 90;

proxy_buffer_size 16k;
# you can increase proxy_buffers here to suppress "an upstream response
# is buffered to a temporary file" warning
proxy_buffers 16 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

proxy_connect_timeout 30s;

proxy_redirect http://www.$DOMAIN:81 http://www.$DOMAIN;
proxy_redirect http://$DOMAIN:81 http://$DOMAIN;

proxy_pass http://$IP:81/;

proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
}
}
EOF
done
done


Меняем права и запускаем скрипт
# chmod 755 nginx.sh
# sh nginx.sh

Запускаем скрипт и проверяем, нет ли ошибок в конфигурации nginx
# /usr/local/nginx/sbin/nginx -t

6. Создаем скрипт для автозагрузки Nginx при загрузке системы

Создаем init.d скрипт /etc/init.d/nginx:
# vi /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

Запускаем Nginx
# service nginx start
или перезапускаем
# service nginx restart

Теперь все сайты которые сервере будет работать через Nginx.

7. Создаем скрипты, которые будут добавлять необходимые записи в vhost.conf при создание и удаления учетной записи из сервера (Cpanel/WHM, Terminate an Account)

Используется при создании учетной записи в WHM
# vi /scripts/postwwwacct
# chmod 755 /scripts/postwwwacct

В этот файл вставляем код написан в пункте 5.

Используется при удалении учетной записи клиента (домена, сайта)
# vi /scripts/postkillacct
# chmod 755 /scripts/postkillacct

Внимание!: Если у вас установлен фаирвол, например CSF, то не забудьте открыть порт 81

На этом все.
После всех этих действий у вас будет работать Apache + Nginx под управлением CPanel

Тестирование и настройка производилась на системе CENTOS 5.5 x86_64, WHM 11.28.52, процессор Intel® Xeon® Processor X3220
(8M Cache, 2.40 GHz, 1066 MHz FSB)

P.S. На заметку, пути к необходимым файлам:
/usr/local/nginx/conf/nginx.conf - конфигурационный файл nginx
/usr/local/nginx/conf/vhost.conf - файл с конфигурациями всех доменов на сервере
/usr/local/nginx/logs/ - расположение логов по умолчанию
/var/log/nginx/ - расположение логов, удобное для работы с CPanel
/usr/local/apache/conf/httpd.conf - конфигурационный файл Apache