通过 IIS 配置 HTTPS
TIP
请确保你已经充分理解「网络架构」章节。
生成 SSL 证书
可以在免费 SSL 的网站上,为自己的域名生成 90 天免费且可无限续签的证书:
如果你没有域名,想直接用 IP 地址访问,可以在此生成证书:
你也可以选择使用Let's Encrypt
、其他CA
或自签名SSL证书
。注意自签名证书默认不被操作系统及浏览器信任,需要手动加入信任链。
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365
转换 SSL 证书/准备证书链文件
请准备以下文件:
- 已签发的证书,例如 domain.crt。
- 签发证书的中级 CA,可从签发机构网站下载。例如 ca.crt。
- 已签发证书对应的私钥,例如 domain.key。
后续示例将使用 domain.crt, ca.crt, domain.key 作为示例名。
Windows 系统证书存储无法直接导入pem格式,故需要转换成pfx:
openssl pkcs12 -export -out certificate.pfx -inkey domain.key -in domain.crt
一般情况下不需要集成证书链,因为通常 Windows 内置信任列表已经信任所需的证书链,如果因为一些原因需要集成证书链,请使用以下命令:
openssl pkcs12 -export -out certificate.pfx -inkey domain.key -in domain.crt -certfile ca.crt
安装 IIS
Windows Server
- 打开
服务器管理器
并点击管理
>添加角色和功能
- 导航到
服务器角色
并勾选Web服务器(IIS)
- 点击
Web服务器角色(IIS)
/角色服务
- 添加以下功能
- 常见HTTP功能
- HTTP重定向
- 应用程序开发
- CGI
- ISAPI扩展
- ISAPI筛选器
- 服务器端包含
- WebSocket协议
- 常见HTTP功能
- 点击
确认
并安装
面向消费者的 Windows
按下 Win+R
,输入 optionalfeatures
并按回车。
参考上述 Windows Server 教程勾选 Internet Information Services
并在 万维网服务
子项目中勾选对应附加功能后安装。
安装前提插件
Application Request Routing
URL 重写
- English: 32位 / 64位
- German: 32位 / 64位
- Spanish: 32位 / 64位
- French: 32位 / 64位
- Italian: 32位 / 64位
- Japanese: 32位 / 64位
- Korean: 32位 / 64位
- Russian: 32位 / 64位
- Chinese Simplified: 32位 / 64位
- Chinese Traditional: 32位 / 64位
安装后重启 IIS 服务或重启电脑。
安装证书
- 导航到 IIS 本机配置并进入
服务器证书
- 点击右侧栏的
导入
- 选择文件并根据证书提供商的说明输入密码,如果是通过 OpenSSL 转换的证书则无密码。
- 点击
确定
完成安装
配置站点
TIP
请为面板和节点分别设置目录,因为 IIS 将反向代理规则保存到目录下的 web.config
。
添加一个网站,新建并选择一个空目录,然后配置对应端口及主机名的HTTPS绑定,绑定域名时请按需勾选需要服务器名称指示
。
请在防火墙设置中放行端口。为了保证系统安全,不推荐禁用防火墙!
配置反向代理和变量
本机全局设置
- 导航到 IIS 本机配置并进入
Application Request Routing Cache
- 点击右侧栏的
Server Proxy Settings
- 勾选
Enable Proxy
并点击右侧栏的应用
站点设置
TIP
请为面板和节点分别设置站点
- 进入站点的
URL重写
项目并点击右侧查看服务器变量
- 允许以下变量
- HTTP_HOST
- HTTP_REMOTE_HOST
- HTTP_X_FORWARDED_FOR
- HTTP_X_REAL_IP
- 点击右侧栏的
返回规则
- 添加一个空白入站规则
- 名称按照自己喜好即可
- 匹配 URL 模式设定为
^(.*)
,并确认上方选项是与模式匹配
/正则表达式
且已勾选忽略大小写
- 按照如下表格设置服务器变量
如果使用Cloudflare代理,请将
HTTP_X_REAL_IP
的值设置为{HTTP_CF_Connecting_IP}
。
名称 | 値 | 替换 |
---|---|---|
HTTP_HOST | {HTTP_HOST} | True |
HTTP_X_REAL_IP | {REMOTE_ADDR} | True |
HTTP_X_FORWARDED_FOR | {REMOTE_ADDR} | True |
HTTP_REMOTE_HOST | {REMOTE_ADDR} | True |
操作类型请配置
- 操作类型为
重写
- 重写URL为
http://地址:端口/{R:1}
- 勾选
附加查询字符串
- 不勾选
记录已重写的URL
- 不勾选
停止处理后续规则
- 操作类型为
点击右侧栏的
应用
确认反向代理生效
当你完成上述配置后,可以经由反向代理访问面板和/或节点来测试配置是否存在问题。
假如域名是 domain.com ,反向代理后的端口是12333
与12444
,那么浏览器需要使用这个地址访问:
面板地址: https://domain.com:12333/
节点地址: https://domain.com:12444/
使用节点地址通过浏览器访问。如果你看到网页显示下列内容,则节点反代已正确配置。
[MCSManager Daemon] Status: OK | reference: https://mcsmanager.com/
使用面板地址通过浏览器访问。如果你看到网页显示出 MCSManager 登陆页面,则面板反代已正确配置。
配置 MCSM 使用 HTTPS 连接
此时如果你访问网页,你会发现你可以登录并且使用面板。
但是
如果你进入实例控制台界面,上传文件,下载文件等,就会发现依然无法正常使用,这是因为 MCSManager 要求浏览器能够直接连接到远程节点,由于你升级到了 HTTPS,导致浏览器拒绝使用 Websocket+HTTP 协议连接远程节点!
进入节点管理
,你会发现可能是使用 localhost
,123.x.x.x
或其他域名连接到远程节点的,此时你必须要给每一个远程节点分别配置一次反向代理,让它们全部使用 HTTPS+Websocket 连接。
配置完成后,使用 wss://localhost
,wss://123.x.x.x
或 wss://domain.com
替换原有的localhost
,123.x.x.x
或 domain.com
即可。