使用 Apache 反向代理的设置技巧


Posted in Servers onJanuary 18, 2022

使用 Apache 反向代理的设置技巧

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。您应该example.com将该点的 DNS 记录添加到您的 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

上面的示例省略了 SSL。在生产工作负载中,您希望通过向 虚拟主机添加SSLCertificateFile和SSLCertificateKeyFile设置来进行设置。这些指定验证 SSL 连接时要使用的 SSL 证书和密钥。您还可以使用 Let’s Encrypt 的certbot 来自动设置。

以这种方式配置 SSL 意味着安全连接将在您的 Apache 主机上终止。Apache 和您的代理目标之间的连接将通过纯 HTTP 进行。

如果您需要代理连接固定也一样,你必须使用SSLProxy选项提供mod_ssl。SSLProxyEngine = On将作为最基本的配置工作,前提是 Apache 和您的代理目标服务器都可以访问相同的证书。此选项指示通过代理连接提供 SSL 信息。

代理选项

Apache 反向代理有几个可用于调整转发行为的可选指令。以下是一些常用的选项:

  • ProxyAddHeaders–默认情况下,Apache将X-Forwarded-Host、XForwarded-For和X-Forwarded-Serverheaders传递给您的后端服务器。这些让您的后端识别请求是通过 Apache 代理的。设置此标头以Off防止 Apache 添加这些标头。
  • ProxyErrorOverride– Apache 不会干扰后端服务器发送的响应,除非有指示。如果您的后端提供 400、404、500 或任何其他错误代码,用户将按原样接收该内容。设置ProxyErrorOverride改变了这一点,让阿帕奇替换错误页面的内容配置ErrorDocument来代替。在您希望通过集中在代理主机上的配置统一处理所有后端的错误的情况下,这可能是可取的。
  • ProxyPassReverseCookieDomain–此功能类似于强制(用于反向代理)ProxyPassReverse指令。它将重写Set-Cookie标头中的域以引用虚拟主机的名称,而不是它们源自的后端服务器的主机名。
  • ProxyPreserveHost– Apache通常将其自己的主机名作为Host标头的值发送到您的后端服务器。设置此指令意味着将发送原始 Host标头。当您的后端软件执行其自己的基于主机名的路由时,这可能是必要的。
  • ProxyTimeout– 使用此指令来调整 Apache 在后端服务器处理代理请求时等待的时间。如果超时,Apache将中止请求并向客户端返回错误代码。它默认为服务器级别的Timeout值。

您可以将这些指令设置为虚拟主机文件中的附加行。记住每次应用更改时都要重新启动 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 文档中找到。

到此这篇关于如何使用 Apache 设置反向代理的文章就介绍到这了,更多相关Apache 反向代理内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
Mar 09 Servers
Nginx 502 Bad Gateway错误原因及解决方案
Mar 31 Servers
Nginx进程管理和重载原理详解
Apr 22 Servers
配置nginx 重定向到系统维护页面
Jun 08 Servers
解析在浏览器地址栏输入一个URL后发生了什么
Jun 21 Servers
nginx中proxy_pass各种用法详解
Nov 07 Servers
Apache Linkis 中间件架构及快速安装步骤
Mar 16 Servers
为Centos安装指定版本的Docker
Apr 01 Servers
centos7安装mysql5.7经验记录
May 02 Servers
如何Tomcat中使用ipv6地址
May 06 Servers
Linux中文件的基本属性介绍
Jun 01 Servers
Linux中一对多配置日志服务器的详细步骤
Jul 23 Servers
NGINX 权限控制文件预览和下载的实现原理
Nginx虚拟主机的搭建的实现步骤
Jan 18 #Servers
Nginx下SSL证书安装部署步骤介绍
Dec 06 #Servers
教你快速构建一个基于nginx的web集群项目
Nov 27 #Servers
Linux安装apache服务器的配置过程
Nov 27 #Servers
Nginx配置https的实现
nginx内存池源码解析
You might like
PHP实现单例模式最安全的做法
2014/06/13 PHP
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
2014/03/19 Javascript
jquery css 设置table的奇偶行背景色示例
2014/06/03 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
Bootstrap-table自定义可编辑每页显示记录数
2018/09/07 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
webpack 如何解析代码模块路径的实现
2019/09/04 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
CSS3 transform的skew属性值图文详解
2014/07/21 HTML / CSS
澳大利亚顶级美发和美容贸易超市:glamaCo
2020/01/19 全球购物
西部世纪.net笔试题面试题
2014/04/03 面试题
在职证明书范本(2014新版)
2014/09/25 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
亲情作文之母爱
2019/09/25 职场文书
个人销售励志奋斗口号
2019/12/05 职场文书