使用 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 反向代理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Apache设置反向代理的方法

    反向代理有很多实现方式,本文主要讲述Apache的反向代理. 1.简述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器. 下图就是一个简单的反向代理过程 2.配置 1).首先确保Apache有这些模块,在Apache根目录下确认有这些模块,主要包含以下模块: mod_proxy.so mod_proxy_

  • 用Apache反向代理设置对外的WWW和文件服务器

    简介:一台机器用专线接入Internet作为防火墙,在内部网段上有一台WWW服务器 (Redhat 6.1,Apache 1.3.9)希望这台机器能对外提供WWW服务器和基于apache 的文件服务.供外部世界公共访问WWW服务器,或者外地分公司下载需要的文件. 优点: 内部的WWW服务器和文件服务完全与外部世界隔开,不直接连接到外部,通过 防火墙上运行的Apache服务提供对内部的代理访问,增强了安全性,同时在 防火墙上运行的Apache服务运用基于名字的虚拟主机技术,使得防火墙上的 主页不会

  • ubuntu系统下apache配置虚拟主机及反向代理详解

    前言 自己有两个域名blogsir.com.cn 和 s7star.cn ,都绑定在了我的腾讯云主机上,还有七星网络安全攻防平台的搭建,这里记录下我搭建虚拟主机和反向代理的过程,下面来一起看看详细的介绍: 配置虚拟主机 $ sudo vi /etc/apache2/sites-available/000-default.conf #DocumentRoot /var/www/html ##注释掉该行 $ cat /etc/apache2/sites-available/000-default.c

  • Apache虚拟目录配置及vue-cli反向代理的设置方法

    配置需求来自于前后端分离.后台由于使用PHP或者Java,但是前端使用vue,React这些框架时怎么和后端有效的数据通信.反向代理是个很好的选择,虽然jsonp也可以,单并不好玩. Apache配置虚拟目录 -实际上线项目需要通过域名来访问,比如http://www.xxx.com,但在本机上如何配置虚拟域名来访问本机的项目呢? 1.找到C:\Windows\System32\drivers\etc\hosts这个文件添加以下格式内容 127.0.0.1 www.mytest.com //你的

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

    Apache 是一个多功能的 Web 服务器,它提供了完整的支持功能,其中一些是通过扩展来实现的.在本文中,我们将使用该mod_proxy模块将 Apache 配置为反向代理角色. 虽然 Apache 可能不是您作为反向代理的首选,但 NGINX 等更现代的替代方案往往会引起注意,mod_proxy但对于已经在运行 Apache 并且现在需要将流量路由到另一个服务的服务器很有用.您可以设置 Apache 虚拟主机将给定域的请求传递到单独的 Web 服务器. 出于本指南的目的,我们将 Apache

  • Linux下的Apache与PHP安全设置技巧

    (1) safe_mode: 以安全模式运行php; 在php.ini文件中使用如下 safe_mode = On (使用安全模式) safe_mode = Off (关闭安全模式) 在apache的httpd.conf中VirtualHost的相应设置方法 php_admin_flag safe_mode On (使用安全模式) php_admin_flag safe_mode Off (关闭安全模式) 或者: php_admin_value safe_mode 1 (使用安全模式) php_

  • Nginx服务器作反向代理时的缓存配置要点解析

    这里给出示例,并详解. http { [...] [...] proxy_cache_path /data/nginx/cache/one levels=1:2 keys_zone=one:10m max_size=10g; proxy_cache_key "$host$request_uri"; server { server_name www.jb51.net jb51.net; root /home/www.jb51.net/web; index index.php index.

  • Docker部署Nginx并配置反向代理

    准备工作 在docker内部署任何应用,都需要先下载对应的镜像:下载镜像之前,需要先搜索镜像来确认该镜像是否存在: docker search nginx 从列表可以看到,docker已经有了nginx的镜像,名称是“nginx”,接下来下载镜像: docker pull nginx 下载完成后,查看一下本地镜像: 如果在列表中看到nginx,镜像下载就已经成功了. 容器设置 在docker中,真正运行的是容器,镜像在我理解中是一种环境.我们在指定的镜像中运行某个容器,然后编辑和配置这个容器,从

  • Nginx作为反向代理时传递客户端IP的设置方法

    nginx默认配置文件里面是没有进行日志转发配置的,这个需要我们自己手动来操作了,当然后端的real server不同时操作方法是不一样的,这里我们分别例举几种情况来说明一下. nginx做前端,转发日志到后端nginx服务器: 因为架构的需要采用多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的 Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值. 同样适用于前端是 Squid 或者其他反向代理的情况.

  • IIS实现反向代理时Cookie域的设置方法

    反向代理 神马是反向代理?指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器.我们可以通过反向代理实现负载平衡.突破防火墙限制等一些非常实用的Web服务器功能,目前反向代理不管在私有云还是公有云的虚拟机上用的很多很多. 引用 IIS通过URL重写可以实现反向代理,通过简单的配置即可以将请求转发到其它内部站点. 此时被代理的所有站点的cookie的域(domai

随机推荐