• 正向代理与反向代理(五)


    一、概念

    1.1 正向代理

    举例说明:

    A同学在大众创业、万众创新的大时代背景下开启他的创业之路,目前他遇到的最大的一个问题就是启动资金,于是他决定去找马云爸爸借钱。可想而知,最后碰一鼻子灰回来了, 情急之下,他想到一个办法,找关系开后门,经过一番消息打探,原来A同学的大学老师王老师是马云的同学,于是A同学找到王老师,托王老师帮忙去马云那借500万过来,当然最后事成了。不过马云并不知道这钱 是A同学借的,马云是借给王老师的,最后由王老师转交给A同学。这里的王老师在这个过程中扮演了一个非常关键的角色,就是代理,也可以 说是正向代理,王老师代替A同学借钱这件事,这个过程中,真正借钱的人是谁,马云是不知道的,这点非常关键。

    我们常说的代理也就是只正向代理,正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,某些kexue上网工具扮演的就是典型的正向代理角色。
    用浏览器访问http://www.google.com 时,被残忍的block,于是你可以在国外搭建一台代理服务器,让代理帮我去请求google.com,代理把请求返回的相应结构再返回给我。

    1.2 反向代理

    大家都有过这样的经历,拨打10086客服电话,可能一个地区的10086客服有几个或者几十个,你永远都不需要关心在电话那头的是哪一个,叫什么,男的,还是女的,漂亮的还是帅气的,你都不关心,你关心的是,你的问题能不能得到专业的解答,你只二要拨通了10086的总机号码,电话那头总会有人会回答你,只是有时慢有时快而已。那么这里的10086总机号码就是我们说的反向代理。客户不知道真正提供服务人的是谁。
    反向代理隐藏了真实的服务端,当我们请求电ww.baidu.com的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。
    Nginx就是性能非常好的反向代理服务器,用来做负载均衡。

     两者的区别在于代理的对象不一样:正向代理代理的对象是客户端;反向代理代理的对象服务端。

    以nginx为例,

    正向代理,nginx就是为一个服务器地址做代理(服务器是不知道具体的客户端是谁在访问的);

    反向代理:nginx代理的是某个服务器,可能有很多的服务器,客户端是不知道现在访问的这个域名最终会指向哪个服器。

    上述内容参看自百度搜索。

    二、nginx

    1、定义:Nginx (engine x) 是一个高性能的HTTP反向代理服务器,也是一个IMAP/POP3/SMTP服务器

    2、应用:做什么事!做代理,正向代理,反向代理。

    3、开发语言:nginx是C语言开发,建议在linux上运行。具体安装使用见word文档。

    4、使用:电商项目里用到了它做反向代理。通过nginx实现了负载均衡。

    1. 分布式项目部署.部署时不同的项目放入到一个tomcat中.
    
    1.1 如果某个某块对应的功能访问频率较高时.部署项目的tomcat压力比较大.
    
    1.2 可以使用nginx降低某一些tomcat的压力.
    
    1.2.1 实现思路,把一个tomcat的事件由多个tomcat完成
    
    1.4 使用nginx之后结构图
    
    1.4.1 要求tomcat中项目是完全相同的.
    
    1.4.2 使用nginx作为中间件,把请求转发到特定的tomcat上
    
    2. 负载均衡(nginx)
    
    2.1 在高并发,高访问频率下,为了降低服务压力,把服务器部署成多份,其中每一份工作量相同的.
    
    3. nginx中实现负载均衡时可以设定每个服务的权重.
    
    3.1 服务器的访问频率= 当前服务器的权重/所有服务器权重和
    
    3.2 考虑到实际情况下不同服务器的配置可能不同.
    
    4. nginx.conf中相关参数.在upstream中server后 的参数:

    down 表示单前的server暂时不参与负载

    weight  默认为1.weight越大,负载的权重就越大。

    max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误

    fail_timeout:max_fails 次失败后,暂停的时间。

    backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻

    5. 实现步骤:参看电商ego-第14天文档。

    关于集群、分布式、负载均衡的概念区别可以参看下:https://www.cnblogs.com/panchangde/p/11570395.html

    上面是反向代理,下面通过nginx代理vsftp图片服务器是正向代理。

    三、vsftp

    3.1FTP简介

    FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。 FTP是File Transfer Protocol(文件传输协议),专有的端口是21。

    在多个服务器需要用到公共资源时,设置vsftp图片服务器,用到了nginx做正向代理。使用Nginx代理/home/ftpuser目录,把nginx安装到图片服务器中即可,具体步骤见ego-two。

    3.2 VSFTPD简介

    vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,一个linux的组件。用它来做个图片服务器。

    Vsftpd 是通过ftp协议访问的!ftp协议的端口号21。Filezila :sftp:默认端口号22。

    3.3知识点详解

    面试题:ftp,http分别是什么鬼?

    FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。

    HTTP超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。

    优点:

    1. 完全基于网络,覆盖范围广,操作更加灵活。
    2. 完善的用户权限管理,能指定每个登陆的用户能看到什么、做什么事情。
    3. 数据传输可以通过SSL 、SSH2进行安全性加密,保证数据不被非法截取,安全性高。
    4. 使用TCP/IP协议,保证数据的准确到达。
    5. 传输速度快。当文件大于1M 的时候,FTP 的传输速率比HTTP 更快,文件越大,速度越快。

    缺点:

    前提:必须有ftp服务器作为载体!

    ftp服务器上的文件,必须下载才能使用!

    为什么使用FTP服务器?

    1.上传文件的时候,速度快!

    2.在分布式项目中对资源文件的统一管理。确保路径是唯一的!

    3.4 步骤

    • FTP服务器
    • VSFTPD服务组件
    • Nginx目录代理
    • FTPClient技术进行文件上传

    3.4.1在linux系统中搭建vsftp服务器

    参考资料中vsftpd安装手册.doc

    3.4.2使用nginx做代理服务器

    参考资料中nginx安装手册.doc

    3.4.3使用java FTPClient技术上传图片到vsftp服务上

    新建一个项目maven项目

    在pom.xml中添加依赖

    <!-- https://mvnrepository.com/artifact/commons-net/commons-net -->
    
    <dependency>
    
        <groupId>commons-net</groupId>
    
        <artifactId>commons-net</artifactId>
    
        <version>3.3</version>
    
    </dependency>

    实现代码

    public class TNginx {
    
           public static void main(String[] args) throws SocketException, IOException {
    
                  // 1.创建FTPClient 对象
    
                  FTPClient ftp = new FTPClient();
    
                  // 创建连接
    
                  ftp.connect("192.168.26.154", 21);
    
                  // 登录
    
                  ftp.login("ftpuser", "bjsxt");
    
                  // 设置文件上传的类型为二进制类型
    
                  ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
    
                  // 设置上传文件名称,上传的文件
    
                  ftp.storeFile("ldh.jpg", new FileInputStream("d:/img.jpg"));
    
                  // 退出
    
                  ftp.logout();
    
                  System.out.println("上传完成!-----");
    
           }
    
    }

     ···

    如果错过太阳时你流了泪,那你也要错过群星了。
    在所有的矛盾中,要优先解决主要矛盾,其他矛盾也就迎刃而解。
    不要做个笨蛋,为失去的郁郁寡欢,聪明的人,已经找到了解决问题的办法,或正在寻找。
  • 相关阅读:
    Java数据结构和算法——汉诺塔问题
    svn的使用
    Struts+iBatis+Spring+mysql整合开发
    Java Collection
    IOS推送功能的实现(javapns)
    [工具库]JFileDownloader工具类——多线程下载网络文件,并保存在本地
    xsl 中 foreach 的使用
    网页制作技巧24条
    js 实现 datagrid 鼠标移动时datagrid 表的该变
    How to extend ASP.NET datagrid for multiselection of data rows.
  • 原文地址:https://www.cnblogs.com/szrs/p/13439664.html
Copyright © 2020-2023  润新知