【Windows Server 实战】WAC 反向代理配置

如何为 Windows Admin Center 配置 Apache 反向代理

概述

众所周知,Windows Admin Center (WAC) 是微软提供的强大的 Windows Server 管理工具,内网部署确实爽,但难免会有公网访问作为跳板机的需求,只可惜其反向代理情景下 limitation 之多(如频繁要求登录、不能在网站某个子目录下代理WAC),令人咂舌。

本文将介绍如何在 Linux 服务器上使用 Apache 配置反向代理,让 WAC 可以通过自定义域名和 Let's Encrypt SSL 证书进行安全访问。

环境说明

  • 反向代理服务器: Linux (运行 Apache)
  • WAC 后端服务器: 172.25.25.54:443,有内网证书,但是未加域的电脑无法信任证书。
  • 域名: wac.example.com
  • SSL 证书: Let's Encrypt

配置步骤

1. 启用必要的 Apache 模块

首先需要确保启用了以下 Apache 模块:

bash 复制代码
sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_wstunnel
sudo a2enmod headers
sudo a2enmod rewrite

2. 配置 VirtualHost

在 Apache SSL 配置文件中添加以下 VirtualHost 配置(通常是 /etc/httpd/conf.d/ssl.conf/etc/apache2/sites-available/ssl.conf):

apache 复制代码
<VirtualHost *:443>
ServerName wac.example.com

# SSL 配置
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

# SSL 代理配置
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off

# 基本代理设置
ProxyRequests off
ProxyPreserveHost on

# NTLM 认证支持
# WAC 使用 Windows 身份验证,需要特殊配置
SetEnv proxy-nokeepalive 0
SetEnv proxy-initial-not-pooled 1

# WebSocket 支持
# WAC 需要 WebSocket 进行实时通信
RewriteEngine On
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/(.*)$ wss://172.25.25.54:443/$1 [P,L]

# 反向代理配置
ProxyPass / https://172.25.25.54:443/
ProxyPassReverse / https://172.25.25.54:443/

# 设置协议头
RequestHeader set X-Forwarded-Proto "https"
</VirtualHost>

3. 配置说明

SSL 配置
  • 使用 Let's Encrypt 证书提供 HTTPS 加密
  • SSLProxyEngine on 启用后端 SSL 代理
  • 由于 WAC 使用自签名证书,需要禁用证书验证
代理设置
  • ProxyPreserveHost on - 关键设置!保留原始 Host 头,让后端知道请求的域名
  • ProxyRequests off - 禁用正向代理,只启用反向代理
NTLM 支持
apache 复制代码
SetEnv proxy-nokeepalive 0
SetEnv proxy-initial-not-pooled 1

这两个设置对于 Windows 身份验证(NTLM)至关重要:

  • 保持连接活跃,不使用 Keep-Alive
  • 确保初始连接不使用连接池
WebSocket 支持

WAC 大量使用 WebSocket 进行实时通信,需要特殊的重写规则:

apache 复制代码
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/(.*)$ wss://172.25.25.54:443/$1 [P,L]

4. 测试和重载配置

检查配置语法:

bash 复制代码
sudo apachectl configtest

如果显示 "Syntax OK",重载 Apache:

bash 复制代码
sudo systemctl reload httpd
# 或
sudo apachectl graceful

5. 防火墙配置

确保防火墙允许 443 端口:

bash 复制代码
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

常见问题排查

问题 1: 访问显示 Apache 默认页面

原因 : ProxyPreserveHost 设置为 Off

解决方案 : 确保设置为 ProxyPreserveHost on,这样后端服务器才能收到正确的 Host 头。

问题 2: WebSocket 连接失败

症状: WAC 部分功能无法使用,控制台显示 WebSocket 错误

解决方案:

  1. 确保启用了 proxy_wstunnel 模块
  2. 检查 WebSocket 重写规则是否正确配置

问题 3: Windows 身份验证失败

症状: 无法登录或频繁要求输入凭据

解决方案: 确保设置了 NTLM 相关的环境变量:

apache 复制代码
SetEnv proxy-nokeepalive 0
SetEnv proxy-initial-not-pooled 1

总结

通过以上配置,您可以成功地为 Windows Admin Center 配置 Apache 反向代理。关键点包括:

  • ✅ 启用 SSL 和代理模块
  • ✅ 配置 ProxyPreserveHost on 保留主机头
  • ✅ 支持 NTLM 身份验证
  • ✅ 启用 WebSocket 支持
  • ✅ 使用 Let's Encrypt 证书
相关推荐
Starry-sky(jing)11 分钟前
Win11 装 ESP32 Arduino 库卡 3 小时?我把官方 3.3.10 全平台 522MB 搬到了蓝奏云,解压即用
运维·windows·esp32·arduino·离线安装
程序员老油条13 小时前
WSL2 + Docker Desktop:Windows 下的完美 Java 开发环境
java·windows·docker·wsl2
binbin_5216 小时前
Flutter 开发鸿蒙实战:Windows 环境下从 HAP 构建到四 Tab 页面运行
windows·flutter·harmonyos
ylscode17 小时前
微软推送KB5095189:Windows 11 OOBE开箱即用体验迎来新一轮优化
windows·microsoft
Fer_David17 小时前
解决Windows无法在微软商店安装CodeX问题
windows
忧虑的小蚂蚁19 小时前
dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
windows
杨云龙UP21 小时前
Windows SQL Server 备份无法传输至异地共享目录排查处理
运维·服务器·数据库·windows·共享·smb·异地备份传输
AI行业学习21 小时前
Notepad++ 官方纯净下载+完整安装教程(Windows)【2026.7.5】
开发语言·windows·python·前端框架·html·notepad++
站在墙头上21 小时前
Windows下安装 龙虾-Openclaw
windows·ai·openclaw
骑士雄师1 天前
大模型:MessagesPlaceholder 是什么?
服务器·windows·microsoft