您的位置: 首页 > 新闻资讯 > > 正文

Nginx配置二级目录/路径 映射不同的反向代理和规避IP+端口访

发布时间:2020年01月06日 来源:互联网

    当配置Nginx来映射不同的服务器 可以通过二级路径来反向代理 来解决一个外网端口实现多个服务访问。


Nginx配置二级目录/路径 映射不同的反向代理和规避IP+端口访


    配置如下:


    复制代码


    server {


    listen 80;


    server_name demo.domain.com;


    #通过访问service二级目录来访问后台


    location /service/ {


    #DemoBackend1后面的斜杠是一个关键,没有斜杠的话就会传递service到后端节点导致404


    proxy_pass      http://backend1/;


    proxy_redirect  off;


    proxy_set_header Host $host;


    proxy_set_header X-Real-IP $remote_addr;


    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


    }


    #其他路径默认访问前台网站


    location / {


    proxy_pass http://backend2;


    proxy_redirect  off;


    proxy_set_header  Host  $host;


    proxy_set_header  X-Real-IP  $remote_addr;


    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;


    }


    }


    #简单的负载均衡节点配置


    upstream backend1 {


    server 192.168.1.1;


    server 192.168.1.2;


    ip_hash;


    }


    upstream backend2 {


    server 192.168.2.1;


    server 192.168.2.2;


    ip_hash;


    }


    复制代码


    对于规避IP+端口访问,可能粗略一看,还没理解是个啥意思吧!


    其实就是现在业界流行的一种防DNS污染的解决方案之一:手机APP里面除了通过域名来获取数据,还会额外嵌入一些备用的IP。APP在获取数据时,会先通过域名向服务器发起一个简单的校验请求,如果得到的不是预期数据,说明该网络环境下的DNS已被污染,比如被运营商劫持,请求A内容却给你展示B内容!这时候,APP将会启动备用预案,通过IP的方式来请求数据!很明显,这个做法可以有效避免恶心的DNS劫持了(看完这段是不是有所收获呢?)。


    做法很简单,就是在APP中集成多个IP和端口作为备用的访问途径。


    当开发GG找到我,提出的需求是:


    需要实现公网IP+端口来访问,比如邮件API使用 http://192.168.1.10:125


    Ps:公网服务器是多线的,那么就有多个IP,本文假设电信是192.168.1.10,联通是192.168.2.10,移动是192.168.3.10等


    说白了就是要用端口来区分不同的API,此时如果我不深究,顺手可能会写出如下配置:


    Shell


    复制代码


    #API1


    server {


    listen 125;


    server_name 192.168.1.10 192.168.2.10 192.168.3.10;


    location / {


    proxy_pass      http://DemoBackend;


    proxy_redirect  off;


    proxy_set_header   Host  api1.domain.com;


    proxy_set_header   X-Real-IP   $remote_addr;


    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;


    }


    }


    #API2


    server {


    listen 126;


    server_name 192.168.1.1 192.168.2.1 192.168.3.1;


    location / {


    proxy_pass      http://DemoBackend;


    proxy_redirect  off;


    proxy_set_header   Host  api2.domain.com;


    proxy_set_header   X-Real-IP   $remote_addr;


    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;


    }


    }


    ##API n等等....


    复制代码


    粗略一看,确实是可以实现开发GG的要求啊!再仔细一想,你会发现如此做法会开放越来越多的端口!运维成本以及辨识度低还只是其次,咱说好的安全第一呢?


    经过思考和测试,我写出的最终配置如下:


    Shell


    复制代码


    #新增的IP映射配置


    server {


    listen 80;


    server_name 192.168.1.10 192.168.2.10 192.168.3.10;


    location /mail_api/ {


    proxy_pass      http://DemoBackend/; #后面的斜杠不能少,作用是不往后端传递/mail-api 这个路径


    proxy_redirect  off;


    proxy_set_header  Host  mailapi.domain.com; #传递不同的host给后方节点,实现IP和域名均可以访问


    proxy_set_header  X-Real-IP  $remote_addr;


    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;


    }


    location /other_api1/ {


    proxy_pass      http://DemoBackend/;


    proxy_redirect  off;


    proxy_set_header  Host  otherapi1.domain.com;


    proxy_set_header  X-Real-IP  $remote_addr;


    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;


    }


    #还可以添加更多映射,通过不同的路径来映射不同的API,最后对于直接访问IP则返回403,防网络上的扫码探测


    location / {


    return 403;


    }


    }


    #原有的域名映射


    server {


    listen 80;


    server_name mailapi.domain.com;


    location / {


    proxy_pass      http://DemoBackend;


    proxy_redirect  off;


    proxy_set_header  Host  $host;


    proxy_set_header  X-Real-IP  $remote_addr;


    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;


    }


    }


    server {


    listen 80;


    server_name otherapi1.domain.com;


    location / {


    proxy_pass      http://DemoBackend;


    proxy_redirect  off;


    proxy_set_header  Host  $host;


    proxy_set_header  X-Real-IP  $remote_addr;


    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;


    }


    }


    #简单的节点配置(当这些API都用到同一个Backend时,上述代码中的proxy_set_header传递的host就起到了关键性作用!)


    upstream DemoBackend {


    server 192.168.10.1;


    server 192.168.10.2;


    ip_hash;


    }


    复制代码


    最终实现的效果就是:你要通过IP请求邮件API,只要请求 http://192.168.1.1/mail_api/ 即可,而不需要开放多余端口。而且,后续要新增更多API,只需要定义不同的二级路径即可,这些二级路径的辨识度可比端口要好得多!


    Ps:正如代码中的注释,示例代码只用了一个 DemoBackend 节点配置,为的是分享另一个小技巧:当后端节点承载了多个站点而且都是监听80端口时(比如某些小公司同一个IIS服务器部署了N个站点),反向代理中的proxy_set_header参数,可以自定义传递一个host域名给后端节点,从而正确响应预期内容!


    这段解释有点无力,还是拿实际例子举例吧!


    我之前供职的公司节点用的是IIS服务器,前端用Nginx反向代理,IIS服务器上有多个站点,站点之间部分会通过 rewrite 规则联系起来。


    打个比方:比如A网站有个专题内容(www.a.com/zt/)是通过IIS伪静态映射到了B网站(content.b.com)。也就是访问到http://www.a.com/zt/,其实最后是通过A网站映射到了B网站上面。


    后来发现IIS有个伪静态BUG,会经常奔溃,就要我用前端的Nginx来实现直接映射,而不再走IIS的A网站中转。


    那么这个需求就正好用到了 proxy_set_header 技巧,一看就懂:


    Shell


    复制代码


    server {


    listen 80;


    server_name www.a.com;


    location /zt/ {


    proxy_pass      http://ABackend; #都是相同的节点,此示例代码我就不写upstream了


    proxy_redirect  off;


    proxy_set_header  Host www.b.com; #这里就是关键性作用,传递b域名给后端IIS


    proxy_set_header  X-Real-IP  $remote_addr;


    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;


    }


    }


    #upstream略..


    复制代码


    很明显,通过传递自定义域名,就可以实现通过A网站访问Nginx,返回B网站内容,和反向代理谷歌的原理是一致的。


    当然,上文为了实现 IP 和域名都可以访问,这个proxy_set_header 设置也是必须的。说白了就是在反代过程中,对后端服务器伪装(传递)了一个自定域名,让后端响应该域名预期内容。


    本文分享的经验,其实比较简单,主要就是通过不同路径来反代不同的目标。估计很多大拿早就用烂了吧!不过值得注意的是,通过自定义路径反代,需要注意 proxy_pass 参数后面是否需要斜杠,避免将自定义的路径传递到后端节点,导致访问404!


相关文章内容简介

1 不同的代理IP有什么区别?

    不同的代理IP有什么区别?使用代理IP时,现在有很多代理IP商家,很多用户也看不出有什么不同,也不知道该怎么选择。那么,代理IP有什么不同呢?    首先代理IP有免费和收费的,免费就是不需要花钱,在网络上可以直接找到,但可用率很低,挑选可用IP会很麻烦,只适合初级学者,不适合用于工作。收费就是由商家提供的代理IP软件,需要花钱,但操作简单,换IP也方便。如果不小心选择了质量差的代理,访问时候对方可能会识别出你使用了代理IP,依旧会查出真实IP,导致被封。    所以如果是专业人员工作使用代理IP,建议选择收费的代理IP,这样工作效率高,还不会有被封的风险。万变ip代理提供的IP均为高匿名IP,有不同套餐,可以按照自己的项目来选择,价格合理。    找到合适的代理IP要根据自己的实际需求来定,最简单的方法就是对IP进行验证,可以验证代理IP是否有效。还可以对代理IP提供的IP匿名程度来进行检测,一般都需要用高匿名代理效果是最好的。还可以验证代理IP是否可以访问... [阅读全文]

2 代理ip怎么选择呢?

    代理ip怎么选择呢?代理IP很多人都不陌生,特别是推广人员,可以给我们的工作带来很大的帮助。随着需求的增大,IP代理软件特别多,所以在挑选的时候让很多用户不知该怎么办。那么,代理IP哪家好呢?    万变ip代理IP是非常实用的,是自己搭建的服务器,IP可用率非常高,可达到97%,IP质量无需担心,在使用的时候绝对不会出现冲突的情况。而且操作的过程很简单,只需一键就可快速更换IP,还有专业技术人员在线指导,无论是否用过代理IP软件,都可以快速掌握。    选择好的代理IP软件用户要多参考几家软件,有的软件并不是特别好用,所以用户不要急于选择,可以多试用几家。    现在在网络中随便搜索就可以找到很多代理IP软件,因为软件的数量剧增,在选择的时候就尤为重要,如果选择了不好的代理,不仅不会给我们的工作带来帮助,还会很麻烦。下面就为大家介绍一下选择代理IP的三要素。    1.IP资源的数量。如果可以提供的IP数量很少,在切换IP的时候就很有可能... [阅读全文]

推荐阅读

  1. 09

    2020-09

    代理ip:讲解IP地址的归类!

    讲解 IP地址 的归类!IP地址是给在Internet上的电脑上一个序号,假如把电子计算机比成“电話”,那IP便是“电話号码”,由电話号码才能够 拔号,一样的有IP才可以联接网络网上,Internet中的无

  2. 03

    2020-01

    代理ip基于WebSocket建立的连接

    text- 基于WebSocket建立的连接

  3. 06

    2020-03

    python3爬虫如何在requests中设置请求头Headers

    在前两篇文章中,我们了解到了Headers在爬虫策略中扮演的角色,也了解到了一些关于headers的参数的含义,今天我们来看看如果如何在requests中设置请求头Headers,伪装成浏览器,顺利的完成爬虫

  4. 19

    2020-05

    如何更换动态IP?

    我们都知道IP地址有动静之分,分为动态IP和静态IP,而作为普通用户的我们使用的多为动态IP。那么在使用时一般如何更换动态IP呢?

  5. 02

    2020-01

    免费代理ip的安全性怎么样?

    可能很多人还是不太了解 代理ip ,但是他们一定知道免费代理ip是什么意思。免费代理ip归根究底就是不需要支付任何费用,随意就能在网上搜索使用的ip,现在有不少的年轻人在初次使用代理ip

  6. 27

    2020-02

    常见代理IP刷量的行业有哪些?

    新生事物代理就是说代理业务流程一般来说随时随地web电脑浏览器全过程发出请求另一方等服务平台的阅读文章量、浏览量,刷量取得成功的时代,总流量的时代,总流量互联网飞快进度的时代

因为专业! 所以简单! 产品至上,价格实惠 是我们服务追求的宗旨

免费试用