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进行访问就可以看到如下界面
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进行访问就可以看到如下界面
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上,界面如下
到此为止反向代理配置成功,接下来看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
访问页面,如下图所示
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负载均衡以及反向代理相关推荐
- 运维之道 | Nginx负载均衡、反向代理
Nginx负载均衡.反向代理 一.代理服务器 1.什么是代理服务器? 客户端访问数据的时候,不会直接与目标服务器进行连接,而是所有的请求都发送到代理(Proxy)服务器,然后代理服务器会去根据你的请求 ...
- Nginx负载均衡和反向代理设置
Nginx负载均衡: 格式: upstream 别名 { #别名一般要有意义,能看出是做什么的 server ip:端口; #要实现负载的服务器的ip.端口号 } 例: upstream ...
- CentOS中nginx负载均衡和反向代理的搭建
1:配置虚拟主机: 1.nginx支持的三种虚拟主机的配置: 基于ip的虚拟主机 基于域名的虚拟主机 基于端口的虚拟主机 2.nginx配置文件的结构: 每个service就是一个虚拟主机 .... ...
- nginx负载均衡与反向代理
[1]负载均衡 1)问题:如何在多个网络设备或服务器之间实现合理的业务量分配,使之不会出现一台设备过忙,而其他设备却没有充分使用的情况. 2)解决方法:要解决这一问题,可以采用负载均衡的方法: 3)负 ...
- Nginx负载均衡和反向代理
1:反向代理 代理就是中介,那有反向代理就有正向代理,两者的区别是什么嘞? 正向代理隐藏真实客户端,服务端不知道实际发起请求的客户端.,proxy和client同属一个LAN,对server透明: 反 ...
- nginx 负载均衡与反向代理
概述 nginx是一个高性能的 静态http 和 方向代理服务器,目的是为了实现解决高并发的问题,即当多个请求同时进来时,会先通过nginx进程进行识别,然后访问到对应的后端服务器,可以说nginx是 ...
- Nginx HTTP 负载均衡和反向代理
1.负载均衡和反向代理介绍 负载均衡是多台服务器对称方式组成一个服务器的集合,每个服务器都能单独对外提供服务,通过负载均衡技术,将客户端请求均匀的分配到服务器集合中的某个服务器上,然后服务器独立响应客 ...
- nginx 一个请求发给多台机器_Nginx系列二:负载均衡与反向代理
一.负载均衡 1.什么是负载均衡 随着请求数的快速增长,单服务器已经无法承担大量用户的并发访问,这个时候,就需要建立服务器集群,来让多台服务器协同工作,提高整体项目的吞吐量和QPS.假设一台设备资源占 ...
- ubuntu apache2 的负载均衡和反向代理
apache功能其实很是强大,最近一段时间研究了下apache的反向代理和负载均衡,反向代理网协的外网出口和我的博客出口就是通过apache的反向代理实现的,总结一下,重点说说负载均衡的配置. 首先说 ...
最新文章
- GPU profile优化
- 校园计算机协会简介,大学计算机协会校园活动策划书
- 【总结】有三AI所有GAN相关学习资料汇总,有图文、视频、代码实战等......
- C语言数字3转变字符 3 程序,大学c语言知识点总结
- 判断1个整数的二进制形式的1的个数
- 使用设备mac好还是随机mac好_省4000我给MBP16搭配了一块2T SSD:希捷 酷鱼飞翼 Fast SSD使用测评...
- keepalived+nginx保持高可用配置
- Java开发入门与实战!java图形用户界面布局
- 如何在水经注会员中心购买流量下载地图
- Windows安装宝塔后跳过绑定手机号
- WIN10解决“任务管理器被系统管理员禁用”问题
- cmd中如何运行python文件_在cmd中运行.py文件: python的操作步骤
- linux执行脚本提示文件忙,linux定时执行脚本文件fgo 封号吗
- Unity之简单射击游戏案例
- php ECShop form,在ecshop中添加页面并且实现后台管理
- win10用linux命令关机,Win7、Win10和Ubuntu 都在用的关机命令
- 代理arp 无故arp 反向arp
- c语言编程a4988驱动步进电机,A4988 步进电机驱动模块测试
- 【MyBatis】基础全网最全,看这篇就够了
- SQL注入与万能密码登录
热门文章
- flask 创建基本模板
- python asyncio 使用方法
- 搭建 Hadoop 伪分布式环境
- GNT格式转换为PNG格式
- LeetCode 94. Binary Tree Inorder Traversal--二叉树中序遍历--递归,迭代--C++,Python解法
- LeetCode 657 : Robot Return to Origin
- android五大布局的用法,android:stretchColumns用法
- C++搞懂深拷贝初始化=与赋值(运算符重载)=的区别
- c语言 简单编程题,c语言简单编程练习题.doc
- c3074 无法使用带圆括号的_小学生常见易考标点符号使用方法及练习(含答案)...