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的小型负载均衡的更多相关文章

  1. 单节点nginx为两台apache服务器提供负载均衡

    需求:本实验为单节点nginx为两台apache服务器提供负载均衡,所有配置为最简单 1.初始化3台测试server,该关的关了 [root@host101 ~]# vim /etc/hosts 19 ...

  2. nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录

    在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...

  3. Nginx+keepalived做双机热备加tomcat负载均衡

    Nginx+keepalived做双机热备加tomcat负载均衡 环境说明: nginx1:192.168.2.47 nginx2:192.168.2.48 tomcat1:192.168.2.49 ...

  4. Nginx服务器的使用与反向代理负载均衡

    目录 Nginx服务器 一:什么是Nginx? 什么是Nginx - Nginx与其他服努器的性能比较 二:如何在Linux中搭建Nginx服务器? 常见的错误 三:Nginx的反向代理和负载均衡 什 ...

  5. Nginx 部署、反向代理配置、负载均衡

    Nginx 部署.反向代理配置.负载均衡 最近我们的angular项目部署,我们采用的的是Nginx,下面对Nginx做一个简单的介绍. 为什么选择Nginx 轻:相比于Apache,同样的web服务 ...

  6. nginx+tomcat实现Windows系统下的负载均衡搭建的案例

    刚入行没多久就听过‘负载均衡’的大名,到现在因为工作接触的少,所以没什么太多的认识.但自己又对其非常的好奇,所以前两天通过查资料,在自己的笔记本上就搭建了一个超简单的案例(工作中没有时间,晚上到家了条 ...

  7. 通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布

    前提 前段时间顺利地把整个服务集群和中间件全部从UCloud迁移到阿里云,笔者担任了架构和半个运维的角色.这里详细记录一下通过Nginx.Consul.Upsync实现动态负载均衡和服务平滑发布的核心 ...

  8. keepalived+nginx实现HA高可用的web负载均衡

    Keepalived 是一种高性能的服务器高可用或热备解决方案, Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用.Keepalived ...

  9. 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?

    本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享. 1.引言   Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡 ...

随机推荐

  1. Tensorflow实现LSTM识别MINIST

    import tensorflow as tf import numpy as np from tensorflow.contrib import rnn from tensorflow.exampl ...

  2. Struts1 多个配置文件的实现

    在Struts 1.0中,我们只能在web.xml中为ActionServlet指定一个配置文件,这对于我们这些网上的教学例子来说当然没什么问题,但是在实际的应用开发过程中,可能会有些麻烦.因为许多开 ...

  3. Hadoop中maptask数量的决定因素

    刚开始接触hadoop平台的时候 部分初学者对于mapreduce中的maptask的数量是怎么确定的 可能有点迷惑,如果看了jobclient里面的maptask初始化的那段源码,那么就比较清楚了, ...

  4. DP———2.最大m子序列和

    Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  5. confluence6.3安装、破解

    confluence是一个专业的企业知识管理与协同软件,可以用于构建企业wiki.通过它可以实现团队成员之间的协作和知识共享.现在大多数公司都会部署一套confluence,用作内部wiki.现在co ...

  6. 兼容firstChild和firstElementChild

    1.nextSibling和nextElementSibling 顾名思义,就是找下一个节点 nextSibling在低版本浏览器中可以顺利找到下一个元素节点,而在正常浏览器中找到的包含中间空格. n ...

  7. [fjwc2015]Screen [从hzw神犇那里扒来的题]

    [题目描述] 码农有一块超新星屏幕,它有N个像素点,每个像素点有亮度和灰度两个参数,记为I和H, 范围都是0~32000. 一天,码农突发奇想,想知道哪个点比较容易亮瞎眼睛.为此,他定义了一个瞎眼指数 ...

  8. 百度之星初赛(A)——T5

    今夕何夕 Problem Description 今天是2017年8月6日,农历闰六月十五. 小度独自凭栏,望着一轮圆月,发出了“今夕何夕,见此良人”的寂寞感慨. 为了排遣郁结,它决定思考一个数学问题 ...

  9. 关于tbody js取法兼容。

    本来jquery就是为了兼容才用的,动态添加表格的时候,ie必须要append 到tbody上,不然无法取上. 而chrome等则可以,最终还是选appendto tobody

  10. 求强连通块_Tarjan算法_C++

    好久没有写算法了,就放一个 Tarjan 上来凑凑数哈 强连通块由若干个点组成,任意点与点之间可以之间或间接到达,显然可以看作一个环 下面是伪代码 强记:dfn为时间不变,low取最小,下一个dfn有 ...