CentOS/Redhat:安装Nginx作为反向代理负载均衡器
时间:2020-01-09 10:43:26 来源:igfitidea点击:
如何在CentOS/RHEL 5.x下的两个Apache Web服务器之前将nginx配置为故障转移反向代理负载平衡器?
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 -> 192.54.1.1 ----/ | | |eth0 -> 192.168.1.10 ----------\ |-lb1==| / |---- apache1 (192.168.1.15) |eth1 -> 192.54.1.1 ----/ | |---- apache2 (192.168.1.16) | |---- db1 (192.168.1.17)
其中:
- lb0 Linux盒通过eth1直接连接到Internet。这是主负载均衡器。
- lb1 Linux盒通过eth1直接连接到Internet。这是备用负载平衡器。如果主控网络失败,它将变为活动状态。
- 192.54.1.1该IP在lb0和lb1服务器之间移动。它称为虚拟IP地址,由keepalived管理。
- eth0连接到LAN,所有其他后端软件服务器都通过eth0连接。
- Nginx同时安装在lb0和lb1上。它将收听192.54.1.1。您需要将nginx配置为反向代理服务器。它将连接到Apache1和Apache2。
- 在Apache#1和Apache#2服务器上安装httpd服务器。将它们配置为侦听192.168.1.15:80和192.168.1.16:80。不要将公共IP分配给此框。仅通过局域网激活eth0。
- 在Db#1上安装MySQL/Oracle/PgSQL服务器。配置数据库服务器以侦听192.168.1.17:$db_server_port。不要将公共IP分配给此框。仅通过局域网激活eth0。
简而言之,您需要以下硬件:
- 2个负载平衡器反向代理服务器(250GB SATA,2GB RAM,具有RHEL 64位+ keepalived + nginx的单个Intel P-D930或者AMD 170s)
- 2个Apache Web服务器(软件RAID-1,SCSI-73GBx2 15k磁盘,6GB RAM,双Intel Xeon或者AMD RHEL 64位+ Apache 2 64位CPU)
- 1个备用Apache Web服务器(软件RAID-1,SCSI-73GBx2 15k磁盘,6GB RAM,双Intel Xeon或者带有RHEL 64位+ Apache 2的AMD 64位CPU)
- 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或者带有RHEL 64位的AMD 64位CPU)
- 1个异地备份服务器(RAID-6、1TB SATAx4、4GB RAM,具有RHEL 64位的单个Intel/AMD CPU)
- 根据要求从数据库,存储,pop3和SMTP服务器。
- Internet上行链路100Mbps +或者根据要求。
从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 }') # 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中删除X窗口和其他不需要的软件。
在lb0和lb1上都安装Nginx
输入以下命令以下载nginx,执行:
# cd /opt # wget http://sysoev.ru/nginx/nginx-0.8.33.tar.gz
解压缩nginx,执行:
# tar -zxvf nginx-0.8.33.tar.gz # cd nginx-0.8.33
为64位RHEL/CentOS Linux配置nginx:
# ./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 theitroad.com.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"';
编辑/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/theitroad.com.conf,执行:
## Connect to backend servers via LAN ## ## Reverse Proxy Load Balancer Logic ## upstream theitroad { 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 theitroad.com www.theitroad.com subdomain.theitroad.com; ## Only requests to our Host are allowed if ($host !~ ^(theitroad.com|www.theitroad.com|subdomain.theitroad.com)$ ) { return 444; } ## redirect www to nowww # if ($host = 'www.theitroad.com' ) { # rewrite ^/(.*)$ http://theitroad.com/ permanent; # } ## Only allow these request methods if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } ## PROXY - Web location / { proxy_pass http://theitroad; 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 Web服务器:
# /usr/local/nginx/sbin/nginx # netstat -tulpn | grep :80 # echo ' /usr/local/nginx/sbin/nginx' >> /etc/rc.local
打开浏览器并输入域名,例如theitroad.com:
http://theitroad.com