- 核心概念:正向代理 vs. 反向代理
- 准备工作:安装 Apache 和获取 SSL 证书
- 配置正向代理(Forward Proxy):客户端配置,让 Apache 代理出站流量
- 配置反向代理(Reverse Proxy):服务端配置,让 Apache 代理入站流量(更常用)
- 高级配置:负载均衡、SSL 卸载等
- 安全建议
核心概念:正向代理 vs. 反向代理
这是理解代理服务器配置的第一步,至关重要。

| 特性 | 正向代理 (Forward Proxy) | 反向代理 (Reverse Proxy) |
|---|---|---|
| 目的 | 为客户端服务,代表客户端访问互联网。 | 为服务器服务,代表服务器接收客户端请求。 |
| 谁发起 | 客户端主动配置使用代理。 | 客户端无感知,它以为反向代理就是目标服务器。 |
| 隐藏对象 | 隐藏客户端的身份和IP地址。 | 隐藏后端服务器的身份和IP地址。 |
| 典型用途 | 企业内网控制上网、访问被限制的网站、缓存内容。 | 负载均衡、SSL卸载、提供统一入口、Web应用防火墙。 |
| Apache配置 | ProxyRequests On |
ProxyRequests Off + ProxyPass / ProxyPassReverse |
本文将重点讲解这两种配置,因为它们是 Apache 作为 HTTPS 代理的两种主要形态。
准备工作
在开始配置之前,请确保你已经:
-
安装 Apache:
- 在 Debian/Ubuntu 上:
sudo apt update && sudo apt install apache2 - 在 CentOS/RHEL 上:
sudo yum install httpd - 确保服务已启动并运行:
sudo systemctl start apache2或sudo systemctl start httpd
- 在 Debian/Ubuntu 上:
-
获取 SSL 证书:
(图片来源网络,侵删)- 代理服务器本身需要 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。

优点:
- 可以统一管理内网用户的出站访问。
- 可以过滤、记录和缓存所有出站流量。
缺点:
- 配置相对复杂,需要在每个客户端上设置。
- 需要处理 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>
工作流程:
- 用户访问
https://myapp.com。 - 请求到达 Apache 反向代理服务器。
- Apache 的
VirtualHost匹配myapp.com。 ProxyPass指令将请求转发到http://localhost:8080/。- 后端应用处理请求并返回响应。
ProxyPassReverse指令修改响应头中的 URL,确保客户端看到的仍然是myapp.com。- Apache 将处理后的响应返回给用户。
优点:
- 对客户端透明,无需任何配置。
- 可以集中管理多个后端应用(域名路由)。
- 可以实现负载均衡、SSL 卸载(后端用 HTTP 即可)、安全加固等。
高级配置
1 负载均衡
你可以将 ProxyPass 指向一个由多个后端服务器组成的“代理集群”。
在 Apache 配置文件顶部定义一个负载均衡组:
# 在 httpd.conf 或虚拟主机文件的开头定义
<Proxy "balancer://mycluster">
# 定义集群中的后端服务器
BalancerMember http://localhost:80 