内容中心阿里云国际服务器上使用反向代理教程

阿里云国际服务器上使用反向代理教程

2022-04-14 14:34:02

在这篇博客文章中,我们将讨论为什么应该使用反向代理,反向代理与负载均衡器有何不同。我们还研究了如何在阿里云上使用反向代理。NGINX工具将用作本文的反向代理,因为它是全球最常见的开源工具,用作Web服务。

什么是反向代理?
反向代理是一个附加层(更确切地说是中间节点/代理服务器),充当外部请求和源系统/应用程序系统之间的信使。在企业设置中,外部用户和应用程序服务器之间可能存在其他层(防火墙通常就是这种情况)。

换句话说,在工作站网络中,反向代理根据客户端的请求从应用程序服务器请求信息,并根据客户端请求将请求带到相关的应用程序服务器(如果有多个应用程序服务器),对于客户端来说,这将是无缝的。客户端将按预期获得所需的响应。

为什么使用反向代理?
对于企业来说,使用分区作为附加安全层是一种常见的标准和做法,实际上这也是企业推荐的做法。通过这样做,企业服务器不会暴露给外界,而是通过反向代理访问这些服务的Internet用户,因此在简单的情况下,只有代理服务器的IP是用户知道的, 没有别的。也就是说,对应用程序服务器一无所知 — 确保企业信息的安全。因此,这也避免了对应用程序节点的某些直接攻击。

什么是负载均衡器?
实际上,这里已经涵盖了这个主题。我建议您仔细阅读本文,以便更好地了解负载均衡器。在阿里云中,负载均衡通常称为负载均衡(SLB)。

现在要问的一个自然问题是“反向代理和负载均衡器之间有什么区别”。两者看起来非常相似,因为 SLB 还可以将客户端的请求中继到服务器,并且是公共 IP 上公开的请求。但是,当然,一个区别是它背后有应用程序服务器。

那么反向代理和负载均衡器之间有什么区别呢?
负载均衡器的主要目的是提供高可用性、更好的水平扩展,顾名思义,即负载分配。另一方面,反向代理可以以与负载平衡器相同的方式使用,但是,其主要功能是从防火墙(或禁用互联网的安全区域)后面的服务器中检索互联网用户的信息。返回给互联网用户或客户端的信息或资源似乎来自反向代理。下面的图片也可以为读者说明这种差异。

反向代理的主要功能是充当后端服务器的额外防线,而负载平衡器的主要功能是提供高可用性和负载平衡。有些任务两者都可以执行,但不是专门执行的,还有一些任务可以执行而另一个不能执行。例如,反向代理缓存请求,而负载均衡则不缓存,这意味着反向代理可以从其缓存向客户端返回响应。此外,反向代理可以代理到任何后端,该后端可以是任何网站,ECS实例,容器,OSS,而在负载均衡的情况下,您仅限于ECS实例,容器或有限的云产品。但是,对于SLB扩展,它本质上是简单的,因为它是专门为此目的而构建的,而使用反向代理则具有挑战性。

教程:如何设置反向代理
1. 您需要一个充当反向代理的节点/工作站/服务器/VM。在本教程中,我们将遵循基于Linux的反向代理的说明,因为Linux是反向代理最流行的操作系统。

首先,我们需要安装NGINX。CentOS NGINX 的 rpm 文件可由此下载。

用于下载NGINX的rpm二进制包的命令如下:

wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.14.2-1.el7_4.ngx.x86_64.rpm
这将下载调用此命令的目录中的文件。如果您有其他Linux发行版,请在所需的Linux发行版下查找相关软件包http://nginx.org/packages/

2. 通过运行以下命令安装NGINX:

rpm -ivh nginx-1.14.2-1.el7_4.ngx.x86_64.rpm
3.安装NGINX后,您可以通过命令对其进行测试,该命令会打印nginx版本。nginx –v

现在,我们必须编辑NGINX的配置文件,以便制作所需的反向代理。
例如,客户端 HTTP 请求必须由 IP 为 10.1.244.35 的后端服务器提供服务,才能建立如下所示的设置。

1

确保相关端口已打开以进行相关节点之间的通信后,请编辑位于 的目录中存在的配置文件。/etc/nginx/nginx.conf

保持默认文件不变,并在nginx.conf目录中创建一个具有相关名称的新文件。'application.conf'

在配置文件中写入以下内容

---------------------------------------------------------
#Configuration file
#Disable all logs
#Load balancing with sticky session enabled minimum one session
Upstream anynameofyourchoice {
#ip_hash;
keepalive 100;
server 10.1.244.35;
}

server {
listen 80;
listen [::]:80
server_name yourpublicwebsite.com
location /
{
proxy_pass http://anynameofyourchoice;
proxy_send_timeout 60m;
send_timeout 15m;
proxy_read_timeout 60m;
proxy_connect_timeout 60m;
client_max_body_size 0;

#enable websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
}
In case your configuration is simple you can also try the basic setting wit this configuration file shown below (Only use one of the two configuration files provided here, not both).

Configuration File 2 (For simpler cases)

---------------------------------------------------------------
server {
listen 80;
listen [::]:80
server_name yourpublicwebsite.com
location /
{
proxy_pass http://10.1.244.35;
}
}
Note: In both the configuration files replace the relevant text with your own public domain and backend server IP.

Replace with your own public domain<yourpublicwebsite.com>
Replace with your own backend server IP<10.1.244.35>
The upstream saves the backend server IP where traffic has to be routed and an is given to it to make it easy to refer in the section. The port at which the server would receive the connection form public domain usually its an http traffic (it could be https as well) hence 80 is mentioned. Later you would have to mention your public domain name. The other settings ensure that the timeout limit is enough for the page to respond and in certain cases you would need websocket to be enabled.alias(anynameofyourchoice)'server'

4. You can use any one of the following commands to activate the nginx now:

sudo nginx
Sudo service nginx start
systemctl start nginx
It would read and initiate as per the configuration file.

At this stage the nginx should be up and running, and if the configuration file is right, it would start acting as reverse proxy.

To edit and re-start the service you would have to follow these steps:

A. Stop the nginx service (cmd: sudo kill nginx)

B. Edit the configuration file

C. Restart the services (cmd: sudo nginx)

Use Case
In this section, we would go through a real-world implementation of a NGINX reverse proxy scenario.

Scenario
A dashboard is built on a QlikSense application, which is in the non-exposed zone, as it is connected to the database which cannot be in the exposed zone. This Qliksense dashboard is accessed via a website interface. A user visits a website subscribes to relevant dashboard and then access relevant QlikSense dashboard. The dashboard and the web application have to be accessible on the public domain without exposing the backend servers.

2

设置的目的是让公共网站访问者通过我们的反向代理访问静态网页,一旦订阅了仪表板,就可以访问仪表板,该仪表板可以通过nginx根据permalink /global或/form或/hub等进行过滤。

除了配置文件之外,上面显示的步骤将保持不变。下面我们将共享用于实现此用例的配置文件。

配置文件
#Configuration file
#Disable all logs
#Load balancing with sticky session enabled minimum one session
Upstream qlikwebsocket {
#ip_hash;
keepalive 100;
server 10.14.14.24;
}

server {
listen 80;
listen [::]:80
server_name dashboard.com
location /global/
{
proxy_pass http://qlikwebsocket;
proxy_send_timeout 60m;
send_timeout 15m;
proxy_read_timeout 60m;
proxy_connect_timeout 60m;
client_max_body_size 0;

#enable websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
location /form/
{
proxy_set_header Host $http_host;
proxy_pass http:// 10.14.14.24:4244;
proxy_read_timeout 60m;


#enable websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
location /{
proxy_pass http:/ 10.13.13.23/;
}
}
上面的配置文件将nginx设置为反向代理,使网站访问者能够享受我们的后端应用程序,而没有意识到它们已经由反向代理提供服务,而在企业端,我们将通过不公开我们的后端服务器IP来保持安全。

请注意,要使此配置正常工作,上图所示的网络应列入白名单,以便两台后端服务器都可以访问阿里云中用作反向代理的 ECS 实例。如果它们都位于允许相关端口和 IP 的同一安全组中,则可以实现此目的。此外,您还必须确保在 Qlik 仪表板访问的情况下允许 websocket 协议,否则仪表板将无法加载。

上一篇
阿里云国际版ECS云服务器之间的数据迁移教程
下一篇
源服务器迁移到阿里云国际ECS云服务器详细教程
立即咨询 享受更轻松快捷的上云服务
联系我们
联系我们
Skype:87Cloud Alibaba
E-mail:the87cloud@outlook.com
最新活动
合作流程
解决方案
代理合作
关于我们
87Cloud Alibaba
the87cloud@outlook.com
电报交谈
Skype
企业邮箱
返回首页
回到顶部