【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 证书
相关推荐
寒水馨几秒前
Windows下载、安装 Codex CLI(附安装包codex-x86_64-pc-windows-msvc.exe)
windows·rust·codex·终端工具·自动化编程·codex cli·ai编码代理
其实防守也摸鱼3 小时前
镜像校验完成iso完整操作流程(Windows 环境,适配 Ubuntu 22.04 / 24.04)
linux·服务器·windows·学习·ubuntu·教程
像风一样自由202013 小时前
从本地到公网:Windows 下使用 Cloudflare Quick Tunnel 与 Natapp 联调 FastAPI
windows·fastapi
2601_9609067219 小时前
科技“无人区”跋涉,难度高、不确定性大
windows·macos·pycharm·myeclipse
会飞的大鱼人19 小时前
一文搞懂 Java HashSet:把它想成游乐园里只允许一次入场的盖章名单
java·开发语言·windows
ziguo112220 小时前
C/C++ 错误处理全解:从 errno 到 C++ 异常
linux·c语言·c++·windows·visual studio
王维同学1 天前
IFEO Debugger、VerifierDlls 与 SilentProcessExit 配置
c++·windows·安全·注册表
您^_^1 天前
使用技巧(十一):Claude Code 最强审问官 —— grill-me 深度指南,装完先别写代码
人工智能·windows·个人开发·claudecode·deepseek v4 pro
酉鬼女又兒1 天前
[特殊字符]零基础入门AI:归纳演绎、假设空间、归纳偏好、NFL、过拟合与欠拟合、模型评估选择、超参数、性能度量、混淆矩阵、P-R曲线和F1
人工智能·windows·python·深度学习·安全·机器学习·矩阵
山城码农笑松哥1 天前
C盘空间救星:一键无损迁移软件数据到其他盘
windows·c盘清理迁移