通过Nginx做反向代理来实现分流,以减轻服务器的负载和压力是比较常见的一种服务器部署架构。本文将分享一个如何根据来路IP来进行分流的方法。

根据特定IP来实现分流

  • 将IP地址的最后一段最后一位为0或2或6的转发至test-01.com来执行,否则转发至test-02.com来执行。
upstream test-01.com {
server 192.168.1.100:8080;
} upstream test-02.com {
server 192.168.1.200:8080;
} server { listen 80;
server_name www.test.com; location / {
if ( $remote_addr ~* ^(.*)\.(.*)\.(.*)\.*[026]$){
proxy_pass http://test-01.com;
break;
}
proxy_pass http://test-02.com;
}
}
  • 将IP地址前3段为192.168.202.*转发至test-01.com来执行,否则转发至test-02.com来执行。
upstream test-01.com {
server 192.168.1.100:8080;
} upstream test-02.com {
server 192.168.1.200:8080;
} server { listen 80;
server_name www.test.com; location / {
if ( $remote_addr ~* ^(192)\.(168)\.(202)\.(.*)$) {
proxy_pass http://test-01.com;
break;
}
proxy_pass http://test-02.com;
} }

根据指定范围IP来实现分流

将IP地址的最后一段为1-100的转发至test-01.com来执行,否则转发至test-02.com执行。

upstream test-01.com {
server 192.168.1.100:8080;
} upstream test-02.com {
server 192.168.1.200:8080;
} server { listen 80;
server_name www.test.com; location / {
if ( $remote_addr ~* ^(.*)\.(.*)\.(.*)\.[1,100]$){
proxy_pass http://test-01.com;
break;
}
proxy_pass http://test-02.com;
} }

根据forwarded地址分流

将IP地址的第1段为212开头的访问转发至test-01.com来执行,否则转发至test-02.com执行。

upstream test-01.com {
server 192.168.1.100:8080;
} upstream test-02.com {
server 192.168.1.200:8080;
} server { listen 80;
server_name www.test.com; location / {
if ( $http_x_forwarded_for ~* ^(212)\.(.*)\.(.*)\.(.*)$){
proxy_pass http://test-01.com;
break;
}
proxy_pass http://test-02.com;
} }

if指令的作用

if指令: 判断表达式的值是否为真(true), 如果为真则执行后面大括号中的内容。

以下是一些条件表达式的常用比较方法:

  1. 变量的完整比较可以使用=或!=操作符
  2. 部分匹配可以使用*的正则表达式来表示
  3. ~表示区分大小写
  4. ~*表示不区分大小写(nginx与Nginx是一样的)
  5. !与!*是取反操作,也就是不匹配的意思
  6. 检查文件是否存在使用-f或!-f操作符
  7. 检查目录是否存在使用-d或!-d操作符
  8. 检查文件、目录或符号连接是否存在使用-e或!-e操作符
  9. 检查文件是否可执行使用-x或!-x操作符
  10. 正则表达式的部分匹配可以使用括号,匹配的部分在后面可以用$1~$9变量代替

来源  https://www.jianshu.com/p/4f30d94cb259

Nginx反向代理实现IP访问分流的更多相关文章

  1. Nginx反向代理的目录访问问题

    Nginx反向代理的目录访问问题 2013-05-13 23:21 2730人阅读 评论(0) 收藏 举报 从昨天就开始纠结了,在做实验的时候,遇到目录访问的问题,如下 前端nginx vhost的设 ...

  2. nginx反向代理取得IP地址

    nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递 ...

  3. [亲测]ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问

    前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...

  4. [亲测]七步学会ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问

    前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...

  5. Nginx 反向代理,IP、端口,项目路径变化的问题

    这两天在云上部署公司项目,涉及到nginx反向代理,在部署完成测试,发现在下载文件的时候,无法下载,提示链接被拒绝. 假设nginx代理地址: http://121.53.21.188:9012/we ...

  6. 通过Nginx反向代理实现IP分流

    通过Nginx做反向代理来实现分流,以减轻服务器的负载和压力是比较常见的一种服务器部署架构.本文将分享一个如何根据来路IP来进行分流的方法. 根据特定IP来实现分流 将IP地址的最后一段最后一位为0或 ...

  7. Nginx 反向代理 一个IP代理多个域名,不区分端口,类似windows虚拟机。

    简介: IP有限,所以我们以前使用端口来区分不同的虚拟主机,提供不同的WEB服务. 小范围还凑活,一旦规模扩大,地址记不住了吧?端口记不住了吧? 这个时候我们可以使用DNS,域名解析,毕竟记名字比记I ...

  8. nginx反向代理带路径访问问题

    nginx的配置为192.168.0.219:80分别映射到upstream组192.168.0.55:8080和192.168.0.206:8080,那如何配置做到访问192.168.0.219:8 ...

  9. nginx反向代理时配置访问密码

    在有些情况下,我们需要对服务器上的某些资源进行限流或者禁止陌生人访问,我们可以通过nginx配置来对url添加访问密码. 效果如下 nginx 开启访问验证在 nginx 下,提供了 ngx_http ...

随机推荐

  1. Git的使用--如何将本地项目上传到Github(三种简单、方便的方法)

    一.第一种方法: 1.首先你需要一个github账号,所以还没有的话先去注册吧! https://github.com/ 我们使用git需要先安装git工具,这里给出下载地址,下载后一路(傻瓜式安装) ...

  2. 开启 IPv6 新时代,升级后的 IPv6 厉害在哪?

    IPv6,Internet Protocol Version 6,从字面翻译 “互联网协议第 6 版”,它是IETF设计的用于替代现行版本 IP 协议-IPv4 协议,被称作“下一代互联网协议”.早在 ...

  3. 利用NPOI生成word文档(c#)

    WordTest.aspx.cs using System; using System.IO; using System.Text; using System.Web; using System.We ...

  4. 设计模式的征途(C#实现)—文章目录索引

    1.预备篇 UML类图10分钟快速入门 2.创建型模式 ① 设计模式的征途-01.单例(Singleton)模式 ② 设计模式的征途-02.简单工厂(Simple Factory)模式 ③ 设计模式的 ...

  5. 如何在启用JWT Token授权的.NET Core WebApi项目中下载文件

    背景 前几天,做项目的时候遇到一个文件下载的问题.当前系统是一个前后端分离的项目,前端是一个AngularJs项目, 后端是一个.NET Core WebApi项目.后端的Api项目使用了Jwt To ...

  6. Shiro中的授权问题(二)

    上篇博客(Shiro中的授权问题 )我们介绍了Shiro中最最基本的授权问题,以及常见的权限字符的匹配问题.但是这里边还有许多细节需要我们继续介绍,本节我们就来看看Shiro中授权的一些细节问题. 验 ...

  7. docker~在centos容器中安装新程序

    上一篇我们使用了阿里加速器安装了centos镜像,然后创建了一个新容器,运行了这个镜像,这一讲我们来为这个镜像添加一些应用程序,然后再保存容器,push容器到仓储,大家就可以直接pull我生产的容器了 ...

  8. leetcode — path-sum-ii

    import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Source : https://o ...

  9. 痞子衡嵌入式:语音处理工具Jays-PySPEECH诞生记(1)- 环境搭建(Python2.7.14 + PyAudio0.2.11 + Matplotlib2.2.3 + SpeechRecognition3.8.1 + pyttsx3 2.7)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是语音处理工具Jays-PySPEECH诞生之环境搭建. 在写Jays-PySPEECH时需要先搭好开发环境,下表列出了开发过程中会用到的 ...

  10. Mybatis源码之StatementType

      在mybatis中StatementType的值决定了由什么对象来执行我们的SQL语句.本文来分析下在mybatis中具体是怎么处理的. StatementType 1.StatementType ...