什么是反向代理?反向代理服务器是位于后端服务器前面的中间连接点,它将客户端请求路由到这些服务器,并确保没有客户端直接与后端通信。这与转发代理不同,在转发代理中,代理位于客户端前面,并充当客户端和源服务器之间的中介。反向代理就像一个实际的端点,为您的系统提供额外的安全和控制层。
反向代理是基本的系统管理概念之一,可以帮助您提高系统的可伸缩性、性能、弹性和安全性。让我们来看看一些最流行的反向代理用例。
在本指南中,我们将使用ApacheWeb服务器来创建反向代理的工作概念。Apache带有一些方便的扩展模块,支持反向代理解决方案。
连接到您的服务器并从APT存储库更新本地包索引:
现在让我们apache2从官方Ubuntu20.04存储库安装软件包:
安装完成后,您可以通过检查其版本来验证Apache是否已安装:
也可以apache2使用以下命令检查状态:
sudosystemctlstatusapache2
如您所见,apache2在您安装后立即处于活动状态并正在运行。您可以通过请求默认的Apache索引页面来执行抽查以验证它是否按预期工作。只需在网络浏览器中输入服务器的IP地址,然后按回车键:
如果您不知道自己的IP地址,请使用以下命令获取它:
此命令将显示计算机上可用的所有网络接口上的所有已配置IP地址,包括公共网络接口的IP地址。
要将反向代理与ApacheWebServer一起使用,您需要启用特定的Apache模块以支持反向代理服务器所需的附加功能。我们的场景需要以下模块:
现在让我们使用a2enmod命令启用这些模块:
sudoa2emodproxy&&sudoa2enmodproxy_http&&a2enmodssl
每次启用新的Apache模块时,不要忘记重新启动apache2服务器:
sudosystemctlrestartapache2
您可以使用以下命令验证这些模块是否处于活动状态:
现在是时候配置Apache反向代理以接受来自Internet的请求并将它们转发到您选择的资源。您可以将反向代理请求转发到任何您想要的地方,包括其他服务器,但我们将使用本地网络用于教育目的。
000-default.conf让我们使用以下命令禁用默认的Apache虚拟主机配置文件:
sudoa2dissite000-default.conf
现在使用以下配置文本cherry.conf在目录中创建一个新的虚拟主机配置文件:/etc/apache2/sites-available
ServerAliaswww.site1.com
ServerAdminpostmaster@site1.com
ErrorLog${APACHE_LOG_DIR}/error.log
CustomLog${APACHE_LOG_DIR}/access.logcombined
ProxyPass/http://127.0.0.1:8080/
ProxyPassReverse/http://127.0.0.1:8080/
<VirtualHost>我们使用包含IP地址和Apache为该虚拟主机接受的端口号的命令开始我们的配置文件。在这种情况下使用元字符*,因为所有IP地址都被接受,而端口号80代表默认的HTTP端口。配置继续以下项目:

配置完成后,不要忘记重新启动apache2以激活更改:
sudosystemctlrestartapache2
您的反向代理配置现已完成,但我们仍然缺少一个将在端口8080上侦听的Web应用程序,因为我们的ProxyPass指令将传入请求转发到此目的地。
为此,我们可以使用一个简单的Flask应用程序。让我们先安装python3和pip包管理器:
sudoaptinstallpython3python3-pip
安装完成后,继续通过pip安装Flask:
现在我们准备创建一个简单的FlaskWeb应用程序。让我们称之为app.py:
在下面的Python代码中,我们导入Flask库,实例化Flask应用程序并在“/”路由上调用index()函数:
return“Apachereverseproxyisworking!”
将Python脚本保存在您的工作目录中,并将FLASK_APP环境变量设置为app.py,以便Flask知道在哪里实例化您的Web应用程序:
现在您已准备好运行您的Flask应用程序。让我们通过将标准输出和标准错误输出重定向到文件来作为后台作业在端口8080上运行它/dev/null以保持我们的终端清洁:
flaskrun--port=8080>/dev/null2>&1&
现在打开浏览器并尝试通过标准HTTP80端口连接到您的IP地址:
您刚刚向IP地址上的端口80发送了一个HTTPGET请求,并且您的请求已被Apache反向代理转发到端口8080,您的Flask应用程序在此处发回响应。恭喜,您的Apache反向代理配置正在运行!
通常,您希望对您的应用程序流量进行SSL加密。您可以使用免费的Let'sEncryptTLS证书使用Apache反向代理配置SSL/TLS加密。
安装允许您自动颁发和安装证书的CertbotACME客户端:
接下来,为Certbot安装Apache插件以简化安装过程:
sudoaptinstallpython3-certbot-apache
Let'sEncrypt不会为没有域名的服务器颁发TLS证书。要继续配置证书,您需要从任何域名提供商处购买域名并将其指向您服务器的IP地址。或者,您可以使用自定义DNS名称,该名称可以在CherryServers为每台服务器设置。
为此,请转到您的客户端,访问服务器的网络选项,然后按管理IP上的“编辑地址”按钮:
您现在可以输入自定义DNS名称并按更新:
这样做之后,子域名reverse-proxy.cloud.cherryservers.net将可用于您的服务器。您现在可以使用此子域名而不是IP地址来查询它:
您还应该将此子域名添加到您的cherry.conf配置文件中:
ServerAliaswww.cherry.comreverse-proxy.cloud.cherryservers.net
现在您可以使用以下命令开始TLS证书配置:
您将被要求输入您将接收续订和安全通知的电子邮件地址:
接下来,您需要阅读并同意Let'sEncrypt服务条款:
决定您是否愿意接收来自Let'sEncrypt的新闻和产品更新:
Certbot将自动从您的Apache虚拟主机配置文件中读取ServerName和ServerAlias变量。选择要用于HTTPS查询的正确域名并继续安装:
Certbot现在将为SSL连接创建一个新的Apache虚拟主机并为您生成证书。
系统会询问您是否要自动将所有HTTP流量重定向到HTTPS。为了简单起见,选择Noredirect:
就是这样——您现在拥有一个功能齐全的Apache反向代理,带有SSL加密!您现在可以通过安全的HTTPS连接访问您的Web代理服务器:
专业提示:您可以通过在一行中使用Certbot和一些强制参数来进一步简化TLS证书安装:
sudocertbot--apache--non-interactive--agree-tos-mmantas.levinas@cherryservers.com-dreverse-proxy.cloud.cherryservers.net
如果您想更深入地了解Certbot做了什么,请随时查看新创建的Apache虚拟主机:
<IfModulemod_ssl.c>
<VirtualHost*:443>
ServerAliaswww.cherry.comreverse-proxy.cloud.cherryservers.net
ServerAdminmantas.levinas@cherryserers.com
ErrorLog${APACHE_LOG_DIR}/erro.log
CustomLog${APACHE_LOG_DIR}/access.logcombined
ProxyPass/http://127.0.0.1:8080/
ProxyPassReverse/http://127.0.0.1:8080/
SSLCertificateFile/etc/letsencrypt/live/reverse-proxy.cloud.cherryservers.net/fullchain.pem
SSLCertificateKeyFile/etc/letsencrypt/live/reverse-proxy.cloud.cherryservers.net/privkey.pem
Include/etc/letsencrypt/options-ssl-apache.conf
您可以看到Apache检查您是否有可用的mod_ssl,如果有,它会使用给定的虚拟主机配置来接受通常为HTTPS流量保留的端口443上的所有IP地址。
虚拟主机几乎是我们原始配置的副本,cherry.conf但多了三行。它包括对SSL证书文件的引用并导入SSL配置文件以使用一些必需的SSL设置来补充您的虚拟主机配置。
在本文中,我们了解了什么是反向代理及其使用方法。我们还建立了Apache反向代理的工作概念,使用SSL加密来提供额外的安全层。您可以使用ApacheWebServer构建更多的反向代理用例,所以请不要犹豫,在Apache官方文档页面上了解更多关于这个基本系统工程概念的信息。
本文来源:国外服务器--apache反向代理https
本文地址:https://www.idcbaba.com/guowai/2332.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。