【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 证书
相关推荐
埃博拉酱3 天前
VS Code Remote SSH 连接 Windows 服务器卡在"下载 VS Code 服务器":prcdn DNS 解析失败的诊断与 BITS 断点续传
windows·ssh·visual studio code
唐宋元明清21883 天前
.NET 本地Db数据库-技术方案选型
windows·c#
加号33 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
tryCbest4 天前
Windows环境下配置pip镜像源
windows·pip
呉師傅4 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
百事牛科技4 天前
保护文档安全:PDF限制功能详解与实操
windows·pdf
一个人旅程~4 天前
如何用命令行把win10/win11设置为长期暂停更新?
linux·windows·经验分享·电脑
一个假的前端男4 天前
[特殊字符] Flutter 安装完整指南 Windows—— 2026最新版
windows·flutter
倚肆4 天前
在 Windows Docker 中安装并配置 Nginx (映射 Windows 端口与路径)
windows·nginx·docker
破无差4 天前
拯救你的C盘
windows