Apache 是一个多功能的 Web 服务器,它提供了完整的支持功能,其中一些是通过扩展来实现的。在本文中,我们将使用该mod_proxy模块将 Apache 配置为反向代理角色。
虽然 Apache 可能不是您作为反向代理的首选,但 NGINX 等更现代的替代方案往往会引起注意,mod_proxy但对于已经在运行 Apache 并且现在需要将流量路由到另一个服务的服务器很有用。您可以设置 Apache 虚拟主机将给定域的请求传递到单独的 Web 服务器。
出于本指南的目的,我们将 Apache 2.4 与基于 Debian 的系统一起使用。我们还将假设您想要代理流量的服务器已经可以从您的 Apache 主机通过网络访问。本文重点介绍基于唯一虚拟主机启用代理,但mod_proxy也可全局配置,作为 Apache 服务器配置的一部分,或通过.htaccess文件在目录级别进行配置。
mod_proxy包含在默认的 Apache 安装中。现在用于a2enmod激活模块及其独立的 HTTP 组件:
sudo a2enmod proxy
sudo a2enmod proxy_http
这将 Apache 设置为支持代理到其他主机的 HTTP 连接。该模块使用ProxyApache 配置文件中的 -prefixed 指令进行配置。我们接下来会设置这些。
让我们设置一个转发example.com到内部 IP 地址的虚拟主机192.168.0.1。您应该将该点的 DNS 记录添加example.com到您的 Apache 主机。
在这种情况下,代理允许访问者通过外部地址透明地访问您的内部 Web 服务器。Apache 充当将流量路由到其最终目的地的看门人。用户将看到example.com,即使 Apache 实际上是通过单独的服务器解析请求。
在里面添加一个新的虚拟主机文件/etc/apache2/sites-available,内容如下:
<VirtualHost *:80>
ServerName example.com
ProxyPass / http://192.168.0.1/ nocanon
ProxyPassReverse / http://192.168.0.1/
</VirtualHost>
ProxyPass和ProxyPassReverse指令指定example.com应该代理到的流量192.168.0.1。可选nocanon关键字指示 Apache 将原始 URL 传递给远程服务器。如果没有这个关键字,Apache 会自动规范化 URL,这可能与某些服务器和框架不兼容。使用nocanon保证兼容性但会影响您的安全状况,因为它会禁用 Apache 针对基于 URL 的代理攻击的内置保护。
ProxyPassReverse必须提供以将您的配置区分为反向代理设置。Apache 将使用提供的 URL 重写后端发出的 、 和响应标Location头Content-Location。URI这确保了后续请求继续命中反向代理,而不是尝试直接到达内部服务器。
此配置将代理所有请求。您可以将代理限制到特定路径,例如/media通过调整ProxyPass和ProxyPassReverse指令:
ProxyPass /media http://192.168.0.1/
ProxyPassReverse /media http://192.168.0.1/
添加多个ProxyPass规则可让您使用一个虚拟主机在多个目标之间路由请求。规则按照它们编写的顺序进行匹配。如果您需要更复杂的路由行为,请改用该ProxyPassMatch指令。这等效于ProxyPass但将传入的 URL 与正则表达式匹配:
ProxyPassMatch ^/client/(.*)/images$ http://192.168.0.1/
保存您的虚拟主机文件并使用a2ensite命令启用它。这采用相对于sites-available目录的文件的基本名称:
sudo a2ensite example-proxy-vhost
重新启动 Apache 以应用您的更改:
sudo service apache2 restart
您的简单代理现在应该可以运行了。尝试访问example.com- 您应该会看到192.168.0.1. 该请求在您的 Apache 主机处终止,然后将其代理到您的内部服务器。
上面的示例省略了 SSL。在生产工作负载中,您希望通过向虚拟主机添加 SSLCertificateFile和设置来进行设置。SSLCertificateKeyFile这些指定验证 SSL 连接时要使用的 SSL 证书和密钥。您还可以使用 Let’s Encrypt 的certbot 来自动设置。
以这种方式配置 SSL 意味着安全连接将在您的 Apache 主机上终止。Apache 和您的代理目标之间的连接将通过纯 HTTP 进行。
如果您还需要保护代理连接,则SSLProxy必须使用mod_ssl. SSLProxyEngine = On将作为最基本的配置工作,前提是 Apache 和您的代理目标服务器都可以访问相同的证书。此选项指示通过代理连接提供 SSL 信息。
Apache 反向代理有几个可用于调整转发行为的可选指令。以下是一些常用的选项:
您可以将这些指令设置为虚拟主机文件中的附加行。记住每次应用更改时都要重新启动 Apache 服务。
Apache 的反向代理实现还支持多个不同后端之间的负载平衡。这允许请求访问example.com平衡池中的任何服务器。
<Proxy balancer://example-balancer>
BalancerMember http://192.168.0.1
BalancerMember http://192.168.0.2
ProxySet lbmethod=bytraffic
</Proxy>
ProxyPass / balancer://example-balancer
ProxyPassReverse / balancer://example-balancer
此示例将请求路由到example-balancer池中的两台服务器之一。负载均衡算法由设置定义lbmethod;此处使用的bytraffic值试图确保每个服务器处理相同数量的流量。
另一种方法 byrequests balancing method是更简单的 bytraffic 版本,它为每个后端提供相等的传入请求份额。跟踪每个后端服务的 bybusyness balancer请求数量,然后将新请求分配给最不“忙”的后端。
该mod_proxy模块可以将 Apache 变成一个反向代理主机,允许您使用基于名称的路由来访问多个独立的服务。您也可以添加负载平衡,通过在您的服务器队列中分配请求来确保稳定性和正常运行时间。
其他代理口味也可用。您可以代理 FTP、WebSocket 和 HTTP2 连接等,方法是在mod_proxy. 完整的模块列表可在 Apache 文档中找到。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/wlcs_6305/article/details/123295135
内容来源于网络,如有侵权,请联系作者删除!