我对代理-IP-域名三者的理解

前言:本文主要谈理解

一:IP地址

        查看IP地址的代码

ipconfig    # Windows
ifconfig    # linux(我这里使用的是Ubuntu)

        首先,基于IP协议,IP地址可以看作一台服务器的身份证,我们可以根据IP来指定连接到某一台服务器(前提是对外开放)。例如下图,通过ping指令查看是否可以连接到该地址。

ping xxx.xxx.xxx.xxx    # 填入实际的IP

         目前几乎所有可以通过浏览器访问的网站,需要联网的程序,软件,APP等。都需要部署到一台或多台服务器上,假设我们需要访问这台服务器中的web服务,可以通过指定IP地址以及端口来实现,例如:如果没有程序运行并指定端口。

        这里我在本地运行了一个web服务并制定了5000端口。

        由此我们想到三个问题,
        1.IP地址是可能变化的 
        2.我们不可能记住每一个需要使用的网站的IP
        3.对于腾讯/百度/华为等大企业,他们的某个程序不可能只运行在一个服务器上,会布置到多个服务器上,这样就有多个IP地址。
        所有我们需要用统一的名字来描述,例如,百度的IP地址很多,但是我们不需要知道百度的IP是什么,我们只需要知道https://www.baidu.com这个名字,就可以直接访问百度的网站。

二:域名

        当前我们访问百度的顺序是:协议(https)+域名(www.baidu.com)+后缀(这个会在输入查询条件的时候生成),例如我在百度询问11+11等于多少,会生成一个URL。
11+12等于多少?_百度搜索 (baidu.com)icon-default.png?t=N7T8https://www.baidu.com/s?wd=11%2B12%E7%AD%89%E4%BA%8E%E5%A4%9A%E5%B0%91%3F&rsv_spt=1&rsv_iqid=0xa9d069f20000c31d&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_dl=tb&rsv_enter=1&rsv_sug3=29&rsv_sug1=30&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&prefixsug=11%252B12%25E7%25AD%2589%25E4%25BA%258E%25E5%25A4%259A%25E5%25B0%2591%25EF%25BC%259F&rsp=6&inputT=10830&rsv_sug4=16684        可以看到,还是有    协议(https)://域名:(www.baidu.com),后面出现了后缀
        /s?wd=11%2B12%E7%AD%89%E4%BA%8E%E5%A4%9A%E5%B0%........

        这就是完整的访问一个网站的步骤

        现在我们来分析,为什么我们访问域名就能访问到指定的服务器上,并访问到指定的程序?

        下图是计算机网络的五层模型和七层模型

         下图是访问服务和域名解析过程:

        简单来说就是,我们使用浏览器输入一个URL,根据HTTP/HTTPS确定协议,根据域名自动访问到一个最优解的服务器上(最近,访问量最小,曾经访问过......)然后通过后缀调用具体的服务,最后获取返回结果,在浏览器渲染。

        这个过程就是顺着计算机网络的模型一步一步往下执行的。

        显然,上面的域名引申出多个问题,我们为什么能通过域名访问到指定的IP地址?会不会访问到别的IP地址?如何保障安全性?我如何让我的IP地址能对应一个域名?如何支持很多人同时访问我的服务?

三:代理

         代理就像一个中间商,从客户段获取到数据(URL,参数等等)后,将这些参数发送给服务端,然后代理获取到服务端的返回值后,再返回给客户端。
        就像张三需要买盐,就是张三拿着十元钱到王五处买一包盐,王五把盐给张三,结束。这个是没有代理的的访问。
        而代理就是,张三给了李四10元钱,并指定买一包盐。李四拿着钱去王五那买了一包盐,王五把盐给李四。李四把盐给张三,结束。

         上述情况中,因为有李四的介入,张三和王五并没有直接接触,但是张三和王五都获取到了自己需要的资源。这样就引出了代理的两个方向,正向代理和反向代理。

        正向代理:客户端通过代理访问服务端,但是服务端不知道客户端是谁。
        例如:我在中国想购买海外商店A的产品,可是我又不能出国,所以我让代理人出国帮我购买,代理人可以出国并在A处购买产品,然后把东西带回国并交给我。

        反向代理:客户端通过代理访问一个网站,但是不指定具体的服务端。
        例如:我现在需要购买一瓶水,我不在意这瓶水是谁生产的,也不在乎从哪买的,这时候代理人拥有好几家店铺的位置,他可以去任意一家店买,这时候我让代理去买,代理会根据设置好的逻辑寻找一个合适的店铺去买。最后我只需要拿到代理给我的水就行。

        这里我通过nginx为代理工具来讲解代理的作用。

        1.中间层转发
        2.负载均衡
        3.安全性增强
        4.反向代理
        5.web缓存
        6.SSL/TLS终止等等

         nginx配置:

server {              # 一个config文件中一般只有一个server
    listen 80;        # 监听的端口
    server_name example.com;      # 代理后的域名
  
    location / {      # “/”表示后缀
        proxy_pass http://backend_server;  # 指定服务的IP地址和端口
        proxy_set_header Host $host;       # 请求host
        proxy_set_header X-Real-IP $remote_addr;      # 请求IP
    }  

    location /abc {    # “/abc”为后缀
        proxy_pass http://test_server;  
        proxy_set_header Host $host;  
        proxy_set_header X-Real-IP $remote_addr;  
    } 
}

        我们可以通过server代理服务器配置,location表示访问这个域名+后缀的时候被哪个loaction处理。例如我访问http://example.com/会访问http://backend_server,访问http://example.com/abc会访问到http://test_server
        通过上述的代理方法,我们可以直接更改url的后缀来实现调用不同的服务。

 四:总结

        基于现在网络通讯的发展,大部分成熟的业务都需要通过代理来实现各种功能。
        在开发部署中需要使用代理工具来保证程序能更好运行。
        我会在其他文章中具体描述代理,IP,URL具体的使用方法和工具等。

  • 28
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值