反向代理

Posted ITMan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反向代理相关的知识,希望对你有一定的参考价值。

当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放 反向代理


内容概要

不知道大家有没有问过别人,或者是自己偷偷在网上搜过 “什么是正向和反向代理“ 等相关、类似的问题,即使问过、搜过是不是也很懵还是感觉无法get到点子上呢?

总结一句话,正向代理就是代理客户端的代理服务,反向代理就是代理服务端的代理服务。

那我们今天就来掰扯掰扯这个问题。

VPN 和正向代理

小明:“你昨天看了我给你发的YouTube视频链接了吗?超级精彩哟!”。

小丽:“哦,那个链接根本打不开呀,看个屁!”,小明失望的看了看小丽。

小明:“好吧,肯定是你没有使用 VPN(fanqiang) 软件,怪不得你看不了...”。

相信你也有经历过类似的场景,朋友给了一个需要你拥有VPN服务才能打开的链接,无论你是万兆光纤也好还是亿兆光纤也罢,死活都无法打开。

这里所说的 VPN 就是人们通常所说的正向代理服务器,VPN(虚拟私人网络 VirtualPrivateNetwork),是一种加密通讯技术。VPN 有很多的具体实现,比如 PPTPL2TPIPSecopenvpn。VPN 不是为了翻墙而生的,他只是一中技术,就好比菜刀本来是用来切菜的道理一样。使用 VPN 来翻墙基本已经作废了,但当大家谈及翻墙的时候说得最多的还是 “你有好用的 VPN 吗?”,所以把 VPN 当成翻墙工具的代名词也情有可原。

如果你有了翻墙软件就可以轻松访问全世界的网站了,特别是程序员,可以在知识的海洋里遨游。简单来说正向代理服务器类似于下面图所示:

反向代理

反向代理和 nginx

系统分配和调度的功能就类似于反向代理服务器,对用户来说没有感知。类似于下面图所示:

反向代理

在软件设计中,服务端开发经常会用到反向代理服务器,比如 NginxApache 等,它们经常也被用作为 WEB 服务器, Nginx 被当做代理服务器比较多,所谓的代理服务器是架设在 WEB 服务器和网络中断(比如手机客户端)之间的服务器,换句话说, Nginx 提供了反向代理服务的能力。

由于 NginxApache 各自的优势,现在很多开发者选择让两者在服务器中共存。在服务器端让 Nginx 在前 Apache 在后,由 Nginx 做负载均衡和反向代理,并且处理静态文件,将动态请求交给 Apache 去处理。

下图是一个典型的 Nginx 作为反向代理服务器部署 ELK 的架构图,如下:

反向代理

Nginx 的反向代理,用户可以从外部访问到 Kibana,并且它本身具有负载均衡的作用,也能够提高了其性能。

再看一个微服务架构中的架构图(在网关前面也部署了 Nginx),如下图所示:

关于 Nginx 作为负载均衡器的配置和实例,下一次跟大家分享。你现在只需要聚焦在 Nginx 作为反向代理服务器上面的功能即可。

Nginx 配置反向代理

Nginx 本身已经提供了反向代理服务的能力,下面我们结合实例给大家分享一下,假设你本机已经安装了 Nginx 并且会基本的操作命令。

1、启动 Nginx

 
   
   
 
  1. sudo nginx

在浏览器打开 http://localhost:80,确保 Nginx 启动成功。

2、配置 host

我们配置一下本机的 host,vim 编辑即可。

 
   
   
 
  1. sudo vim /etc/hosts

增加下面一行:

 
   
   
 
  1. 127.0.0.1 www.ithome.com

在浏览器打开 http://www.ithome.com:80,跟刚才显示一样的WEB 界面。

3、配置 Nginx

编辑 Nginx 配置,如下:

 
   
   
 
  1. sudo vim /usr/local/etc/nginx/nginx.conf

http{ 节点下增加下面内容:

 
   
   
 
  1. server {

  2. # 监听80端口号

  3. listen 80;


  4. # 监听访问的域名

  5. server_name www.ithome.com;


  6. # 根据访问路径配置

  7. location / {

  8. # 设置 http 版本

  9. proxy_http_version 1.1;

  10. proxy_set_header Connection "";

  11. # 把请求转发到 https://www.baidu.com

  12. proxy_pass https://www.baidu.com;

  13. }

  14. }

重新启动 Nginx,重新加载配置文件,操作命令如下:

 
   
   
 
  1. sudo nginx -s reload

在浏览器打开 http://www.ithome.com:80,此时打开的是百度首页。至此,简单的配置 Nginx 作为反向代理服务器的功能已经完成,当然想配置好 Nginx 还需要大家多去实践和看官方技术手册。

proxy_pass 默认使用的是 http1.0,可以通过 proxy_http_version指令让它使用 http1.1,以便开启 keepalive 之类的功能。官方说明 如下:

 
   
   
 
  1. Sets the HTTP protocol version for proxying. By default, version 1.0 is used.


  2. Version 1.1 is recommended for use with keepalive connections and NTLM authentication.

附录:Nginx 命令

1、查看 nginx 的配置信息

 
   
   
 
  1. nginx -V

注意:是大写字母 V

2、查看 nginx 版本信息

 
   
   
 
  1. nginx -v

3、启动 nginx

 
   
   
 
  1. sudo nginx

4、查看 nginx 进程

 
   
   
 
  1. ps -ef|grep nginx

5、重启 nginx

 
   
   
 
  1. nginx -s reload

6、完美停止 nginx

 
   
   
 
  1. kill -QUIT `cat /var/run/nginx.pid`

7、快速停止 nginx

 
   
   
 
  1. kill -TERM `cat /var/run/nginx.pid`

或者

 
   
   
 
  1. kill -INT `cat /var/run/nginx.pid`

8、完美停止工作进程,主要用于平滑升级

 
   
   
 
  1. kill -WINCH `cat /var/run/nginx.pid`

9、强制停止 nginx

 
   
   
 
  1. pkill -9 nginx

10、检查 nginx.conf 修改是否正确

 
   
   
 
  1. nginx -t

11、停止 nginx 的命令

 
   
   
 
  1. nginx -s stop


不经历风雨怎么见彩虹,没有人能够随随便便成功~

以上是关于反向代理的主要内容,如果未能解决你的问题,请参考以下文章

来自代码的反向代理和 HTTP 请求

nginx--❤️图解及代码实现正向代理反向代理及负载均衡(非常实用,建议收藏❤️)

1 行 Go 代码实现反向代理

10. Nginx实现反向代理

使用代理进行反向传值

Nginx websocket反向代理