开发者社区> 技术小牛人> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

nginx负载均衡以及反向代理

简介:
+关注继续查看

1、实验前准备

所需两台主机如下:

node1:eht0 192.168.4.82 eht0:0 192.168.4.98 在此说明一下,因为实验条件有限,这里为一台机器网卡配置了两个IP,但不不影响实验效果的。

node2:192.168.4.97

2、软件安装

node1和node2的nginx安装如下

A、具体安装步骤如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1、解决依赖关系
yum install gcc openssl-devel pcre-devel zlib-devel
2、创建nginx用户
# groupadd -r nginx
# useradd -r -g nginx -s /bin/false -M nginx
3、编译安装
./configure \
--prefix=/usr \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid  \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--with-pcre
make && make install

B、为nginx添加syv脚本并启动nginx服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#vi /etc/rc.d/init.d/nginx
内容如下:
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
"$NETWORKING" "no" ] && exit 0
nginx="/usr/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
# make required directories
user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
}
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
sleep 1
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
为这个脚本添加执行权限
#chmod +x /etc/rc.d/init.d/nginx
添加到服务列表
#chkconfig --add nginx
#chkconfig nginx on
#service nginx start  //启动nginx服务

此时如果不修改任何东西在浏览器里输入对应的IP进行访问就可以看到如下界面

114246251.jpg

3、接下来配置node1,使其单独访问两个IP时能有所区分

在配置node1之前先说明一下怎添加eht0:0具体如下

1
2
3
4
5
6
7
8
9
10
#cd /etc/sysconfig/network-scripts/
#cp ifcfg-eth0 ifcfg-eth0:0
#vi ifcfg-eth0:0 内容如下即可
DEVICE=eth0:0
BOOTPROTO=static
IPADDR=192.168.4.98
NETMASK=255.255.255.0
HWADDR=00:0C:29:E2:D4:CF
ONBOOT=yes
#service network restart //重启网卡

node1 具体操作如下

1
2
3
4
为node1的192.168.4.98创建页面
#cd /usr/html/
#mkdir smile
#echo "www.smile.com" > index.html

修改配置文件,具体如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server{                               //4.82的server
listen   192.168.4.82:80;
server_name www.82.com;
location / {
root html;
index index.html;
}
}
server{
listen   192.168.4.98:80;      //4.98的server
server_name www.98.com;
location / {
root html/smile;
index index.html;
}
}
#service nginx restart //重启nginx使配置文件生效

浏览器里输入对应的IP进行访问就可以看到如下界面

122823224.jpg

122943491.jpg

4、配置node2

A、实现反向代理,配置如下

1
2
3
4
5
6
7
8
server{                               //4.82的server
listen   192.168.4.97
server_name www.82.com;
location / {
proxy_pass http://192.168.4.82
}
}
#service nginx restart //重启nginx使配置文件生效

访问node2 192.168.4.97反向到后端真正的服务器node1上,界面如下

124259466.jpg到此为止反向代理配置成功,接下来看nginx如何实现负载均衡的。

B、实现负载均衡,配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
vim /etc/nginx/nginx.conf
http {
include       mime.types;
default_type  application/octet-stream;           proxy_cache_path /var/www/cache levels=1:2 keys_zone=mycache:20m      max_size=2048m inactive=60m;         proxy_temp_path /var/www/cache/tmp;
sendfile        on;
keepalive_timeout  65;
upstream cluster {
server 192.168.4.82 weight=1;
server 192.168.4.98  weight=1;
}
server {
listen       80;
server_name  localhost;
location / {
proxy_pass http://cluster;
proxy_cache mycache;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
}
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   html;
}
}

#service nginx restart   

访问页面,如下图所示

133157550.jpg

133159399.jpg

5、安装配置第三方模块,实现upstream中对后端http server的健康状态检测:
模块下载地址:https://github.com/cep21/healthcheck_nginx_upstreams;模块名称:ngx_http_healthcheck_module
安装配置方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1、首先解压healcheck模块到某路径下,这里假设为/tmp/healthcheck_nginx_upstreams
2、对nginx打补丁
首先解压nginx,并进入nginx源码目录:
tar xf nginx-1.0.11.tar.gz
cd nginx-1.0.11
patch -p1 < /tmp/healthcheck_nginx_upstreams/nginx.patch
而后编译nginx,在执行configure时添加类似下面的选项:
--add-module=/tmp/healthcheck_nginx_upstreams
所以,这里就使用如下命令:
./configure \
--prefix=/usr \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid  \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--with-pcre \
--add-module=/tmp/healthcheck_nginx_upstreams
make && make install

此模块支持的指令有:
healthcheck_enabled      //启用此模块 
healthcheck_delay        //对同一台后端服务器两次检测之间的时间间隔,单位毫秒,默认为1000;
healthcheck_timeo       //进行一次健康检测的超时时间,单位为毫秒,默认值2000; 

healthcheck_failcoun    //对一台后端服务器检测成功或失败多少次之后方才确定其为成功或失败,并实现启用或禁用此服务器;
healthcheck_sen           //为了检测后端服务器的健康状态所发送的检测请求;如:healthcheck_send "GET /health HTTP/1.0" 'Host: www.magedu.com';
healthcheck_expected    //期望从后端服务器收到的响应内容;如果未设置,则表示从后端服务器收到200状态码即为正确;
healthcheck_buffer     健康状态检查所使用的buffer空间大小;

具体实现方法如下

1
2
3
4
5
6
#vi /etc/nginx/nginx.conf   //编辑node2的配置文件
location /nginx_status {
healthcheck_status;    //启用检测后端服务器状态
}
#service nginx restart
后再浏览器输入http://192.168.4.97/nginx_status 访问即可

 

本文转自  沐木小布丁  51CTO博客,原文链接:http://blog.51cto.com/sxhxt/1278771

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
nginx负载均衡配置
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengyi_L/article/details/82221490 原理:ng...
2046 0
nginx负载均衡及配置
nginx负载均衡及配置 1 负载均衡概述 负载均衡由来是因为当一台服务器单位时间内的访问量很大时,此时服务器的压力也会 验,就诞生了负载均衡来分担服务器压力.
1279 0
nginx 负载均衡配置
        企业在解决高并发问题时,一般有两个方向的处理策略,软件、硬件,硬件上添加负载均衡器分发大量请求,软件上可在高并发瓶颈处:数据库+web服务器两处添加解决方案,其中web服务器前面一层最常用的的添加负载方案就是使用nginx实现负载均衡。
1128 0
nginx 负载均衡 配置
 jar 下载:http://download.csdn.net/download/knight_black_bob/9456377   1.下载 gz.tar    nginx-1.
666 0
Nginx负载均衡如何进行配置
Nginx负载均衡是一个很神奇的技术,很多人都不能很好的掌握这个技术,今天在这里我们向大家详细的介绍下有关Nginx负载均衡的问题。今天小试了一下Nginx负载均衡,真是爽啊!Nginx是什么? Nginx (”engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
773 0
5723
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载