介绍
Apache 是一个经过测试的 HTTP 服务器,它提供了一个非常广泛的强大扩展的访问权限,虽然在运行反向代理方面可能看起来不像是最佳选择,但已经依赖 Apache 的系统管理员可以将其用作其应用服务器的网关,在大多数情况下,这将导致从服务器设置中移除一个额外的层,或者需要使用另一个工具来重定向连接。
在这篇DigitalOcean文章中,我们将看到在Ubuntu 13上设置Apache,并将其用作反向代理,欢迎接入的连接,并将其重定向到运行在同一网络上的应用程序服务器(s)。
词典
1、apache
2. Apache 使用 mod_proxy 作为反向代理
3. 安装 Apache 和 mod_proxy
- 更新操作系统
- 获取必要的构建工具
- 获取模块和依赖
4. 将 Apache 配置为 proxy 连接
- 激活模块
- 修改默认配置
- 启用负载平衡
- 启用 SSL 支持
- 重新启动 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_virtualhost
和mod_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将向您的后端应用程序服务器进行反向代理连接。