反向代理
Posted ITMan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反向代理相关的知识,希望对你有一定的参考价值。
当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放
内容概要
不知道大家有没有问过别人,或者是自己偷偷在网上搜过 “什么是正向和反向代理“ 等相关、类似的问题,即使问过、搜过是不是也很懵还是感觉无法get到点子上呢?
总结一句话,正向代理就是代理客户端的代理服务,反向代理就是代理服务端的代理服务。
那我们今天就来掰扯掰扯这个问题。
VPN 和正向代理
小明:“你昨天看了我给你发的YouTube视频链接了吗?超级精彩哟!”。
小丽:“哦,那个链接根本打不开呀,看个屁!”,小明失望的看了看小丽。
小明:“好吧,肯定是你没有使用 VPN(fanqiang) 软件,怪不得你看不了...”。
相信你也有经历过类似的场景,朋友给了一个需要你拥有VPN服务才能打开的链接,无论你是万兆光纤也好还是亿兆光纤也罢,死活都无法打开。
这里所说的 VPN 就是人们通常所说的正向代理服务器,VPN(虚拟私人网络 VirtualPrivateNetwork
),是一种加密通讯技术。VPN 有很多的具体实现,比如 PPTP
、 L2TP
、 IPSec
和 openvpn
。VPN 不是为了翻墙而生的,他只是一中技术,就好比菜刀本来是用来切菜的道理一样。使用 VPN 来翻墙基本已经作废了,但当大家谈及翻墙的时候说得最多的还是 “你有好用的 VPN 吗?”,所以把 VPN 当成翻墙工具的代名词也情有可原。
如果你有了翻墙软件就可以轻松访问全世界的网站了,特别是程序员,可以在知识的海洋里遨游。简单来说正向代理服务器类似于下面图所示:
反向代理和 nginx
系统分配和调度的功能就类似于反向代理服务器,对用户来说没有感知。类似于下面图所示:
在软件设计中,服务端开发经常会用到反向代理服务器,比如 Nginx
、 Apache
等,它们经常也被用作为 WEB 服务器, Nginx
被当做代理服务器比较多,所谓的代理服务器是架设在 WEB 服务器和网络中断(比如手机客户端)之间的服务器,换句话说, Nginx
提供了反向代理服务的能力。
由于 Nginx
和 Apache
各自的优势,现在很多开发者选择让两者在服务器中共存。在服务器端让 Nginx
在前 Apache
在后,由 Nginx
做负载均衡和反向代理,并且处理静态文件,将动态请求交给 Apache
去处理。
下图是一个典型的 Nginx
作为反向代理服务器部署 ELK
的架构图,如下:
用 Nginx
的反向代理,用户可以从外部访问到 Kibana
,并且它本身具有负载均衡的作用,也能够提高了其性能。
再看一个微服务架构中的架构图(在网关前面也部署了 Nginx),如下图所示:
关于 Nginx
作为负载均衡器的配置和实例,下一次跟大家分享。你现在只需要聚焦在 Nginx
作为反向代理服务器上面的功能即可。
Nginx 配置反向代理
Nginx
本身已经提供了反向代理服务的能力,下面我们结合实例给大家分享一下,假设你本机已经安装了 Nginx
并且会基本的操作命令。
1、启动 Nginx
sudo nginx
在浏览器打开 http://localhost:80
,确保 Nginx
启动成功。
2、配置 host
我们配置一下本机的 host,vim 编辑即可。
sudo vim /etc/hosts
增加下面一行:
127.0.0.1 www.ithome.com
在浏览器打开 http://www.ithome.com:80
,跟刚才显示一样的WEB 界面。
3、配置 Nginx
编辑 Nginx
配置,如下:
sudo vim /usr/local/etc/nginx/nginx.conf
在 http{
节点下增加下面内容:
server {
# 监听80端口号
listen 80;
# 监听访问的域名
server_name www.ithome.com;
# 根据访问路径配置
location / {
# 设置 http 版本
proxy_http_version 1.1;
proxy_set_header Connection "";
# 把请求转发到 https://www.baidu.com
proxy_pass https://www.baidu.com;
}
}
重新启动 Nginx
,重新加载配置文件,操作命令如下:
sudo nginx -s reload
在浏览器打开 http://www.ithome.com:80
,此时打开的是百度首页。至此,简单的配置 Nginx
作为反向代理服务器的功能已经完成,当然想配置好 Nginx
还需要大家多去实践和看官方技术手册。
proxy_pass
默认使用的是 http1.0
,可以通过 proxy_http_version
指令让它使用 http1.1
,以便开启 keepalive
之类的功能。官方说明 如下:
Sets the HTTP protocol version for proxying. By default, version 1.0 is used.
Version 1.1 is recommended for use with keepalive connections and NTLM authentication.
附录:Nginx 命令
1、查看 nginx 的配置信息
nginx -V
注意:是大写字母 V
。
2、查看 nginx 版本信息
nginx -v
3、启动 nginx
sudo nginx
4、查看 nginx 进程
ps -ef|grep nginx
5、重启 nginx
nginx -s reload
6、完美停止 nginx
kill -QUIT `cat /var/run/nginx.pid`
7、快速停止 nginx
kill -TERM `cat /var/run/nginx.pid`
或者
kill -INT `cat /var/run/nginx.pid`
8、完美停止工作进程,主要用于平滑升级
kill -WINCH `cat /var/run/nginx.pid`
9、强制停止 nginx
pkill -9 nginx
10、检查 nginx.conf 修改是否正确
nginx -t
11、停止 nginx 的命令
nginx -s stop
不经历风雨怎么见彩虹,没有人能够随随便便成功~
以上是关于反向代理的主要内容,如果未能解决你的问题,请参考以下文章