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

根据特定IP来实现分流

  • 将IP地址的最后一段最后一位为0或2或6的转发至hi-linux-01.com来执行,否则转发至hi-linux-02.com来执行。

upstream nginx-01.com {
  server 192.168.1.100:8080;
} upstream nginx-02.com {
  server 192.168.1.200:8080;
} server {   listen 80;
  server_name www.osriy.org;   location / {
    if ( $remote_addr ~* ^(.*)\.(.*)\.(.*)\.*[026]$){
         proxy_pass http://nginx-01.com;
         break;
        }
        proxy_pass http://nginx-02.com;
    }
}
  • 将IP地址前3段为112.18.96.*转发至nginx-01.com来执行,否则转发至nginx-02.com来执行。

upstream nginx-01.com {
  server 192.168.1.100:8080;
} upstream nginx-02.com {
  server 192.168.1.200:8080;
} server {   listen 80;
  server_name www.zhsir.org;   location / {
    if ( $remote_addr ~* ^(112)\.(18)\.(96)\.(.*)$){
         proxy_pass http://nginx-01.com;
         break;
        }
        proxy_pass http://nginx-02.com;
    }
}

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

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

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

根据forwarded地址分流

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

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

if指令的作用

if指令会就检查后面表达式的值是否为真(true)。如果为真则执行后面大括号中的内容。

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

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

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

  1. Nginx反向代理实现IP访问分流

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

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

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

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

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

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

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

  5. nginx反向代理同一主机多个网站域名

    nginx反向代理同一ip多个域名,给header加上host就可以了 proxy_set_header   Host             $host; nginx.conf例子 upstream ...

  6. nginx 反向代理实现负载均衡*配置实战

    重要点: 1配置反向代理多虚拟主机节点服务器 2经过反向代理后的节点服务器记录用户IP 3与反向代理配置相关的更多参数说明 4根据URL目录地址转发 (1)根据URL中的目录地址实现代理转发(动静分离 ...

  7. 关于nginx反向代理后获取不到客户端的真实ip地址问题

    前段时间在我的网站上用nginx做了一下反向代理,最近发现不能获取客户端ip了,都是拿到的127.0.0.1的本地ip... 通过查资料后,再去看了看我的配置文件,结果发现我没有如下配置: nginx ...

  8. nginx 反向代理 取得真实IP和域名

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

  9. Nginx反向代理+DNS轮询+IIS7.5 千万PV 百万IP 双线 网站架构案例

    原文地址:http://www.jb51.net/article/31844.htm Nginx  ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 ...

随机推荐

  1. 【转】搞清楚LzoCodec和LzopCodec

    使用LZO过程会发现它有两种压缩编码可以使用,即LzoCodec和LzopCodec,下面说说它们区别: LzoCodec比LzopCodec更快, LzopCodec为了兼容LZOP程序添加了如 b ...

  2. python跳一跳辅助学习

    微信跳一跳辅助工具 准备工具 adb驱动 安卓手机 打开手机的调试模式 usb接好手机和电脑 PyCharm:全宇宙唯一一款专门用于Python开发IDE工具 实现原理: 获取手机的实时的截图 点击起 ...

  3. [boostrap]debian下为arm创建debian和emdebian文件系统

    转自:http://www.cnblogs.com/qiaoqiao2003/p/3738552.html Debian系统本身包含对arm的支持,其包含的软件包最多,但是最终的文件系统要大一些. e ...

  4. 浅谈HTTP中Get与Post的区别_转

    可参考:HTTP请求中POST与GET的区别 Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个UR ...

  5. Spider Studio 社区信息

    Spider Studio (采集工作站) 产品页面: http://www.gdtsearch.com/products.spiderstudio.htm QQ群: 45995410 - 有人驻场解 ...

  6. Spark的操作列表

    Action 操作1. collect() ,返回值是一个数组,返回dataframe集合所有的行2. collectAsList() 返回值是一个java类型的数组,返回dataframe集合所有的 ...

  7. notification 报错the method build() is undefined for the type Notificatin.Builder

    notification 报错the method build() is undefined for the type Notificatin.Builder 这事api版本号太低导致的 Notifi ...

  8. 程序中判断android系统版本

    public static int getAndroidSDKVersion() { int version; try { version = Integer.valueOf(android.os.B ...

  9. 扩展KMP - HDU 4333 Revolving Digits

    Revolving Digits Problem's Link Mean: 给你一个字符串,你可以将该字符串的任意长度后缀截取下来然后接到最前面,让你统计所有新串中有多少种字典序小于.等于.大于原串. ...

  10. CSS3 实现厉害的文字和输入框组合效果

    最近在忙着弄网站,学到了不少效果,这又是一个厉害的  <html> <head> <meta http-equiv="Content-Type" co ...