🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。 ### **代理的概念** 代理,一般涉及到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程。如比如客人到耐克专卖店买鞋,这个专卖店就是代理,被代理角色就是耐克厂家,目标角色就是用户。 一般实现代理技术的方式就是在服务器上安装代理服务软件,让其成为一个代理服务器,从而实现代理技术。常用的代理技术分为正向代理、反向代理和透明代理。 <br> ### **正向代理** 一般情况下,代理技术默认说的是正向代理技术。 正向代理是一个位于客户端 【用户A】和原始服务器【服务器B】之间的服务器【代理服务器C】,为了从原始服务器取得内容,用户A向代理服务器C发送一个请求并指定目标(服务器B),然后代理服务器C向服务器B转交请求并将获得的内容返回给客户端。 客户端必须要进行一些特别的设置才能使用正向代理。 ![](https://img.kancloud.cn/f3/07/f307b66d0bec56eb080ded5e5c56f386_1222x586.jpg) 所谓的正向代理就是代理服务器替代访问方【用户A】去访问目标服务器【服务器B】。这样的代理模式称为正向代理,正向代理最大的特点是<span style="color:#f54545;background-color:#f2f2f2;">客户端非常明确要访问的服务器地址</span>;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式<span style="color:#f54545;background-color:#f2f2f2;">屏蔽或者隐藏了真实客户端信息</span>。 **作用:** * 访问本来无法访问的服务器B的资源(比如vpn) * 加速访问服务器资源 * cache缓存作用,如果在用户A访问服务器B获取某数据F之前,已经有人通过代理服务器访问过服务器B取得数据F,则代理服务器会把数据F暂存一段时间,如果有人正好取该数据F,那么代理服务器Z不再访问服务器B,而把缓存的数据F直接发给用户A。这一技术在Cache中术语就叫Cache命中。 * 隐藏了真实客户端信息 **Nginx正向代理配置** ``` server{ resolver 8.8.8.8; resolver_timeout 30s; listen 82; location / { proxy_pass http://$http_host$request_uri; proxy_set_header Host $http_host; proxy_buffers 256 4k; proxy_max_temp_file_size 0; proxy_connect_timeout 30; proxy_cache_valid 200 302 10m; proxy_cache_valid 301 1h; proxy_cache_valid any 1m; } } 1、不能有hostname。 2、必须有resolver, 即dns,即上面的8.8.8.8,超时时间(30秒)可选。 3、配置正向代理参数,均是由 Nginx 变量组成。 proxy_pass $scheme://$host$request_uri; proxy_set_header Host $http_host; 4、配置缓存大小,关闭磁盘缓存读写减少I/O,以及代理连接超时时间。 proxy_buffers 256 4k; proxy_max_temp_file_size 0; proxy_connect_timeout 30; 5、配置代理服务器 Http 状态缓存时间。 proxy_cache_valid 200 302 10m; proxy_cache_valid 301 1h; proxy_cache_valid any 1m; 配置好后,重启nginx,以浏览器为例,要使用这个代理服务器,则只需将浏览器代理设置为http://+服务器ip地址+:+82 (82是刚刚设置的端口号)即可使用了。 ``` <br> ### **反向代理** 反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。 ![](https://img.kancloud.cn/8d/0d/8d0d4f1a7c3617f6aac99624063bb785_1222x540.jpg) 多个客户端给代理服务器发送的请求,代理服务器接收到之后,按照一定的规则分发给了不同的服务器。此时请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。 客户端是无感知代理的存在的,反向代理对外都是透明的,<span style="color:#f54545;background-color:#f2f2f2;">访问者并不知道自己访问的是一个代理服务器</span>,因为客户端不需要任何配置就可以访问。 **作用:** * 保护和隐藏原始资源服务器 * 实现负载均衡