CentOS / Redhat:安装 nginx 作为反向代理负载均衡器
如何在 CentOS / RHEL 5.x 下将 nginx 配置为两个 Apache Web 服务器前的故障转移反向代理负载均衡器?
nginx 是一个 Web 和反向代理服务器。Nginx 用在 Apache Web 服务器的前面。所有来自 Internet 并发往其中一个 Web 服务器的连接都通过 nginx 代理服务器路由,该服务器可以自行处理请求,也可以将请求全部或部分传递给主 Web 服务器。
我们的示例设置
Internet-- | ============= |---- apache1 (192.168.1.15) | ISP Router| | ============= |---- apache2 (192.168.1.16) | | | |---- db1 (192.168.1.17) | |eth0 -> 192.168.1.11 ----------/ |-lb0==| / | |eth1 -> 202.54.1.1 ----/ | | |eth0 -> 192.168.1.10 ----------\ |-lb1==| / |---- apache1 (192.168.1.15) |eth1 -> 202.54.1.1 ----/ | |---- apache2 (192.168.1.16) | |---- db1 (192.168.1.17)
在哪里,
- lb0 – 通过 eth1 直接连接到互联网的 Linux 机器。这是主负载均衡器。
- lb1 – Linux 机器通过 eth1 直接连接到互联网。这是备用负载均衡器。如果主网络出现故障,它将变为活动状态。
- 202.54.1.1 – 此 ip 在 lb0 和 lb1 服务器之间移动。它称为虚拟 IP 地址,由 keepalived 管理。
- eth0 连接到 LAN,所有其他后端软件服务器都通过 eth0 连接。
- lb0 和 lb1 上都安装了 nginx。它将监听 202.54.1.1。您需要将 nginx 配置为反向代理服务器。它将连接到 Apache1 和 Apache2。
- 在 Apache#1 和 Apache#2 服务器上安装 httpd 服务器。配置它们监听 192.168.1.15:80 和 192.168.1.16:80。不要为该框分配公共 IP。仅通过 LAN 激活 eth0。
- 在 Db#1 上安装 MySQL / Oracle / PgSQL 服务器。配置数据库服务器监听 192.168.1.17:$db_server_port。不要为该框分配公共 IP。仅通过 LAN 激活 eth0。
简而言之,您需要以下硬件:
- 2 个负载均衡器反向代理服务器(250GB SATA、2GB RAM、单个 Intel P-D930 或 AMD 170s,带有 RHEL 64 位 + keepalived + nginx)
- 2 个 Apache Web 服务器(软件 RAID-1、SCSI-73GBx2 15k 磁盘、6GB RAM、双 Intel Xeon 或 AMD 64 位 CPU,带 RHEL 64 位 + Apache 2)
- 1 个备份 Apache Web 服务器(软件 RAID-1、SCSI-73GBx2 15k 磁盘、6GB RAM、双 Intel Xeon 或 AMD 64 位 CPU 以及 RHEL 64 位 + Apache 2)
- 1 个数据库服务器(RAID-10、SCSI-73GBx4 15k 磁盘、16GB RAM、双 Intel Xeon 或 AMD 64 位 CPU,带 RHEL 64 位 + MySQL 5)
- 1 个缓存服务器(RAID-1、SCSI-73GBx2 15k 磁盘、8GB RAM、双 Intel Xeon 或 AMD 64 位 CPU 和 RHEL 64 位)
- 1 个异地备份服务器(RAID-6、1TB SATAx4、4GB RAM、单个 Intel/AMD CPU 和 RHEL 64 位)
- 根据要求提供从属数据库、存储、pop3 和 SMTP 服务器。
- 互联网上行链路 100Mbps+ 或根据要求。
从lb0和lb1中删除不需要的软件
键入以下命令:
上述命令将从 lb0 和 lb1 中删除 X windows 和其他不需要的软件。
# 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
在lb0和lb1上安装 Nginx
键入以下命令下载 nginx,输入:
Untar nginx,输入:
为 64 位 RHEL / CentOS Linux 配置 nginx:
示例输出:
# cd /opt
# 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
.... nginx path prefix: "/usr/local/nginx" nginx binary file: "/usr/local/nginx/sbin/nginx" nginx configuration prefix: "/usr/local/nginx/conf" nginx configuration file: "/usr/local/nginx/conf/nginx.conf" nginx pid file: "/usr/local/nginx/logs/nginx.pid" nginx error log file: "/usr/local/nginx/logs/error.log" nginx http access log file: "/usr/local/nginx/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" ...
安装相同:
# make
# make install
创建 nginx 用户帐户
输入以下命令来创建用户帐户:
# useradd -s /sbin/nologin -d /usr/local/nginx/html -M nginx
# passwd -l nginx
在lb0和lb1上将 nginx 配置为反向代理负载均衡器
编辑/usr/local/nginx/conf/nginx.conf,输入:
# vi /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 example.in.conf; }
编辑/usr/local/nginx/conf/options.conf,输入:
# vi /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"';
该server_tokens off;指令将在 Linux 和 Unix系统上隐藏 Nginx 版本。
编辑 /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/example.in.conf,输入:
## Connect to backend servers via LAN ## ## Reverse Proxy Load Balancer Logic ## upstream example { server 192.168.1.15 weight=10 max_fails=3 fail_timeout=30s; server 192.168.1.16 weight=10 max_fails=3 fail_timeout=30s; # only comes alive when above two fails server 192.168.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 example.in www.example.in subdomain.example.in; ## Only requests to our Host are allowed if ($host !~ ^(example.in|www.example.in|subdomain.example.in)$ ) { return 444; } ## redirect www to nowww # if ($host = 'www.example.in' ) { # rewrite ^/(.*)$ http://example.in/$1 permanent; # } ## Only allow these request methods if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } ## PROXY - Web location / { proxy_pass http://example; 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 网络服务器:
打开网络浏览器并输入域名,例如 example.in:
# /usr/local/nginx/sbin/nginx
# netstat -tulpn | grep :80
# echo ' /usr/local/nginx/sbin/nginx' >> /etc/rc.local
http://example.in
参考:
- nginx维基百科
请继续关注防火墙、安全、SELinux、数据库、帮助脚本和优化配置的其余内容。
- CentOS / Redhat Linux:安装 Keepalived 为 Web 集群提供 IP 故障转移
- CentOS / Redhat:安装 nginx 作为反向代理负载均衡器
- 使用 KeepAlived 处理 nginx 故障转移
- nginx:设置 SSL 反向代理(负载平衡 SSL 代理)
- mod_extforward:Lighttpsd 记录客户端在反向代理/负载均衡器后面的真实 IP
- 如何合并 Apache / Lighttpsd / Nginx 服务器日志文件
- Linux nginx:Chroot(Jail)设置
- 操作方法:SPDY SSL 安装和配置
- 在 CentOS/RHEL 上使用 Yum 命令安装 Nginx
- 在 Nginx 上创建自签名 SSL 证书