NginX балансировка нагрузки на сервера Apache

Здравствуйте уважаемые хабро население.

Хочу сразу предупредить, что с грамматикой у меня не очень, так как русский не родной и относительно недавно пишу и говорю на этом языке, поэтому заранее приношу свои извинения.

По ходу работы года два тому назад начали проект, который основывается на HTML+PHP+MSSQL и конечно WEB-часть всего этого работает на известнейшем WEB-сервере Apache. Но со временем нагрузка начала возрастать и пришло время распределения нагрузки между несколькими WEB-серверами. После долгих обсуждений и споров мы пришли к следующему решению. Прошу переключит ваше внимание на следующую схему:

image

Что необходимо для осуществления в реальность нашей схемы:

1) NginX — прокси сервер для балансировки трафика
2) Два сервера Apache

В этой статье мы рассмотрим установку сервера балансировки трафика на основе NginX.
Для этого дела мы выберем операционную систему CentOS 6.4

Наш сервер имеет две сетевые карты одна из которых имеет выход в Интернет, для настройки переходим в нашему интерфейсу.

cd /etc/sysconfig/network-scripts

vi ifcfg-eth0


DEVICE=eth0
HWADDR=00:0C:33:6a:90:F8
TYPE=Ethernet
UUID=de83281a-sa20-4791-b588-5621718adf4d
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=217.11.175.73
NETMASK=255.255.255.224
GATEWAY=217.11.175.33
DNS1=217.11.190.2


Теперь у нас есть Интернет, далее настраиваем локальную сеть

cd /etc/sysconfig/network-scripts

vi ifcfg-eth0


DEVICE=eth1
HWADDR=00:0В:35:6a:90:F3
TYPE=Ethernet
UUID=de83281a-sa10-4791-b577-5621718adf4d
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.1.3
NETMASK=255.255.255.0


Теперь начнем установку и наcтроку нашего прокси сервера для балансировки нашего трафика

---Обновляем пакеты в CentOS
yum update -y


# wget nginx.org/packages/rhel/6/noarch/RPMS/nginx-release-rhel-6-0.el6.ngx.noarch.rpm
# rpm -ivh nginx-release-rhel-6-0.el6.ngx.noarch.rpm


— Начинаем установку Nginx
yum install nginx -y


После установки у нас в каталоге
/etc/nginx

появляются файлы конфигурации NginX-а, далее сделаем бекап существующего файла
cp nginx.conf /etc/nginx/nginx.conf.backup

после чего начинаем изменение конфиг файла
rm nginx.conf


vi nginx.conf


Теперь добавляем наш новый конфиг

# пользователь и группа от которого запускается процесс
user nginx;

# 3 рабочих процесса
worker_processes 3;

# Лог для ошибок
error_log /var/log/nginx/error.log debug;

events {
# максимум рабочих соединений
worker_connections 1024;
}

http {

# Подключаем таблицу mime
include mime.types;
# mime-тип по умолчанию
default_type application/octet-stream;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
sendfile on;

# Модуль позволяет описывать группы серверов, которые могут использоваться
# в директивах proxy_pass и fastcgi_pass.
upstream web {
#Этот параметр хеширует сессию по первым 4-м актетам IP-адреса что очень помогает если у кого то используются асинхронные запросы
ip_hash;
# Директива задаёт имя и параметры сервера. Обратите внимание, мы будем
# использовать имя «pv» в директиве proxy_pass
server 192.168.28.8 weight=2; #max_fails=60 fail_timeout=2s;
server 192.168.28.9 weight=2; #max_fails=60 fail_timeout=2s;

}
server {
# Слушать 80 порт
listen 80;
location / {

#Директива proxy_pass о котором говорили ранее
proxy_pass web;
# Подключаем параметры прокси
include /etc/nginx/proxy.conf;

}
}
}



В нашем конфиге мы подключили файл proxy.conf в котором укажем параметры проксирования

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
proxy_cache_bypass http;


Спасибо за внимание.

Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 11

    +6
    Вы прокоментировали интиутивно понятные параметры, и обошли вниманием остальные.
      0
      Прокомментировал только те параметры которые я использую пока и которые необходимы для старта. Думаю в будущем опишу во второй статье, спасибо за замечание.
        +3
        А какая польза от этой статьи вообще? Таких сотни, если не тысячи. Это вообще никуда не годится — из разряда «как установить nginx».
          0
          Это все рабочее и это мой личний мануал который мне помог и возможно поможет еще кому то, если вам это статья не помогла то возможно какому то новичку поможет.

            0
            Боюсь, что новичка эта статья ввергнет в тихий ужас. И, собственно, одна ссылка HttpUpstreamModule для него будет полезнее всей этой статьи.
            Не говоря о том, что он долго будет искать логику в комментарии
            # Директива задаёт имя и параметры сервера. Обратите внимание, мы будем
            # использовать имя «pv» в директиве proxy_pass

            и выяснять этимологию слова актетам
              +2
              HttpUpstreamModule
              Совершенно непонятно, каким образом люди выкапывают такие ссылки. Там информация скопированная с sysoev.ru на момент выпуска nginx 0.4.2 в сентябре 2006, да ещё с поехавшей версткой.

              Есть же официальный сайт и документация на нем: nginx.org/ru/docs/http/ngx_http_upstream_module.html
          +1
          под кат надо бы еще спрятать много буковок
            0
            ожидал прочитать про health checking ваших бэкендов, а под катом ни слова про саму балансировку даже.

            nginx, если я не путаю, помимо round robin умеет least connections. это все можно было расписать поинтереснее.
              0
              А публичные адреса все таки лучше скрывать)
                0
                Этой фейк адреса :) так что все норм
                  0
                  <удалено />

              Only users with full accounts can post comments. Log in, please.