跳转至

优考试局域网考试系统内网域名与HTTPS配置指南

前言

本文档旨在指导在纯内网环境中,如何独立部署本地域名解析,并实现通过域名访问优考试独立部署版,包括去除端口号访问,以及在拥有正式域名的前提下配置 HTTPS 访问。适用于需要在局域网内部署服务,并希望优化访问体验(如统一域名、HTTPS 加密)的用户。

为什么需要这个配置?

  1. 使用域名访问的目的: 让优考试页面通过易记的域名(如 yks.hz.comks.abc.com)访问,而不是输入繁琐的 IP 地址和端口号; 方便内部团队统一管理和访问各类本地服务

  2. 使用HTTPS访问的目的: 优考试支持摄像头监考、摄像头抓拍、录音回答问答题等功能,这些功能需要使用 HTTPS 访问才能正常使用;HTTPS 可以有效防止中间人攻击,保障数据传输的安全性;在局域网中,HTTPS 也能有效防止数据被监听或篡改;部分浏览器对未加密的 HTTP 服务会标记为"不安全",影响用户体验;

阅读指南

根据您的需求选择对应章节阅读:

  1. 如果只需要在内网使用域名访问服务,请阅读 配置本地域名访问
  2. 如果希望隐藏端口直接访问服务,请阅读 配置域名无端口访问
  3. 如果希望配置HTTPS,请阅读 配置HTTPS访问

第一章:配置本地域名访问

在本章中,我们将介绍如何在局域网内配置本地域名访问优考试独立部署版。我们将使用 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,说明已经安装。
alt text

如果没有安装 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
例如你宿主机是 192.168.1.100:
http://192.168.1.100:8081/admin

登录密码是 .env 文件中设置的 admin123

alt text

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

找到你正在使用的网卡,比如常见的是 eth0ens33ens160enp3s0 等。 记下你的网卡名,比如这里假设是 ens33

2. 备份当前配置

在修改前,建议先备份 Netplan 配置文件:

sudo cp /etc/netplan/*.yaml ~/netplan-backup.yaml

3. 编辑 Netplan 配置文件

通常配置文件在 /etc/netplan/ 目录下,比如叫 01-netcfg.yaml50-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
检查: - IP 地址 - 默认网关 - DNS 设置是否正确

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 常见问题与解决办法

问题 可能原因 解决方法
页面打不开 端口被防火墙拦截 放行端口 808153
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

alt text

  • Domain:<域名>,如 ks.hz.com
  • IP:<IP>,如 192.168.1.10,是安装优考试的电脑的 IP 地址

点击添加后保存。保存之后局域网的电脑就可以通过hppt://<域名>:<端口>去访问优考试的服务了, 例如:http://ks.hz.com:5858

alt text

第二章:配置域名无端口访问

之前的配置是通过 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 实现思路

  1. 在安装了优考试独立部署版的Windows上,下载并安装 Nginx (需要在联网环境下配置)
  2. 配置 Nginx 监听 80 端口,自动转发到 5858 端口
  3. 启动 Nginx,让它自动接管域名请求
  4. 配合 Pi-hole 已设置的 DNS 解析,让局域网内访问 <域名> 就跳到你 Windows 服务上

2.1 下载并安装 Nginx

推荐安装路径

建议目录结构如下:

C:\
└── nginx\    
    ├── conf\    
    ├── html\    
    ├── logs\    
    └── nginx.exe ...
1. 打开官网:https://nginx.org/en/download.html 2. 下载当前稳定版(例如 nginx/1.24.0)Windows 版本 alt text 3. 下载的是一个 .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://<域名>
应该能直接看到优考试服务! alt text

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开机自启动

  1. 先准备一下 确认你的 Nginx 主程序路径,比如你的 nginx.exe 应该在:

    C:\Users\HZ\Desktop\nginx-1.26.3\nginx.exe
    
    记住这个路径。

  2. 打开计划任务管理器

  3. Win + R 输入 taskschd.msc,回车
  4. 打开 任务计划程序 (Task Scheduler)

  5. 新建任务

  6. 点右侧 创建任务 (不是创建基本任务!!)
  7. 常规 选项卡:
  8. 名称 :随便起,比如叫 Nginx Autostart
  9. 安全选项 :勾上 使用最高权限运行
  10. 配置为 :选择你的 Windows 版本(一般选 Windows 10 或 Windows 11)

  11. 设置触发器

  12. 点击上方的“触发器”→ 新建
  13. 开始任务 :选择 登录时
  14. 用户:默认即可(就是你的当前账号)

  15. 设置操作

  16. 点击上方的“操作”→ 新建
  17. 操作启动程序
  18. 程序或脚本 :填你的 Nginx 路径,比如:

    C:\Users\HZ\Desktop\nginx-1.26.3\nginx.exe
    
    (注意不要有错,复制完整路径)

  19. 完成并保存 点确定,然后系统会让你输入一下当前用户的密码(因为要以管理员身份运行)。

保存好以后,开机自动就启动 Nginx了

注意事项总结

项目 说明
服务地址 你必须确认优考试服务始终运行在 localhost:5858
DNS 解析 Pi-hole 已将 <域名> ➝ 192.168.0.1
Nginx 必须监听本地 IP 默认就可以,80 端口无需修改
防火墙问题 需允许 Nginx 通信,或关闭防火墙测试
多服务时 可为不同域名设置多个 server 块,例如 exam.yksfile.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 配置步骤

  1. 安装 win-acme 工具
  2. 获取 SSL 证书
  3. 配置 Nginx 使用 SSL
  4. 配置 HTTP 到 HTTPS 的自动重定向

3.2 安装 win-acme 工具

Let's Encrypt 是一个免费的证书颁发机构,可以通过 win-acme 工具在 Windows 环境中方便地生成 SSL 证书。

1. 下载并安装

  1. 访问 win-acme官网
  2. 点击右上角的 Download 下载最新版本(zip格式) alt text
  3. 解压下载的文件到任意目录

2. 运行工具

  1. 进入解压后的目录
  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. 域名所有权验证

  1. 同意 Let's Encrypt 服务条款(输入 y
  2. 按提示添加 DNS TXT 记录
  3. 等待验证完成
  4. 验证完成后可以删除 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.comalt text

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.x10.0.50.x)之间的访问,通常需要路由器支持跨网段通信,或者配置静态路由。建议: - 将所有设备尽量保持在同一网段。 - 如确实需要跨网段访问,请在网关或路由器中配置路由规则。