如何使用 mod_proxy 扩展将 Apache HTTP 服务器用作反向代理

介绍


Apache 是一个经过测试的 HTTP 服务器,它提供了一个非常广泛的强大扩展的访问权限,虽然在运行反向代理方面可能看起来不像是最佳选择,但已经依赖 Apache 的系统管理员可以将其用作其应用服务器的网关,在大多数情况下,这将导致从服务器设置中移除一个额外的层,或者需要使用另一个工具来重定向连接。

在这篇DigitalOcean文章中,我们将看到在Ubuntu 13上设置Apache,并将其用作反向代理,欢迎接入的连接,并将其重定向到运行在同一网络上的应用程序服务器(s)。

词典


1、apache


2. Apache 使用 mod_proxy 作为反向代理


3. 安装 Apache 和 mod_proxy


  1. 更新操作系统
  2. 获取必要的构建工具
  3. 获取模块和依赖

4. 将 Apache 配置为 proxy 连接


  1. 激活模块
  2. 修改默认配置
  3. 启用负载平衡
  4. 启用 SSL 支持
  5. 重新启动 Apache

阿帕奇


Apache HTTP 服务器不需要介绍,因为它可能是最著名的和最受欢迎的网络服务器存在. 在许多不同的平台和设置上很容易运行 Apache. 该应用程序配备了许多第三方模块来处理不同类型的任务(mod_rewrite 用于基于规则的 URL 重写),其中之一,尽管目前相对被忽视,是 mod_proxy: 该 Apache 模块用于在后端运行服务器的代理(或网关)。

根据一些文章,Apache的名称来自服务器的模糊性质 - 即它是一个应用程序补丁(或 modules)的集合。

** 注意:** 要了解更多关于 Apache 的信息,您可以查看有关该主题的维基百科文章 - Apache HTTP Server

Apache 使用 mod_proxy 作为反向代理


mod_proxy 是用于重定向连接的 Apache 模块(即网关,通过它们)。它可以像任何其他模块一样使用,配置相当基本(或标准),按照其他模块。

其中一些模块是:

  • mod_proxy: Apache 的主要代理模块管理连接并重定向它们
  • mod_proxy_http: 此模块实现了 HTTP 和 HTTPS 协议的代理功能
  • mod_proxy_ftp: 此模块做同样的事情,但对于 FTP 协议
  • mod_proxy_connect: 此模块用于 SSL 隧道
  • mod_proxy_ajp: 用于与 AJP 协议
  • mod_proxy_wstunnel: 用于与 Web-sockets (即 WS 和 WSS) 工作。 **

** 注意:** 若要了解有关 Apache 和 mod_proxy 的更多信息,您可以查看有关该主题的官方 Apache 文档 这里

安装 Apache 和 mod_proxy


** 注意: ** 这里提供的指示是简短的,因为很可能你已经安装了Apache或知道如何使用它. 然而,按照下面的步骤,你可以在几分钟内获得一个新的Ubuntu VPS运行Apache。

更新操作系统


我们将首先升级默认可用的组件,以确保我们拥有最新的所有内容。

更新软件源列表并升级已过时的应用程序:

1aptitude update
2aptitude -y upgrade

获取必要的构建工具


让我们继续获得应用程序构建的必备包 - build-essential. 此包包含安装某些东西 from source 所需的工具。

运行以下命令来安装「build-essential」包:

1aptitude install -y build-essential

获取模块和依赖


接下来,我们将获得模块和依赖。

运行以下命令来安装它们:

1aptitude install -y libapache2-mod-proxy-html libxml2-dev

将 Apache 配置为代理连接


激活模块


在配置Apache之前,我们将启用我们将在本教程中使用的必要模块,或者在未来可能有用。

首先,让我们检查所有模块是否正确安装并准备好激活。

运行以下命令以获取可用的 Apache 模块列表:

1a2enmod
2
3# You will be presented with an output similar to:
4
5# Your choices are: access_compat actions alias allowmethods asis auth_basic auth_digest auth_form authn_anon authn_core authn_dbd authn_dbm authn_file authn_socache authnz_ldap authz_core authz_dbd authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex buffer cache cache_disk cache_socache cgi cgid charset_lite data dav dav_fs dav_lock dbd deflate dialup dir dump_io echo env expires ext_filter file_cache filter headers heartbeat heartmonitor include info lbmethod_bybusyness lbmethod_byrequests lbmethod_bytraffic lbmethod_heartbeat ldap log_debug log_forensic lua macro mime mime_magic mpm_event mpm_itk mpm_prefork mpm_worker negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_express proxy_fcgi proxy_fdpass proxy_ftp proxy_html proxy_http proxy_scgi proxy_wstunnel ratelimit reflector remoteip reqtimeout request rewrite sed session session_cookie session_crypto session_dbd setenvif slotmem_plain slotmem_shm socache_dbm socache_memcache socache_shmcb speling ssl status substitute suexec unique_id userdir usertrack vhost_alias xml2enc
6# Which module(s) do you want to enable (wildcards ok)?

一旦你被提示选择你想要的模块,你可以通过下面的行列出模块名称:

模块列表:

1proxy proxy_ajp proxy_http rewrite deflate headers proxy_balancer proxy_connect proxy_html

或者,您可以运行以下命令,一个接一个启用模块:

1a2enmod proxy
2a2enmod proxy_http
3a2enmod proxy_ajp
4a2enmod rewrite
5a2enmod deflate
6a2enmod headers
7a2enmod proxy_balancer
8a2enmod proxy_connect
9a2enmod proxy_html

** 注意: ** 某些模块可能会默认启用. 尝试两次启用它们只会确保它们是活跃的。

更改默认配置


在此步骤中,我们将看到如何在/etc/apache2/sites-enabled内部修改默认配置文件000-default.conf,以设置代理功能。

运行以下命令以使用纳米文本编辑器编辑默认的 Apache 虚拟主机:

1nano /etc/apache2/sites-enabled/000-default.conf

在这里,我们将使用mod_virtualhostmod_proxy一起定义一个代理虚拟主机。

复制并粘贴下面的配置块,修改它以满足您的需求:

 1<VirtualHost *:*>
 2        ProxyPreserveHost On
 3
 4        # Servers to proxy the connection, or;
 5        # List of application servers:
 6        # Usage:
 7        # ProxyPass / http://[IP Addr.]:[port]/
 8        # ProxyPassReverse / http://[IP Addr.]:[port]/
 9        # Example: 
10        ProxyPass / http://0.0.0.0:8080/
11        ProxyPassReverse / http://0.0.0.0:8080/
12
13        ServerName localhost
14    </VirtualHost>

按 CTRL + X 并用 Y 确认保存和退出。

** 注意:** 若要了解有关虚拟主机配置的更多信息,您可以通过点击此处(http://httpd.apache.org/docs/2.2/vhosts/examples.html)查看有关该主题的详细Apache手册。

可实现负荷平衡


如果您有多个后端服务器,在代理它们时分发连接的一个好方法是使用Apache的负载平衡功能。

像上一步一样开始编辑虚拟主机设置,但这次使用下面的配置示例:

 1<Proxy balancer://mycluster>
 2        # Define back-end servers:
 3
 4        # Server 1
 5        BalancerMember http://0.0.0.0:8080/
 6
 7        # Server 2
 8        BalancerMember http://0.0.0.0:8081/
 9    </Proxy>
10
11    <VirtualHost *:*>
12        # Apply VH settings as desired
13        # However, configure ProxyPass argument to
14        # use "mycluster" to balance the load
15
16        ProxyPass / balancer://mycluster
17    </VirtualHost>

启用SSL反向代理支持


如果您正在处理SSL连接和证书,您还需要启用次要的虚拟主机,以下面的设置。

重复上面的步骤,但使用这些配置选项:

 1Listen 443
 2
 3    NameVirtualHost *:443
 4    <VirtualHost *:443>
 5
 6        SSLEngine On
 7
 8        # Set the path to SSL certificate
 9        # Usage: SSLCertificateFile /path/to/cert.pem
10        SSLCertificateFile /etc/apache2/ssl/file.pem
11
12        # Servers to proxy the connection, or;
13        # List of application servers:
14        # Usage:
15        # ProxyPass / http://[IP Addr.]:[port]/
16        # ProxyPassReverse / http://[IP Addr.]:[port]/
17        # Example: 
18        ProxyPass / http://0.0.0.0:8080/
19        ProxyPassReverse / http://0.0.0.0:8080/
20
21        # Or, balance the load:
22        # ProxyPass / balancer://balancer_cluster_name
23
24    </VirtualHost>

重新启动Apache


一旦您对配置满意,您将需要重新启动云服务器,以便更改生效。

执行以下命令来重新启动 Apache:

1service apache2 restart

而这就是它!

您现在可以访问您的VPS,Apache将向您的后端应用程序服务器进行反向代理连接。

Published At
Categories with 技术
comments powered by Disqus