Nginx的proxy_pass及upstream的小型负载均衡
proxy_pass
Nginx的proxy_pass将请求代理到其他的后端服务器。例如
listen 9999;
server_name wyc.com;
location /test/aaa {
content_by_lua_block {
ngx.say('new:9999/test/aaa')
}
}
location /test/aaa/bbb {
content_by_lua_block {
ngx.say('new:9999/test/aaa/bbb')
}
}
location /ttt {
proxy_pass http://wyc.com:9999/test;
}
上面请求http://localhost:9999/ttt/aaa/bbb,会匹配到/ttt进入,规则是去掉ttt,将后面的url和参数拼接到proxy_pass的后面,于是返回的
new:9999/test/aaa/bbb
,即location为/test/aaa/bbb的内容。
- 请求
http://wychao.com:8888/user/wyc/wyc/aaa?aa=11&bb=22
(匹配到域名和端口和对应的location为/user/wyc,然后将后面的/wyc/aaa?aa=11&bb=22proxy_pass到需要代理到的服务,正好匹配到另一个server的location里)
server {
server_name wychao.com;
listen 8888;
location /user/wyc {
proxy_pass http://aaa.wyc.com:8888/user;
}
location = /user/name {
echo $request_uri;
}
}
server {
server_name aaa.wyc.com;
listen 8888;
location /user/wyc {
echo $request_uri;
}
}
结果:/user/wyc/aaa?aa=11&bb=22
url | location | proxy_pass | target_url |
---|---|---|---|
aaa.com/aa/bb?a=1 | /aa | http://bbb.com/cc | http://bbb.com/cc/bb?a=1 |
- 即最终代理到的url:将请求的uri去掉匹配到的location部分,其余部分拼接到proxy_pass后面,包括query_string部分。
如果proxy_pass http://aaa.wyc.com:8888不带url,则是将匹配到的url附加到host之后。
upstream
upstream可以做简单的负载均衡等,下面以百度为例,upstream在http段,
upstream search {
server 180.149.132.47;
}
server {
# List port
listen 8888;
server_name wyc.com;
location /s {
#add_header 'Access-Control-Allow-Credentials' 'true';
proxy_redirect off;
proxy_set_header Host "www.baidu.com";
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_pass http://search;
}
}
上面请求域名wyc.com,端口8888,location将代理到search的upstream中,访问:
http://wyc.com:8888/s?wd=nba
和
http://baidu.com/s?wd=nba
的结果是一样的
upstream支持多种负载均衡,下面一个最简单的根据权重分配:
#server1:
server {
server_name wwyycc.com;
listen 8888;
location /user {
content_by_lua_block {
ngx.say('wwyycc.com:host')
}
}
}
#server2:
server {
server_name wwyycc.com;
listen 9999;
location /user {
echo "user wwyycc user";
}
}
#负载:server3:server_name:wyc.com 端口:8888
upstream manageserver {
server wwyycc.com:8888 weight=2;
server wwyycc.com:9999;
}
location /user {
#add_header 'Access-Control-Allow-Credentials' 'true';
proxy_redirect off;
proxy_set_header Host "wwyycc.com";
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_pass http://manageserver;
}
请求http://wyc.com:8888/user,结果按照顺序返回两次server1的结果,再返回一次server2的结果。(上面的例子要成功执行需要nginx的resolver解析,详细见另一篇文章http://www.cnblogs.com/mentalidade/p/6934162.html),echo等指令也是第三方模块echo-nginx-module,这些都是openresty自带的。
Nginx的proxy_pass及upstream的小型负载均衡的更多相关文章
- 单节点nginx为两台apache服务器提供负载均衡
需求:本实验为单节点nginx为两台apache服务器提供负载均衡,所有配置为最简单 1.初始化3台测试server,该关的关了 [root@host101 ~]# vim /etc/hosts 19 ...
- nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录
在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...
- Nginx+keepalived做双机热备加tomcat负载均衡
Nginx+keepalived做双机热备加tomcat负载均衡 环境说明: nginx1:192.168.2.47 nginx2:192.168.2.48 tomcat1:192.168.2.49 ...
- Nginx服务器的使用与反向代理负载均衡
目录 Nginx服务器 一:什么是Nginx? 什么是Nginx - Nginx与其他服努器的性能比较 二:如何在Linux中搭建Nginx服务器? 常见的错误 三:Nginx的反向代理和负载均衡 什 ...
- Nginx 部署、反向代理配置、负载均衡
Nginx 部署.反向代理配置.负载均衡 最近我们的angular项目部署,我们采用的的是Nginx,下面对Nginx做一个简单的介绍. 为什么选择Nginx 轻:相比于Apache,同样的web服务 ...
- nginx+tomcat实现Windows系统下的负载均衡搭建的案例
刚入行没多久就听过‘负载均衡’的大名,到现在因为工作接触的少,所以没什么太多的认识.但自己又对其非常的好奇,所以前两天通过查资料,在自己的笔记本上就搭建了一个超简单的案例(工作中没有时间,晚上到家了条 ...
- 通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布
前提 前段时间顺利地把整个服务集群和中间件全部从UCloud迁移到阿里云,笔者担任了架构和半个运维的角色.这里详细记录一下通过Nginx.Consul.Upsync实现动态负载均衡和服务平滑发布的核心 ...
- keepalived+nginx实现HA高可用的web负载均衡
Keepalived 是一种高性能的服务器高可用或热备解决方案, Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用.Keepalived ...
- 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?
本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享. 1.引言 Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡 ...
随机推荐
- 简述Shiro验证过程
如果让我们自己实现用户登录验证我们都需要哪些步骤? 很简单,根据用户提供的账号从数据库中查询该账户的密码以及一些其他信息,然后拿这个密码与用户输入的密码相比较,因为保存在数据库中的密码一般是经过加密的 ...
- Adaptive Boosting
Boosting boosting和bagging很类似,所使用的多个分类器类型都是一致的.另外,他们的主要区别点如下: boosting中不同的分类器是通过串行得到的,每个分类器都是根据已经训练出来 ...
- Python——数据类型之str
本篇主要内容: 1.str元素的访问 2.str内置43个方法使用示例 str就是储存各种东西的字符串. 他的方法也是最多的...有各种各样的神奇魔法. 1.str的访问,str可以想列表那样访问每一 ...
- NodeJs02 美女爬虫
note: demo代码要编号 导出模块 一个js文件就是一个模块,模块内部的所有变量,对象,方法对外界都不可见.如果想暴漏出去让别人用,就需要导出模块.语法如下: module.exports = ...
- 推荐系统评测指标--准确率(Precision)和召回率(Recall)、F值(F-Measure)
转自http://bookshadow.com/weblog/2014/06/10/precision-recall-f-measure/ 1,准确率和召回率是广泛应用于信息检索和统计学分类领域的两个 ...
- oracle基础概念学习笔记
数据库对象: 1.表:表是用来存放用户数据的对象,由行和列组成. 2.约束:保证数据完整性的规则,可以作用在耽搁字段或者多个字段组合上,用来约束这些字段上的数据必须符合作用于之上的规则. 3.视图:通 ...
- 【转载】10个最佳ES6特性
译者按: 人生苦短,我用ES6. 原文: Top 10 ES6 Features Every Busy JavaScript Developer Must Know 译者: Fundebug 为了保证 ...
- 软考——(5)计算机系统之CPU组成
其实我们很早就接触过计算机系统方面的知识,但是还是出现印象不深,理解不清楚的现象,丢分很严重.这部分的知识需要我们花功夫去理解,因为很多东西我们接触不到,比如校验码.码制等,如果你不去理解而是去记,就 ...
- 如何修改root密码
默认情况下,每次登录ubuntu都会生成一个随机的root密码,如果想要修改, sudo passwd 然后输入密码,这个密码就作为root用户的密码
- 【BZOJ1123】 [POI2008]BLO (tarjan)
tarjan判断割点...拿掉一个点之后,会被分成若干个联通块,用节点个数和统计一下他们相互不能到达的个数就好. ; maxm=; type edgetype=record toward,next:l ...