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:
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
и изменить механизм хеширования паролей:
passwd root
Устанавливаем nginx на lb0 и lb1:
wget http://sysoev.ru/nginx/nginx-0.8.33.tar.gz
Разархивируем и заходим в папку исходников:
cd nginx-0.8.33
Конфигурируем инстолятор:
и в завершении:
make install
Теперь создадим 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 на обоих серверах:
netstat -tulpn | grep :80
echo ‘ /usr/local/nginx/sbin/nginx’ >> /etc/rc.local