简介
我们大多数人都熟悉一些代理服务器:
正向代理
反向代理
在访问资源的客户端(用户代理)的上下文中可以看到“转发”和“反向”。资源可以(不限于):
通常是网站或服务器节点
FTP服务器
为什么用?
让我们来举一个名叫QWERTY的样板组织之例,并且基础架构团队已经定义了如下的策略:
任何访问互联网的人都须遵守组织中定义的规则。
访问基础结构中托管服务的任何人都不得直接访问服务节点。
怎么用?
作为员工,你将如何访问公司资源?
对于方案1,你需要知道:
有哪些政策或规则?
你被允许访问互联网吗?(允许也意味着您指定(或)你的IP地址(或)其他过滤条件)
对于个人(或)应用程序而言,这将难以跟踪可在组织内访问的互联网上的每个资源。
相反,如果在服务器中定义了这样的东西,并且只允许记住服务器名称和端口号,那该怎么办呢?转发代理服务器是这样做的。来看下图:
代理服务器会将你的请求转发到预期的节点或网站。如果资源不符合组织策略,它也会拒绝提供请求。前端代理的配置倾向于组织的基础架构团队如何决定以下参数(不限于):
什么可以转发到网站/相应节点?
什么应该阻止用户代理?
通过网络访问资源时消耗的带宽是多少?
由于整个组织的情况各不相同,让我们更多地关注方案2。
我们需要知道代表服务器代表服务于您请求的网站/端点的代理服务器。我们举一个例子:
你或你的应用程序想要访问一个节点(例如:http://qwerty.com)
在这种情况下,你知道该网站的域名为qwerty.com,可以通过http协议访问。但是,这完全是从最终用户中抽象出来的。
反向代理的配置倾向于关于以下参数的架构决策(不限于):
如果我的服务被数以百万计的请求发送垃圾邮件会怎么样?
如果***者/***能够访问服务器,我的服务会发生什么变化?
当基础架构更新时,我的服务会发生什么。这可能与硬件(或)操作系统补丁有关?
当我想将服务域名从http://qwerty.com更改为http://asdfgf.com时,我服务的用户会怎么样?
当依赖服务关闭时,我的服务会发生什么变化?
当我的服务端点必须通过https访问但无法支付“N”个SSL证书时会发生什么?
像上面这样的问题将让我们选择反向代理服务。
如何设置反向代理?
Nginx服务器
我们来看如下Nginx服务器的配置。打开nginx.conf文件(如果是第一次尝试它,请一定进行备份)。
在Server 段location部分,使用服务器端点添加代理转发设置,如下代码。
......server { listen <%= ENV["PORT"] %>; server_name localhost; //Any context-path's with "/api" will be served by api-qwerty.com location /api { proxy_set_header Host api-qwerty.com:80; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://abc-def.ghij-klmn.com; } //Any context-path's with "/ui" will be served by ui-qwerty.com location /ui { proxy_set_header Host ui-qwerty.com:80; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://ui-qwerty.com; } }
Apache
打开httpd.conf文件。 (如果你是第一次尝试,请先进行备份),你可以添加以下行并根据需要替换上下文路径与节点。
....ProxyPass /api http://api-qwerty.com/apiProxyPa***everse /api http://api-qwerty.com/apiProxyPass /ui http://ui-qwerty.com/uiProxyPa***everse /api http://ui-qwerty.com/ui....
欢迎各在下面的文章评论区中告诉你的看法。