优考试局域网考试系统内网域名与HTTPS配置指南¶
前言¶
本文档旨在指导在纯内网环境中,如何独立部署本地域名解析,并实现通过域名访问优考试独立部署版,包括去除端口号访问,以及在拥有正式域名的前提下配置 HTTPS 访问。适用于需要在局域网内部署服务,并希望优化访问体验(如统一域名、HTTPS 加密)的用户。
为什么需要这个配置?¶
-
使用域名访问的目的: 让优考试页面通过易记的域名(如
yks.hz.com
、ks.abc.com
)访问,而不是输入繁琐的 IP 地址和端口号; 方便内部团队统一管理和访问各类本地服务 -
使用HTTPS访问的目的: 优考试支持摄像头监考、摄像头抓拍、录音回答问答题等功能,这些功能需要使用 HTTPS 访问才能正常使用;HTTPS 可以有效防止中间人攻击,保障数据传输的安全性;在局域网中,HTTPS 也能有效防止数据被监听或篡改;部分浏览器对未加密的 HTTP 服务会标记为"不安全",影响用户体验;
阅读指南¶
根据您的需求选择对应章节阅读:
第一章:配置本地域名访问¶
在本章中,我们将介绍如何在局域网内配置本地域名访问优考试独立部署版。我们将使用 Pi-hole 来实现本地域名解析。实现局域网内任意设备访问 自定义域名(如http://ks.hz.com
),就能打开你本地优考试服务,无需加端口号!
1.1 准备工作¶
有两种方式:
- 购买在线域名解析到内网ip即可
- 通过Pi-hole配置本地域名, 例如
ks.hz.com
这里我们使用第二种方式,Pi-hole 是一个开源的 DNS 服务器和广告拦截器,可以在局域网内实现本地域名解析。 首先需要准备一台linux的服务器,作为DHCP的服务器,安装Pi-hole并配置本地域名,启用DHCP服务来代替路由器的DHCP服务,实现在局域网内的所有电脑都能够使用域名访问优考试独立部署版
下面是通过Pi-hole配置本地域名的教程 (需要在联网环境下配置)
1.2 目录结构设计(推荐)¶
在你的 Linux 系统中,推荐将所有配置文件集中放在一个地方,方便管理和备份。 推荐放在你的用户目录下:
mkdir -p ~/docker/pihole
~/docker/pihole/
├── etc-pihole/ # Pi-hole 数据挂载目录
├── etc-dnsmasq.d/ # Pi-hole 的 DNS 配置文件目录
└── .env # Pi-hole 启动参数配置文件
1.3 安装前准备¶
1. 保证系统已安装 Docker¶
运行下面命令验证是否安装:
docker -v
Docker version 24.0.2
,说明已经安装。
如果没有安装 Docker,请先运行以下命令安装(以 Ubuntu 为例):
sudo apt update sudo apt install -y docker.io sudo systemctl enable docker sudo systemctl start docker
1.4 创建目录结构¶
在终端中按如下步骤操作:
mkdir -p ~/docker/pihole/etc-pihole
mkdir -p ~/docker/pihole/etc-dnsmasq.d
cd ~/docker/pihole
1.5 创建 .env
配置文件¶
这个文件保存了 Pi-hole 容器的所有环境变量和端口配置。
vi .env
# 时区
TZ=Asia/Shanghai
# Web 管理页面端口(默认是80,这里改为8081,防止与系统服务冲突)
WEB_PORT=8081
# DNS 服务端口(默认是53)
DNS_PORT=53
# 登录密码(可以自定义)
PIHOLE_PASSWORD=admin123
# 宿主机访问容器内服务的“虚拟主机名”,默认保持不变
VIRTUAL_HOST=pi.hole
保存并退出:按下冒号下方出现:
后→输入wq
再按下回车进行保存
1.6 运行 Docker 容器¶
在 ~/docker/pihole
目录下运行以下命令:
docker run -d \
--name pihole \
-p ${WEB_PORT:-8081}:80 \
-p ${DNS_PORT:-53}:53/tcp \
-p ${DNS_PORT:-53}:53/udp \
-p 67:67/udp \
-e TZ="${TZ:-Asia/Shanghai}" \
-e WEBPASSWORD="${PIHOLE_PASSWORD:-admin123}" \
-v "$(pwd)/etc-pihole/:/etc/pihole/" \
-v "$(pwd)/etc-dnsmasq.d/:/etc/dnsmasq.d/" \
--dns=127.0.0.1 \
--dns=1.1.1.1 \
--restart=unless-stopped \
--hostname pi.hole \
--cap-add=NET_ADMIN \
pihole/pihole:latest
-p 67:67/udp
:此端口是 DHCP 需要的,必须映射。
- --cap-add=NET_ADMIN
:给容器添加网络管理权限,开启 DHCP 必须。
- --restart=unless-stopped
:确保容器随系统启动。
执行成功后,你可以运行:
docker logs -f pihole
Pi-hole blocking is enabled
就说明启动成功!
1.7 访问管理界面¶
浏览器打开:
http://<你的宿主机IP>:8081/admin
http://192.168.1.100:8081/admin
登录密码是 .env
文件中设置的 admin123
。
1.8 配置 Pi-hole 自带 DHCP Server¶
重要提醒:一定要先关闭你路由器中的 DHCP 服务!
1. 进入 Web 管理后台¶
浏览器访问 http://<IP>:8081/admin
,登录。
2. 启用 DHCP 服务¶
点击左侧 Settings → 选择上方标签 DHCP
✔ 勾选:Enable DHCP server
填写如下:
- Range Start:192.168.1.100
- Range End:192.168.1.150
- Router (Gateway):192.168.1.1(你的原路由器网关)
点击 Save
3. 重启容器¶
docker restart pihole
1.9 设置固定 IP¶
注意:Pi-hole 宿主机的 IP 地址必须是固定的(静态 IP),否则 DHCP 和 DNS 服务将无法正常工作!
1. 查看当前网卡名称¶
打开终端,输入:
ip a
找到你正在使用的网卡,比如常见的是 eth0
、ens33
、ens160
、enp3s0
等。
记下你的网卡名,比如这里假设是 ens33
。
2. 备份当前配置¶
在修改前,建议先备份 Netplan 配置文件:
sudo cp /etc/netplan/*.yaml ~/netplan-backup.yaml
3. 编辑 Netplan 配置文件¶
通常配置文件在 /etc/netplan/
目录下,比如叫 01-netcfg.yaml
或 50-cloud-init.yaml
。
编辑它:
sudo nano /etc/netplan/01-netcfg.yaml
(如果没有这个文件,列一下目录 ls /etc/netplan/
看实际名字。)
4. 修改内容为静态 IP 配置¶
示例(你根据自己实际 IP 修改):
network:
version: 2
ethernets:
ens33:
dhcp4: no
addresses:
- 192.168.1.10/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 192.168.1.10 # Pi-hole 本机 IP
- 8.8.8.8 # 备用 DNS,可选
说明:
-
ens33
:你的网卡名。 -
192.168.1.10/24
:你的 Pi-hole 宿主机固定 IP,/24
是子网掩码255.255.255.0
。 -
gateway4: 192.168.1.1
:你的原路由器 IP。 -
nameservers
:首选是自己(Pi-hole),备用是公网 DNS(如 Google DNS 8.8.8.8)。
5. 应用配置¶
保存并退出编辑器后,应用新配置:
sudo netplan apply
6. 验证 IP 是否生效¶
确认 IP 地址已经变成你设定的静态 IP:
ip a
7. 特殊情况:旧版 Ubuntu(比如 16.04)¶
如果你的 Ubuntu 是 16.04 或更早版本,使用的是 /etc/network/interfaces
,配置方式如下:
编辑:
sudo nano /etc/network/interfaces
auto ens33
iface ens33 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.10 8.8.8.8
sudo systemctl restart networking
sudo reboot
完成以上步骤后,宿主机 IP 就是固定的了,不会随着重启、重连变化,从而确保:
- Pi-hole DHCP 服务器广播正确
- DNS 服务正常指向 Pi-hole
- 整个局域网联网稳定
1.10 验证 DHCP 是否工作¶
让某台设备断开 Wi-Fi 后重新连接。
然后查看它的 IP:
- IP 是否在你设置的范围内?如 192.168.1.110
- DNS 是否指向了你的 Pi-hole IP?
1.11 常见问题与解决办法¶
问题 | 可能原因 | 解决方法 |
---|---|---|
页面打不开 | 端口被防火墙拦截 | 放行端口 8081 和 53 |
DNS 不生效 | 没有设置设备或路由器 DNS | 指定 Pi-hole IP 作为 DNS |
DHCP 无效 | 路由器 DHCP 没关闭 | 确保只启用一个 DHCP |
密码忘了 | 登录失败 | 用命令 docker exec -it pihole pihole -a -p 重置密码 |
1.12 配置自定义域名¶
1. 添加本地域名解析¶
打开 Web → Local DNS Records → 添加:
这里填入的域名是访问优考试局域网的域名,这里填入的IP是优考试服务器的IP
- Domain:
<域名>
,如ks.hz.com
- IP:
<IP>
,如192.168.1.10
,是安装优考试的电脑的 IP 地址
点击添加后保存。保存之后局域网的电脑就可以通过hppt://<域名>:<端口>去访问优考试的服务了, 例如:http://ks.hz.com:5858
第二章:配置域名无端口访问¶
之前的配置是通过 http://<域名>:5858
访问优考试服务,下面我们将介绍如何配置 Nginx 反向代理,让局域网内任意设备访问 http://<域名>
,就能打开你本地 Windows 上的优考试服务(实际跑在 5858
端口),无需加端口号!, 例如:http://ks.hz.com
2.1 配置目标¶
局域网中任意设备访问 http://<域名>
,就能打开你本地 Windows 上的优考试服务(实际跑在 5858
端口),无需加端口号!
2.2 系统前提¶
- Windows电脑已安装优考试服务,运行在
http://localhost:5858
- 局域网内已部署 Pi-hole 并将
<域名>
解析到你的本机 IP(如192.168.0.1
)
2.3 实现思路¶
- 在安装了优考试独立部署版的Windows上,下载并安装 Nginx (需要在联网环境下配置)
- 配置 Nginx 监听 80 端口,自动转发到 5858 端口
- 启动 Nginx,让它自动接管域名请求
- 配合 Pi-hole 已设置的 DNS 解析,让局域网内访问
<域名>
就跳到你 Windows 服务上
2.1 下载并安装 Nginx¶
推荐安装路径¶
建议目录结构如下:
C:\
└── nginx\
├── conf\
├── html\
├── logs\
└── nginx.exe ...
nginx/1.24.0
)Windows 版本

.zip
压缩包,解压到你想安装的位置,推荐为:
C:\nginx
2.2 配置 Nginx 实现反向代理¶
步骤 2.1:修改配置文件¶
打开这个文件:
C:\nginx\conf\nginx.conf
server
段,将其替换为以下配置:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name <域名>;
location / {
proxy_pass http://127.0.0.1:5858/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
2.3 启动 Nginx¶
步骤 3.1:启动方式¶
打开命令行(Win + R → 输入 cmd
):
cd C:\nginx
start nginx
nginx -s reload
如果要关闭 Nginx:¶
nginx -s stop
nginx.exe
进程
2.4 Windows 防火墙设置(仅第一次)¶
确保 Windows 没有拦截 Nginx 的 80 端口访问:
1. 打开控制面板 → 系统与安全 → Windows Defender 防火墙 → “允许应用通过防火墙”
2. 添加 nginx.exe
到允许的应用中
3. 或手动开放 TCP 80 端口
2.5 测试效果¶
在浏览器中访问:
http://<域名>

2.6 设置Nginx开机自启动和关闭Windows的IIS服务¶
为了避免电脑重启后,Windows的IIS服务抢占80端口,导致Nginx无法启动,可以设置Nginx的开机自启动和禁用Windows的IIS服务
禁用IIS服务¶
1.Win + R 输入 services.msc
2.找到【IIS】服务名叫:World Wide Web Publishing Service
3.右键停止,然后重新找到这个服务右键属性设置为禁用
设置Nginx开机自启动¶
-
先准备一下 确认你的 Nginx 主程序路径,比如你的 nginx.exe 应该在:
记住这个路径。C:\Users\HZ\Desktop\nginx-1.26.3\nginx.exe
-
打开计划任务管理器
- Win + R 输入
taskschd.msc
,回车 -
打开 任务计划程序 (Task Scheduler)
-
新建任务
- 点右侧 创建任务 (不是创建基本任务!!)
- 在 常规 选项卡:
- 名称 :随便起,比如叫
Nginx Autostart
- 安全选项 :勾上
使用最高权限运行
-
配置为 :选择你的 Windows 版本(一般选 Windows 10 或 Windows 11)
-
设置触发器
- 点击上方的“触发器”→ 新建 :
- 开始任务 :选择
登录时
-
用户:默认即可(就是你的当前账号)
-
设置操作
- 点击上方的“操作”→ 新建 :
- 操作 :
启动程序
-
程序或脚本 :填你的 Nginx 路径,比如:
(注意不要有错,复制完整路径)C:\Users\HZ\Desktop\nginx-1.26.3\nginx.exe
-
完成并保存 点确定,然后系统会让你输入一下当前用户的密码(因为要以管理员身份运行)。
保存好以后,开机自动就启动 Nginx了 !
注意事项总结¶
项目 | 说明 |
---|---|
服务地址 | 你必须确认优考试服务始终运行在 localhost:5858 |
DNS 解析 | Pi-hole 已将 <域名> ➝ 192.168.0.1 |
Nginx 必须监听本地 IP | 默认就可以,80 端口无需修改 |
防火墙问题 | 需允许 Nginx 通信,或关闭防火墙测试 |
多服务时 | 可为不同域名设置多个 server 块,例如 exam.yks 、file.yks 等 |
如果无法访问https,访问http跳转到IIS页面 | 可能是80端口被IIS服务占用了,导致Nginx没有启动 |
最终效果¶
- 浏览器访问:
http://<域名>
- 实际后端跳转:
http://localhost:5858
- 用户无需知道端口号,体验更像正式网站
第三章:配置HTTPS访问¶
为了实现摄像头监考、问答题录音上传、手机也能摄像头监考等功能,我们需要配置 HTTPS 访问优考试独立部署版。通过正式域名配置HTTPS来实现这些功能。 在本章中,我们将介绍如何在局域网内配置 HTTPS 访问优考试独立部署版。我们将使用 Let's Encrypt 来获取免费的 SSL 证书。
3.1 配置目标¶
实现摄像头监控和问答题录音上传功能,避免使用霸屏模块进入考试。通过正式域名配置HTTPS来实现这些功能。
3.2 前期准备¶
在开始之前,你需要确保以下几点:
- 在Windows上安装好了优考试服务,可以访问优考试独立部署版
- 一个有效的域名(例如:
example.com
) - 该域名的 DNS 配置已经设置,并且指向你的服务器的 IP 地址
- 准备使用 Let's Encrypt 获取和安装 SSL 证书
- Nginx 已安装并正在运行,且已经配置好优考试应用
3.3 配置步骤¶
3.2 安装 win-acme 工具¶
Let's Encrypt 是一个免费的证书颁发机构,可以通过 win-acme 工具在 Windows 环境中方便地生成 SSL 证书。
1. 下载并安装¶
- 访问 win-acme官网
- 点击右上角的 Download 下载最新版本(zip格式)
- 解压下载的文件到任意目录
2. 运行工具¶
- 进入解压后的目录
- 以管理员身份运行
wacs.exe
3.3 获取 SSL 证书¶
1. 域名配置¶
- 选择选项
2: Manual input
- 输入你的域名,如:
example.com
2. 验证方式选择¶
- 选择选项
6: [dns] Create verification records manually
- 这种方式适用于内网环境,不需要公网访问
3. 证书保存格式¶
- 选择选项
2: PEM encoded files
- 这种格式适用于 Nginx 等常见 Web 服务器
4. 证书安全设置¶
- 私钥密码保护:选择
1: None
(除非有特殊安全需求) - IIS 绑定:选择
3: No (additional) installation steps
5. 域名所有权验证¶
- 同意 Let's Encrypt 服务条款(输入
y
) - 按提示添加 DNS TXT 记录
- 等待验证完成
- 验证完成后可以删除 TXT 记录(输入
y
)
6. 证书文件获取¶
完成后,将在指定目录生成以下文件:
- example.com-crt.pem
:证书文件
- example.com-key.pem
:私钥文件
- chain.pem
:证书链文件
这些文件将在后续配置 Nginx HTTPS 时使用。
3.4 配置 Nginx 使用 SSL¶
1. 修改 Nginx 配置文件:¶
打开 Nginx 配置文件(例如:example.com.conf
),并按照以下示例配置 HTTPS 和证书路径:
# HTTP -> HTTPS 重定向
server {
listen 80;
server_name example.com;
# 重定向到 HTTPS
return 301 https://$host$request_uri;
}
# HTTPS 配置
server {
listen 443 ssl;
server_name example.com;
ssl_certificate cert/example.com-crt.pem; # 证书文件
ssl_certificate_key cert/example.com-key.pem; # 私钥文件
ssl_trusted_certificate cert/chain.pem; # 链证书
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://127.0.0.1:5858; # 根据你的实际端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
2. 重新加载 Nginx 配置:¶
完成配置后,重启 Nginx 使配置生效:
nginx -s reload
nginx -s stop
nginx
3.5 配置 HTTP 到 HTTPS 的自动重定向¶
为了确保所有访问都通过 HTTPS,你可以在 Nginx 配置中添加 HTTP 到 HTTPS 的重定向。
server {
listen 80;
server_name example.com;
# 自动跳转到 HTTPS
return 301 https://$host$request_uri;
}
http://example.com
的请求会自动跳转到 https://example.com
。

3.6 常见问题与解决办法¶
1. 证书无法通过验证:¶
- 如果使用 HTTP 验证,确保你的网站能够从外网访问,并且
/.well-known/acme-challenge/
路径能正确访问。 - 如果使用 DNS 验证,确保 DNS 记录已经正确添加并传播。
2. 浏览器提示“不安全”:¶
- 确保证书已正确安装,并且在 Nginx 配置中引用了正确的证书路径。
- 如果证书是自签名的,浏览器会显示“不安全”警告。你需要使用 Let's Encrypt 等正式证书来避免此问题。
3. 证书续期失败:¶
- 使用
win-acme
工具时,确保 DNS 记录正确设置,并且验证过程可以顺利完成。如果你使用了 DNS 验证,记得检查 DNS 记录是否过期。
4. 证书链问题:¶
- 确保在 Nginx 配置中正确引用了链证书(
ssl_trusted_certificate
)。如果链证书丢失,浏览器可能无法识别证书的有效性。
常见问题排查¶
常见问题排查(FAQ)¶
Q1: 为什么服务器上可以访问服务,但其他电脑打不开?
A: 请确认以下几点:
- 服务器是否正确运行,并监听了局域网 IP(例如
0.0.0.0
或实际的内网 IP),而不是仅绑定127.0.0.1
。 - 防火墙是否放行了对应端口(如 80、443、8888 等)。
- 其他电脑是否处于同一局域网,并能 ping 通服务器 IP。
Q2: 为什么电脑上可以打开,但手机打不开?
A: 请检查以下内容: - 手机是否连接的是相同的 Wi-Fi 网络(与电脑/服务器处于同一网段)。 - Pi-hole 是否配置了正确的 DNS,手机的 DNS 设置是否指向 Pi-hole。 - 手机是否缓存了旧的 DNS 记录,可尝试重启手机或清空 DNS 缓存。
Q3: 使用摄像头时报错“无法访问”,是不是因为没有启用 HTTPS?
A: 是的,一些浏览器或前端框架在调用摄像头、麦克风、位置信息等敏感权限时**强制要求使用 HTTPS** 。请使用有效的 HTTPS 证书(推荐通过 Let’s Encrypt 申请)来访问相关服务。或者使用系统自带的霸屏进入考试,这样也可以使用摄像头和麦克风。
Q4: 不同网段的设备之间无法访问怎么办?
A:
局域网中不同网段(例如 192.168.1.x
与 10.0.50.x
)之间的访问,通常需要路由器支持跨网段通信,或者配置静态路由。建议:
- 将所有设备尽量保持在同一网段。
- 如确实需要跨网段访问,请在网关或路由器中配置路由规则。