如何使用ApacheHTTP服务器作为反向代理使用mod proxy扩展

来自菜鸟教程
跳转至:导航、​搜索

介绍


Apache 是一个久经考验的 HTTP 服务器,它可以访问非常广泛的强大扩展。 尽管就运行反向代理而言,它似乎不是首选,但已经依赖 Apache 获得丰富功能集的系统管理员也可以将其用作其应用程序服务器的网关。 在大多数情况下,这将转化为从他们的服务器设置中删除一个额外的层,或者需要使用另一个工具来重定向连接。

在这篇 DigitalOcean 文章中,我们将看到在 Ubuntu 13 上设置 Apache 并将其用作反向代理来欢迎传入连接并将它们重定向到在同一网络上运行的应用程序服务器。 为此,我们将使用 mod_proxy 扩展和其他几个相关的 Apache 模块。

词汇表


1. 阿帕奇


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


3. 安装 Apache 和 mod_proxy


  1. 更新操作系统
  2. 获取基本构建工具
  3. 获取模块和依赖项

4. 配置 Apache 到代理连接


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

阿帕奇


Apache HTTP 服务器不需要介绍,因为它可能是现存最有名和最流行的网络服务器。 可以在许多不同的平台和设置上非常轻松地运行 Apache。 该应用程序带有许多第三方模块来处理不同类型的任务(mod_rewrite 用于基于规则的 URL 重写),其中之一是 mod_proxy:用于实现在后端运行的服务器的代理(或网关)。

提示: 根据一些文章,Apache的名字来源于服务器的“补丁”性质——即 它是应用程序补丁(或 模块 )的集合。

注意: 要了解有关 Apache 的更多信息,您可以查看有关该主题的 Wikipedia 条目 - Apache HTTP Server

Apache 使用 mod_proxy 作为反向代理


mod_proxy 是用于重定向连接的 Apache 模块(即 一个网关,让它们通过)。 它可以像任何其他模块一样使用,并且配置非常基本(或标准),与其他模块一致。 mod_proxy 不仅仅是一个模块,而是它们的集合,每个模块都带来一组新的功能。

其中一些模块是:

  • mod_proxy: Apache 的主要代理模块,用于管理连接并重定向它们。
  • mod_proxy_http: 该模块实现了 HTTP 和 HTTPS 协议的代理功能。
  • mod_proxy_ftp: 这个模块做同样的事情,只是针对 FTP 协议。
  • mod_proxy_connect: 这个用于 SSL 隧道。
  • mod_proxy_ajp: 用于使用 AJP 协议。
  • mod_proxy_wstunnel: 用于使用网络套接字(即 WS 和 WSS)。
  • mod_proxy_balancer: 用于集群和负载均衡。
  • mod_cache: 用于缓存。
  • mod_headers: 用于管理 HTTP 标头。
  • mod_deflate: 用于压缩。

注意: 要了解更多关于 Apache 和 mod_proxy 的信息,您可以在此处 查看有关主题 的官方 Apache 文档。

安装 Apache 和 mod_proxy


注意: 此处给出的说明保持简短,因为您可能已经安装了 Apache 或知道如何使用它。 尽管如此,按照以下步骤,您可以在几分钟内获得一个运行 Apache 的新 Ubuntu VPS。

更新操作系统


我们将从准备我们的虚拟服务器开始。 我们将首先升级默认的可用组件,以确保我们拥有最新的一切。

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

aptitude    update
aptitude -y upgrade

获取基本构建工具


让我们继续获取应用程序构建的基本包 - build-essential。 此软件包包含从源 安装某些东西 所需的工具。

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

aptitude install -y build-essential

获取模块和依赖项


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

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

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

配置 Apache 到代理连接


激活模块


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

首先,让我们验证所有模块都已正确安装并准备好激活。

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

a2enmod

# You will be presented with an output similar to:

# 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
# Which module(s) do you want to enable (wildcards ok)?

一旦系统提示您选择所需的模块,您可以传递以下列出模块名称的行:

模块列表:

proxy proxy_ajp proxy_http rewrite deflate headers proxy_balancer proxy_connect proxy_html

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

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html

注意: 部分模块可能默认开启。 尝试启用它们两次只会确保它们处于活动状态。

修改默认配置


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

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

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

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

复制并粘贴以下配置块,根据您的需要进行修改:

    <VirtualHost *:*>
        ProxyPreserveHost On
        
        # Servers to proxy the connection, or;
        # List of application servers:
        # Usage:
        # ProxyPass / http://[IP Addr.]:[port]/
        # ProxyPassReverse / http://[IP Addr.]:[port]/
        # Example: 
        ProxyPass / http://0.0.0.0:8080/
        ProxyPassReverse / http://0.0.0.0:8080/
        
        ServerName localhost
    </VirtualHost>

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

注意:要了解更多关于虚拟主机配置的信息,您可以点击这里查看详细的Apache手册。

启用负载平衡


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

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

    <Proxy balancer://mycluster>
        # Define back-end servers:

        # Server 1
        BalancerMember http://0.0.0.0:8080/
        
        # Server 2
        BalancerMember http://0.0.0.0:8081/
    </Proxy>
    
    <VirtualHost *:*>
        # Apply VH settings as desired
        # However, configure ProxyPass argument to
        # use "mycluster" to balance the load
        
        ProxyPass / balancer://mycluster
    </VirtualHost>

启用 SSL 反向代理支持


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

重复前面步骤中的步骤,但使用以下配置选项:

    Listen 443
     
    NameVirtualHost *:443
    <VirtualHost *:443>
    
        SSLEngine On
        
        # Set the path to SSL certificate
        # Usage: SSLCertificateFile /path/to/cert.pem
        SSLCertificateFile /etc/apache2/ssl/file.pem
        
        
        # Servers to proxy the connection, or;
        # List of application servers:
        # Usage:
        # ProxyPass / http://[IP Addr.]:[port]/
        # ProxyPassReverse / http://[IP Addr.]:[port]/
        # Example: 
        ProxyPass / http://0.0.0.0:8080/
        ProxyPassReverse / http://0.0.0.0:8080/
        
        # Or, balance the load:
        # ProxyPass / balancer://balancer_cluster_name
    
    </VirtualHost>

重新启动 Apache


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

执行以下命令重启 Apache:

service apache2 restart

就是这样!

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