凌峰创科服务平台

apache https 代理服务器

  1. 核心概念:正向代理 vs. 反向代理
  2. 准备工作:安装 Apache 和获取 SSL 证书
  3. 配置正向代理(Forward Proxy):客户端配置,让 Apache 代理出站流量
  4. 配置反向代理(Reverse Proxy):服务端配置,让 Apache 代理入站流量(更常用)
  5. 高级配置:负载均衡、SSL 卸载等
  6. 安全建议

核心概念:正向代理 vs. 反向代理

这是理解代理服务器配置的第一步,至关重要。

apache https 代理服务器-图1
(图片来源网络,侵删)
特性 正向代理 (Forward Proxy) 反向代理 (Reverse Proxy)
目的 客户端服务,代表客户端访问互联网。 服务器服务,代表服务器接收客户端请求。
谁发起 客户端主动配置使用代理。 客户端无感知,它以为反向代理就是目标服务器。
隐藏对象 隐藏客户端的身份和IP地址。 隐藏后端服务器的身份和IP地址。
典型用途 企业内网控制上网、访问被限制的网站、缓存内容。 负载均衡、SSL卸载、提供统一入口、Web应用防火墙。
Apache配置 ProxyRequests On ProxyRequests Off + ProxyPass / ProxyPassReverse

本文将重点讲解这两种配置,因为它们是 Apache 作为 HTTPS 代理的两种主要形态。


准备工作

在开始配置之前,请确保你已经:

  1. 安装 Apache

    • 在 Debian/Ubuntu 上:sudo apt update && sudo apt install apache2
    • 在 CentOS/RHEL 上:sudo yum install httpd
    • 确保服务已启动并运行:sudo systemctl start apache2sudo systemctl start httpd
  2. 获取 SSL 证书

    apache https 代理服务器-图2
    (图片来源网络,侵删)
    • 代理服务器本身需要 HTTPS 能力,所以必须有一个 SSL 证书。
    • 推荐使用 Let's Encrypt,它是免费且自动化的。
    • 你可以使用 certbot 工具轻松获取:
      # 在 Debian/Ubuntu 上
      sudo apt install certbot python3-certbot-apache
      sudo certbot --apache -d your-proxy-domain.com
    • Certbot 会自动获取证书并配置好 Apache 的虚拟主机,我们将基于这个配置进行修改。

配置正向代理 (Forward Proxy)

这种模式下,你的 Apache 服务器像是一个“中间人”,客户端(如浏览器)需要明确告诉它“请通过你访问网站”。

1 启用代理模块

启用 Apache 的代理模块。

# Debian/Ubuntu
sudo a2enmod proxy proxy_connect proxy_http
# CentOS/RHEL
sudo sed -i 's/#LoadModule proxy_module/LoadModule proxy_module/g' /etc/httpd/conf.modules.d/00-proxy.conf
sudo sed -i 's/#LoadModule proxy_connect_module/LoadModule proxy_connect_module/g' /etc/httpd/conf.modules.d/00-proxy.conf
sudo sed -i 's/#LoadModule proxy_http_module/LoadModule proxy_http_module/g' /etc/httpd/conf.modules.d/00-proxy.conf

2 修改 Apache 主配置或站点配置

编辑你的 Apache 配置文件,/etc/apache2/sites-available/000-default.conf (Debian/Ubuntu) 或 /etc/httpd/conf/httpd.conf (CentOS/RHEL)。

<VirtualHost *:443>
    # ServerAdmin webmaster@localhost
    # ServerName your-proxy-domain.com
    # SSL 配置 (Certbot 通常会自动生成这部分)
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/your-proxy-domain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/your-proxy-domain.com/privkey.pem
    # --- 关键配置:启用正向代理 ---
    # 允许 Apache 接受并转发请求
    ProxyRequests On
    # 允许哪些客户端使用这个代理
    # 只允许来自你内网 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>
    # 可选:设置代理的连接超时
    ProxyTimeout 30
    # 其他配置...
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

3 客户端配置

要让客户端使用这个代理,你需要在客户端的浏览器或操作系统中设置代理服务器地址为 your-proxy-domain.com,端口为 443

apache https 代理服务器-图3
(图片来源网络,侵删)

优点

  • 可以统一管理内网用户的出站访问。
  • 可以过滤、记录和缓存所有出站流量。

缺点

  • 配置相对复杂,需要在每个客户端上设置。
  • 需要处理 HTTPS 流量的“中间人”问题(见安全建议)。

配置反向代理 (Reverse Proxy) - 更常用

这是目前最主流的用法,你有一个运行在 localhost:8080 上的 Web 应用,你想通过 https://myapp.com 来访问它,同时不暴露 8080 端口。

1 启用代理模块

和正向代理一样,需要启用相同的模块。

# Debian/Ubuntu
sudo a2enmod proxy proxy_http
# CentOS/RHEL
# ... (同上)

2 配置虚拟主机

假设你已经用 Certbot 为 myapp.com 获取了证书,现在创建或编辑站点配置文件。

<VirtualHost *:443>
    ServerName myapp.com
    ServerAlias www.myapp.com
    # SSL 配置
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/myapp.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/myapp.com/privkey.pem
    # --- 关键配置:启用反向代理 ---
    # 禁用正向代理功能,这是安全最佳实践
    ProxyRequests Off
    # 启用反向代理,将所有根目录 / 的请求转发到后端应用
    # 后端应用运行在 localhost 的 8080 端口
    ProxyPass / http://localhost:8080/
    # 将后端应用返回的 Location, Content-Location, URI 头中的信息进行重写
    # 避免客户端看到后端的真实地址
    ProxyPassReverse / http://localhost:8080/
    # 可选:设置一些代理超时
    ProxyTimeout 60
    ProxyPreserveHost On # 保持原始 Host 头,后端应用可以知道访问的是哪个域名
    # 可选:添加 Basic Auth 访问控制
    # <Proxy "*">
    #     AuthType Basic
    #     AuthName "Restricted Area"
    #     AuthUserFile /etc/apache2/.htpasswd
    #     Require valid-user
    # </Proxy>
    ErrorLog ${APACHE_LOG_DIR}/myapp_error.log
    CustomLog ${APACHE_LOG_DIR}/myapp_access.log combined
</VirtualHost>

工作流程

  1. 用户访问 https://myapp.com
  2. 请求到达 Apache 反向代理服务器。
  3. Apache 的 VirtualHost 匹配 myapp.com
  4. ProxyPass 指令将请求转发到 http://localhost:8080/
  5. 后端应用处理请求并返回响应。
  6. ProxyPassReverse 指令修改响应头中的 URL,确保客户端看到的仍然是 myapp.com
  7. Apache 将处理后的响应返回给用户。

优点

  • 对客户端透明,无需任何配置。
  • 可以集中管理多个后端应用(域名路由)。
  • 可以实现负载均衡、SSL 卸载(后端用 HTTP 即可)、安全加固等。

高级配置

1 负载均衡

你可以将 ProxyPass 指向一个由多个后端服务器组成的“代理集群”。

在 Apache 配置文件顶部定义一个负载均衡组:

# 在 httpd.conf 或虚拟主机文件的开头定义
<Proxy "balancer://mycluster">
    # 定义集群中的后端服务器
    BalancerMember http://localhost:80
分享:
扫描分享到社交APP
上一篇
下一篇