nginx正向代理和反向代理的区别

硅谷探秘者 算法基础 1476 0 0

正向代理和反向代理的区别

总体来说正向代理和反向代理的区别在于代理的对象不一样,正向代理的代理对象是客户端,反向代理的代理对象是服务端。

正向代理:客户端 <一> 代理 一>服务端

反向代理:客户端 一>代理 <一> 服务端

以租房的例子来比喻

正向代理

A(客户端)想租C(服务端)的房子(A(客户端)知道C(服务端)有房子),但是A(客户端)并不认识C(服务端)租不到。

B(代理)认识C(服务端)能租这个房子所以你找了B(代理)帮忙租到了这个房子。

这个过程中C(服务端)不认识A(客户端)只认识B(代理),C(服务端)并不知道A(客户端)租了房子,只知道房子租给了B(代理)。

反向代理

A(客户端)想租一个房子,B(代理)就把这个房子租给了他。

这时候实际上C(服务端)才是房东。B(代理)是中介把这个房子租给了A(客户端)。

这个过程中A(客户端)并不知道这个房子到底谁才是房东

他可能认为这个房子就是B(代理)的。

通过这两个例子就可以大概理解“正向代理的代理对象是客户端,反向代理的代理对象是服务端”这句话。

具体实践案例

正向代理

现准备两台服务器B[192.168.88.130](代理服务器),C[192.168.88.131] (资源服务器)。在资源服务器C的index页面加个字符标记C方便分辨。

1.将资源服务器C的nginx加入一个if条件,配置如下:

location / {
                if ( $remote_addr !~* "^192\.168\.88\.130") {
                        return 403;
                }
            root   html;
            index  index.html index.htm;
        }

该配置只允许ip地址为192.168.88.130的客户端访问。

在我本机浏览器上(192.168.1.115)访问结果如下,显然是访问不了的。

2.配置B(代理服务器),nginx的配置如下

server {
        listen       80;
        server_name  localhost;

        resolver 8.8.8.8;
        location / {
            proxy_pass http://$http_host$request_uri;
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

只修改了两行代码

resolver 8.8.8.8;

proxy_pass http://$http_host$request_uri;

resolver为DNS解析,这里填写的IP为Google提供的免费DNS服务器的IP地址

proxy_pass配置代理转发

至此便是配置了B服务器所有访问根一级的请求全部都代理转发对应到http://$http_host$request_uri去了,$http_host就是我们要访问的主机名,$request_uri就是我们后面所加的参数。

简单的说至此就是相当于配置好了我们请求了B服务器,B服务器再去请求我们所请求的地址。

windows10下配置http代理

本地设置完代理服务器后,再次访问资源服务器[192.168.88.131],发现可以访问了。

反向代理

还是使用BC两台服务器为例,资源服务器C还是那个配置不用变,此时外界是不能访问服务器C的。

重新配置代理服务器B:

server {
        listen       80;
        server_name  localhost;
        location / {
                proxy_pass http://192.168.88.131;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

配置:proxy_pass http://192.168.88.131;

此时通过访问代理服务器B就可以访问资源服务器C

看到页面有字母C的标记。


评论区
请写下您的评论...
暂无评论...
猜你喜欢
weblog 2031 在ngxin配置文件location块中添加如下配置proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr
linux系统 1737 nginx上传文件报413(RequestEntityTooLarge)错误解决方案RequestEntityTooLarge:请求实体太大,nginx时默认大小是1M解决方案:设置
nginx 3143 情景websocket服务端经nginx,刷新页面连接常,大约经过60秒没有发送消息,websocket自动断开连接,控制台打印错误码为1006。 原因在经过nginx时,nginx会检测
linux系统 6645 方案一:一般配置方案二:访问某个域名时静态资源文件方案一:一般配置  如果以html、htm、gif、jpg、jpeg、bmp、png、ico、txt、js、css结尾资源,均由nginx
ASM,java基础 1234   关于cglib概念以及常用api,请参考:初步探究cglib动态:http://www.jiajiajia.club/blog/artical/yjw520
weblog 4607 intInteger 说起intInteger大家耳熟能详是: int是java中基本数据类型,而Integer是引用类型。 Integer必须实例化后才能使用,而
java基础 3070 java静态示例packageclub.jiajiajia.test.staticproxy;publicinterfaceBuyHouse{voidbuyHosue();//买房子
ASM,java基础 1077 概念,这里就不多说了,详细请参考以往博客:初步探究cglib动态:http://www.jiajiajia.club/blog/artical/yjw520/134cglib动态
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1 2024-08  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript 加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。