apache反向代理https

apache反向代理https

浏览次数:
信息来源: 用户投稿
更新日期: 2025-09-29
文章简介

什么是反向代理?反向代理服务器是位于后端服务器前面的中间连接点,它将客户端请求路由到这些服务器,并确保没有客户端直接与后端通信。这与转发代理不同,在转发代理中,代理位于客户端前面,并充当客户端和源服务

2025阿里云双十一服务器活动

什么是反向代理?反向代理服务器是位于后端服务器前面的中间连接点,它将客户端请求路由到这些服务器,并确保没有客户端直接与后端通信。这与转发代理不同,在转发代理中,代理位于客户端前面,并充当客户端和源服务器之间的中介。反向代理就像一个实际的端点,为您的系统提供额外的安全和控制层。

反向代理是基本的系统管理概念之一,可以帮助您提高系统的可伸缩性、性能、弹性和安全性。让我们来看看一些最流行的反向代理用例。

  • 负载平衡。反向代理可以充当负载平衡器,在不同服务器池之间分配传入请求。它可能使用循环法、最少连接数、最少响应时间或其他一些算法来路由传入请求并使您的整个系统更快、更有弹性。如果服务器出现故障,您的反向代理负载平衡器会将流量重定向到其余的在线服务器。
  • 匿名。反向代理在将所有请求传输到后端服务器之前拦截所有请求。这样你的后端服务器永远不需要透露他们的IP地址,只能通过反向代理访问,这使得直接攻击它们变得更加困难。
  • 交通清洗。反向代理服务器可能安装了一些流量控制机制来过滤恶意或不需要的请求并防止它们到达您的后端服务。您可以使用防火墙、防病毒系统或任何其他应用程序内容检查机制来加强系统安全性。
  • 缓存。反向代理服务器可以存储经常访问的静态或动态Web内容,以更快地提供服务并减轻后端服务器的负载。
  • SSL加密。加密和解密TLS流量的计算量很大。反向代理可以负责SSL加密,以减轻后端服务器的工作负担。
  • 内容压缩。使用反向代理,您可以压缩入站和出站数据,使客户端和后端服务器之间的通信更快。
  • A/B测试。A/B测试可以在浏览器、Web应用程序或后端层上执行。使用反向代理,您可以实施后端层A/B测试并将传入流量随机分配到运行不同版本应用程序的服务器。
  • 使用sudo权限访问Linux服务器。我们将使用Ubuntu20.04,但您可以选择不同的发行版。
  • 指向您的服务器IP地址的域名,用于配置SSL证书。您可以使用每台服务器免费提供的自定义CherryServers子域名。
  • 在本指南中,我们将使用ApacheWeb服务器来创建反向代理的工作概念。Apache带有一些方便的扩展模块,支持反向代理解决方案。

    连接到您的服务器并从APT存储库更新本地包索引:

    现在让我们apache2从官方Ubuntu20.04存储库安装软件包:

    安装完成后,您可以通过检查其版本来验证Apache是否已安装:

    也可以apache2使用以下命令检查状态:

    sudosystemctlstatusapache2

    如您所见,apache2在您安装后立即处于活动状态并正在运行。您可以通过请求默认的Apache索引页面来执行抽查以验证它是否按预期工作。只需在网络浏览器中输入服务器的IP地址,然后按回车键:

    如果您不知道自己的IP地址,请使用以下命令获取它:

    此命令将显示计算机上可用的所有网络接口上的所有已配置IP地址,包括公共网络接口的IP地址。

    要将反向代理与ApacheWebServer一起使用,您需要启用特定的Apache模块以支持反向代理服务器所需的附加功能。我们的场景需要以下模块:

  • mod_proxy:它是Apache的主要代理模块,用于管理连接和重定向它们。它允许Apache充当底层后端服务器的网关。该模块对于所有反向代理场景都是必需的。
  • mod_proxy_http:此模块依赖于mod_proxy并且需要支持对代理服务器的HTTP和HTTPS请求。
  • mod_ssl:该模块为ApacheHTTP服务器提供SSLv3和TLSv1.x协议支持。
  • 现在让我们使用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端口。配置继续以下项目:

  • ServerName:定义与服务器关联的域名。/etc/hosts如果您想通过关联的域名访问您的服务器,您可以通过DNS在Internet上配置它或通过文件在本地设置它。
  • ServerAlias:允许您定义将被服务器接受的其他名称。
  • ServerAdmin:服务器在返回给客户端的错误消息中包含的联系人电子邮件地址。
  • ErrorLog:设置Apache用来存储它遇到的任何错误的文件的名称。
  • CustomLog:设置Apache用于将客户端请求记录到服务器的文件的名称。
  • ProxyPass:将远程服务器映射到本地服务器的空间。定义流量重定向的目标地址。
  • ProxyPassReverse:代理服务器不仅可以接收请求,还可以将响应数据包转发回客户端。命令用代理服务器的信息重写后端服务器的ProxyPassReverse原始location和HTTP响应标头。这对于避免绕过反向代理并将后端服务器与Internet隔离至关重要。content-locationuri
  • ProxyRequests:防止ApacheHTTP服务器被用作转发代理并使其更安全。ProxyRequests使用时通常应将该命令设置为关闭ProxyPass。
  • apache反向代理https

    配置完成后,不要忘记重新启动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官方文档页面上了解更多关于这个基本系统工程概念的信息。

    标签:
    什么是CLICKUP(什么是clickhouse)
    « 上一篇
    返回列表
    下一篇 »

    如本文对您有帮助,就请抽根烟吧!