凌峰创科服务平台

Linux Apache代理服务器如何配置与优化?

Apache 代理是什么?

Apache 服务器可以配置成一个“中间人”,客户端(比如你的浏览器)不直接访问最终的目标服务器,而是先访问 Apache 代理服务器,然后由代理服务器代表客户端去请求目标资源,最后再将获取到的内容返回给客户端。

Linux Apache代理服务器如何配置与优化?-图1
(图片来源网络,侵删)

主要用途:

  1. 反向代理:这是最常见的用法,客户端通常不知道代理的存在,他们以为自己在直接访问 Apache 服务器,Apache 负责将请求转发到后端的某个或多个应用服务器(如 Tomcat, Node.js, PHP-FPM),这可以实现负载均衡、高可用性、SSL 卸载和统一的安全策略。
  2. 正向代理:客户端需要明确配置代理服务器,通常用于企业环境,用于控制员工访问互联网、缓存网页内容以加快访问速度、或者隐藏客户端的真实 IP 地址,这类似于 Squid 的功能。
  3. 透明代理:网络设备(如路由器、防火墙)强制所有流量通过代理,用户无需在浏览器或系统中进行任何配置。

准备工作:安装和启用模块

在开始配置之前,请确保你的 Apache 服务器已经安装了必要的代理模块。

安装 Apache

如果尚未安装,可以使用包管理器进行安装:

# 对于 Debian/Ubuntu
sudo apt update
sudo apt install apache2
# 对于 CentOS/RHEL/Fedora
sudo yum install httpd  # 或者 dnf install httpd

启用代理模块

Apache 的代理功能由多个模块协同工作,你需要启用它们:

Linux Apache代理服务器如何配置与优化?-图2
(图片来源网络,侵删)
# 对于 Debian/Ubuntu (使用 a2enmod 命令)
sudo a2enmod proxy
sudo a2enmod proxy_http    # 用于代理 HTTP/HTTPS 流量
sudo a2enmod proxy_ajp     # 用于代理 AJP 协议(常用于 Tomcat)
sudo a2enmod proxy_balancer # 用于负载均衡
sudo a2enmod lbmethod_byrequests # 负载均衡算法(按请求数)
# 对于 CentOS/RHEL (手动编辑配置文件)
# 编辑 /etc/httpd/conf.modules.d/00-base.conf,确保以下行没有被注释掉
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

重启 Apache 服务

使配置生效:

# 对于 Debian/Ubuntu
sudo systemctl restart apache2
# 对于 CentOS/RHEL
sudo systemctl restart httpd

配置示例

示例 1:反向代理(最常用)

假设我们有一个运行在 localhost:8080 上的 Web 应用(比如一个 Java Tomcat 应用),我们希望用户通过访问 http://your_server_domain/ 就能访问到它。

配置步骤:

  1. 创建一个新的配置文件,/etc/apache2/sites-available/myapp.conf (Ubuntu) 或 /etc/httpd/conf.d/myapp.conf (CentOS)。

    Linux Apache代理服务器如何配置与优化?-图3
    (图片来源网络,侵删)
  2. 在文件中添加以下内容:

# 启用代理引擎
ProxyRequests Off
# 注意:对于反向代理,通常关闭 ProxyRequests。
# 如果开启,它会使服务器行为变为正向代理。
# 设置反向代理
# 将所有发往 / 路径的请求,代理到 http://localhost:8080
<VirtualHost *:80>
    ServerName your_server_domain
    ServerAdmin webmaster@your_server_domain
    DocumentRoot /var/www/html # 这个目录可以留空,因为内容来自后端
    # 反向代理配置
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
    # 可选:启用日志记录
    ErrorLog ${APACHE_LOG_DIR}/myapp_error.log
    CustomLog ${APACHE_LOG_DIR}/myapp_access.log combined
</VirtualHost>

配置解释:

  • ProxyRequests Off:关闭正向代理功能,这是配置反向代理的关键。
  • <VirtualHost *:80>:定义一个虚拟主机,监听在 80 端口。
  • ProxyPass / http://localhost:8080/:这是核心指令。
    • 匹配所有进入这个虚拟主机的请求路径。
    • http://localhost:8080/:将请求转发到的后端服务器地址。
  • ProxyPassReverse / http://localhost:8080/:非常重要!它会修改从后端服务器返回的响应中的 Location, Content-Location, URI 头,如果后端返回 Location: /login,代理会将其重写为 Location: http://your_server_domain/login,确保浏览器能正确跳转。
  1. 启用站点并重启 Apache

    • Ubuntu:

      sudo a2ensite myapp.conf
      sudo systemctl reload apache2 # 或者 restart
    • CentOS:

      sudo systemctl restart httpd

访问 http://your_server_domain,你就会看到 localhost:8080 上应用的内容。


示例 2:负载均衡

假设后端有两台应用服务器,我们需要将流量分配到它们上面。

配置步骤:

  1. 创建或编辑配置文件。

  2. 添加以下配置:

ProxyRequests Off
# 定义一个负载均衡集群,命名为 "mycluster"
<Proxy balancer://mycluster>
    # 定义后端服务器节点
    BalancerMember http://app_server_1:8080
    BalancerMember http://app_server_2:8080
    # 设置负载均衡算法(可选)
    # byrequests: 按请求轮询
    # bytraffic: 按流量分配
    # bybusyness: 分配给最空闲的服务器
    ProxySet lbmethod=byrequests
</Proxy>
<VirtualHost *:80>
    ServerName your_server_domain
    # 将所有请求代理到上面定义的集群
    ProxyPass / balancer://mycluster/
    ProxyPassReverse / balancer://mycluster/
</VirtualHost>

配置解释:

  • <Proxy balancer://mycluster>:定义一个名为 mycluster 的代理集群。
  • BalancerMember ...:集群中的每个成员,即一台后端服务器。
  • ProxySet lbmethod=byrequests:指定负载均衡策略。
  • ProxyPass / balancer://mycluster/:将请求发送到集群,集群会根据策略自动选择一个后端服务器。

示例 3:正向代理

假设我们要让 Apache 作为一个客户端可以使用的代理服务器,监听在 8080 端口。

配置步骤:

  1. 创建或编辑配置文件。

  2. 添加以下配置:

# 启用正向代理
ProxyRequests On
# 对于正向代理,必须开启 ProxyRequests
# 允许哪些客户端可以使用这个代理
# <Proxy *> 默认是允许所有,但为了安全,最好限制
# 这里只允许本地网络 192.168.1.0/24 的客户端
<Proxy *>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from 192.168.1.0/24
</Proxy>
# 监听一个端口作为代理端口
Listen 8080
<VirtualHost *:8080>
    # 可以给这个代理服务起个名字
    ServerName proxy.mydomain.com
    # 不需要 ProxyPass,因为 ProxyRequests On 已经处理了
    # 但是可以设置一些缓存(可选)
    # CacheRoot /var/cache/apache2/proxy
    # CacheEnable disk /
    # CacheDirLevels 2
    # CacheDirLength 2
</VirtualHost>

配置解释:

  • ProxyRequests On:开启正向代理。
  • <Proxy *>:这是一个安全限制,默认情况下,ProxyRequests On 会允许所有客户端通过你的服务器代理任何请求,这非常危险!必须使用 Order, Deny, Allow 来限制访问。
  • Listen 8080:指定代理服务器监听的端口。

如何使用:

在客户端(浏览器或操作系统网络设置)中,设置代理服务器为 your_server_ip,端口为 8080,之后客户端的所有网络请求都会通过这个 Apache 代理。


重要注意事项

  1. 性能:Apache 代理虽然功能强大,但在处理高并发流量时,性能通常不如专业的反向代理软件,如 Nginx,对于生产环境,特别是作为前端负载均衡器,Nginx 通常是更优的选择。
  2. 安全性
    • 永远不要在公网上开放一个未经安全
分享:
扫描分享到社交APP
上一篇
下一篇