Устанавливаем nginx как Reverse Proxy балансировщик нагрузки

Nginx это Web и Reverse proxy сервер. Очень часто он устанавливается перед Apache сервером. То есть, все запросы сначала поступают nginx, и затем, если необходимо, переиздаются полностью или частично, основному web серверу.

Схема работы

Internet--
         |
    =============                               |---- apache1 (172.16.1.15)
    | ISP Router|                               |
    =============                               |---- apache2 (172.16.1.16)
         |                                      |
         |                                      |---- db1 (172.16.1.17)
         |      |eth0 -> 172.16.1.11 ----------/
         |-lb0==|                        /
         |      |eth1 -> 80.91.175.92 ----/
         |
         |      |eth0 -> 172.16.1.10 ----------\
         |-lb1==|                        /      |---- apache1 (172.16.1.15)
                |eth1 -> 80.91.175.92 ----/       |
                                                |---- apache2 (172.16.1.16)
                                                |
                                                |---- db1 (172.16.1.17)

lb0 — Linux сервер подключенный к Internet-у через eth1. Мастер балансировки загрузки
lb1 — Linux сервер подключенный к Internet-у через eth1. Резервный балансировки загрузки
80.91.175.92 — Данный ip перемещается между серверами lb0 и lb1 при помощи Keepalived
eth0 — подключение к внутренней сети.
nginx установлен на обоих серверах lb0 и lb1 и сконфигурирован как reverse proxy для apache#1 и apache#2
Httpd будет установлено на серверах Apache#1 и Apache#2
На Db#1 будут находиться базы данных MySQL,PgSQL или Oracle

Первый что необходимо сделать это убрать все ненужное программное обеспечение с lb0 и lb1:

yum -y groupremove «X Window System»
x=$(yum list installed | egrep -i ‘php|httpd|mysql|bind|dhclient|tftp|inetd|xinetd|ypserv|telnet-server|rsh-server|vsftpd|tcsh’ | awk ‘{ print $1}’)
yum -y remove $x
yum -y install bind-utils sysstat openssl-devel.x86_64 pcre-devel.x86_64 openssl097a.x86_64

и изменить механизм хеширования паролей:

/usr/sbin/authconfig —passalgo=sha512 —update
passwd root

Устанавливаем nginx на lb0 и lb1:

cd /root
wget http://sysoev.ru/nginx/nginx-0.8.33.tar.gz

Разархивируем и заходим в папку исходников:

tar -zxvf nginx-0.8.33.tar.gz
cd nginx-0.8.33

Конфигурируем инстолятор:

./configure —without-http_autoindex_module —without-http_ssi_module —without-http_userid_module —without-http_auth_basic_module —without-http_geo_module —without-http_fastcgi_module —without-http_empty_gif_module —with-openssl=/lib64

и в завершении:

make
make install

Теперь создадим nginx аккаунт:

useradd -s /sbin/nologin -d /usr/local/nginx/html -M nginx
passwd -l nginx

Настраиваем nginx как Reverse Proxy балансировщик загрузки на обоих серверах lb0 и lb1.

Редактируем /usr/local/nginx/conf/nginx.conf:

pid               logs/nginx.pid;
user              nginx nginx;
worker_processes  10;
 
events {
    worker_connections  1024;
}
 
http {
  default_type       application/octet-stream;
 
 ## Common options ##
 include options.conf;
 
 ## Proxy settings ##
 include proxy.conf;
 
 ## lb domains ##
 include nixcraft.in.conf;
}

Редактируем /usr/local/nginx/conf/options.conf:

 ## Size Limits
  client_body_buffer_size     128K;
  client_header_buffer_size   1M;
  client_max_body_size          1M;
  large_client_header_buffers 8 8k;
 
 ## Timeouts
  client_body_timeout   60;
  client_header_timeout 60;
  expires               24h;
  keepalive_timeout     60 60;
  send_timeout          60;
 
 ## General Options
  ignore_invalid_headers   on;
  keepalive_requests      100;
  limit_zone gulag $binary_remote_addr 5m;
  recursive_error_pages    on;
  sendfile                 on;
  server_name_in_redirect off;
  server_tokens           off;
 
 ## TCP options
  tcp_nodelay on;
  tcp_nopush  on;
 
 ## Compression
  gzip              on;
  gzip_buffers      16 8k;
  gzip_comp_level   6;
  gzip_http_version 1.0;
  gzip_min_length   0;
  gzip_types        text/plain text/css image/x-icon application/x-perl application/x-httpd-cgi;
  gzip_vary         on;
 
 ## Log Format
  log_format  main  '$remote_addr $host $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" "$http_user_agent" '
                    '"$gzip_ratio"';

Переходим к /usr/local/nginx/conf/proxy.conf:

## Proxy caching options
  proxy_buffering           on;
  proxy_cache_min_uses       3;
  proxy_cache_path          /usr/local/nginx/proxy_temp/ levels=1:2 keys_zone=cache:10m inactive=10m max_size=1000M;
  proxy_cache_valid         any 10m;
  proxy_ignore_client_abort off;
  proxy_intercept_errors    on;
  proxy_next_upstream       error timeout invalid_header;
  proxy_redirect            off;
  proxy_set_header          X-Forwarded-For $remote_addr;
  proxy_connect_timeout     60;
  proxy_send_timeout        60;
  proxy_read_timeout        60;

И последний /usr/local/nginx/conf/nixcraft.in.conf:

## Connect to backend servers via LAN ##
## Reverse Proxy Load Balancer Logic ##
upstream nixcraft  {
      server 172.16.1.15 weight=10 max_fails=3 fail_timeout=30s;
      server 172.16.1.16 weight=10 max_fails=3 fail_timeout=30s;
      # only comes alive when above two fails
      server 172.16.1.23 weight=1 backup;
}
 
server {
      access_log  logs/access.log main;
      error_log   logs/error.log;
      index       index.html;
      root        /usr/local/nginx/html;
      server_name nixcraft.in www.nixcraft.in subdomain.nixcraft.in;
 
     ## Only requests to our Host are allowed
      if ($host !~ ^(nixcraft.in|www.nixcraft.in|subdomain.nixcraft.in)$ ) {
         return 444;
      }
 
     ## redirect www to nowww
     # if ($host = 'www.nixcraft.in' ) {
     #    rewrite  ^/(.*)$  http://nixcraft.in/$1  permanent;
     # }
 
     ## Only allow these request methods
     if ($request_method !~ ^(GET|HEAD|POST)$ ) {
         return 444;
     }
 
     ## PROXY - Web
      location / {
        proxy_pass  http://nixcraft;
        proxy_cache            cache;
        proxy_cache_valid      200 24h;
        proxy_cache_use_stale  error timeout invalid_header updating http_500 http_502 http_503 http_504;
        proxy_ignore_headers   Expires Cache-Control;
 
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      }
 
     # redirect server error pages to the static page /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

Запускаем nginx на обоих серверах:

/usr/local/nginx/sbin/nginx
netstat -tulpn | grep :80
echo ‘ /usr/local/nginx/sbin/nginx’ >> /etc/rc.local

 

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>