新手入门如何给局域网做网站,3步搞定内网部署
很多刚入行做网站的朋友,一听到“部署”就头大,尤其是涉及到服务器、域名、备案这些词,感觉像看天书。其实,如果你只是想在办公室内部、家里或者学校机房里搭建一个网站供内部访问,根本不需要去纠结那些复杂的公网备案流程。备案流程一头雾水是因为你把“内网建站”和“公网建站”搞混了。今天这篇文章就是专门给新手入门看的,咱们不讲虚的,直接拆解一个真实的局域网建站项目,从需求到代码,手把手教你怎么在内网环境里跑起一个稳定的网站,彻底避开那些不必要的坑。
项目背景与需求:为什么要在局域网建站?
先说个真事。上个月,我接了一个来自某中型制造企业的单子。他们的技术总监找到我,说公司想做一个内部的产品文档展示页,给销售和设计团队用。
乍一听,这不就是个普通的静态网站吗?为什么不用现成的 SaaS 平台?
老板给了三个硬性条件:
- 数据不出内网:产品参数包含未公开的工艺细节,绝对不能上传到任何公有云。
- 访问速度要快:公司内网带宽大,局域网访问应该秒开,不能像公网那样受国际链路波动影响。
- 维护成本低:公司只有两个行政懂一点点电脑,IT 部门忙,没人专门盯着服务器,要求系统得“皮实”,坏了能自己重启最好。
这就是典型的局域网建站场景。很多新手会问:局域网里做网站,难道不备案吗?
这里有个巨大的认知误区,必须澄清:局域网网站不需要 ICP 备案。
根据《非经营性互联网信息服务备案管理办法》规定,备案是针对“通过互联网向公众提供非经营性互联网信息服务”的行为。只要你的网站 IP 地址是私有地址(如 192.168.x.x, 10.x.x.x, 172.16-31.x.x),且无法通过公网直接访问,就不受工信部 ICP 备案系统的管辖。
但是!这不代表你可以乱搞。如果未来你打算把这个内网站点通过 FRP、花生壳等内网穿透工具暴露到公网,或者你使用了某些云服务商提供的内网 IP 但允许公网解析,那就必须严格遵守工信部ICP备案系统的规定,否则就是违规运营。对于纯内网项目,我们的核心痛点不是合规,而是稳定性和易用性。
这个项目的需求很清晰:
- 技术栈:要简单,不能太复杂,方便后续非技术人员维护。
- 功能:展示产品列表、详情页、下载文档(PDF/ZIP)。
- 性能:支持 50 人同时在线,无明显卡顿。
- 部署:部署在公司内网的一台闲置旧服务器上(Windows Server 2016)。
技术选型:拒绝过度设计,选对工具事半功倍
作为新手,最容易犯的错就是“拿着锤子找钉子”。明明只需要展示图片,非要上 Spring Boot 全家桶;明明只要存个文档,非要搞个微服务架构。
针对这个局域网项目,我做了如下技术选型,这也是我推荐给大家的新手入门组合:
1. 前端:纯 HTML + CSS + 少量 JavaScript
为什么不用 Vue 或 React? 因为局域网环境不需要频繁的热更新和复杂的交互状态管理。而且,如果未来需要让行政人员帮忙改改文字、换换图片,纯静态文件直接改 HTML 是最直观的。对于设计师转前端的朋友来说,用 HBuilderX 或者 VS Code 直接写代码,所见即所得,调试也方便。
2. 后端:Nginx + 简单的 PHP 脚本
虽然前端是静态的,但我们需要一个后端来处理文件下载和简单的用户鉴权(防止外人乱闯)。
- Nginx:轻量、高性能,处理静态资源比 Apache 快得多。在局域网高并发场景下,Nginx 是首选。
- PHP:不需要复杂的数据库连接,只需要写几个简单的 PHP 脚本来控制下载权限和记录访问日志。PHP 在 Windows 服务器上部署非常简单,不需要编译。
3. 数据库:不需要
很多新手觉得没数据库就不叫网站。错! 这个项目只需要展示固定内容和下载文件,完全不需要 MySQL 或 PostgreSQL。用 JSON 文件或者简单的 CSV 文件来存储产品列表配置即可。这样不仅减少了数据库维护的成本,还避免了数据库崩溃导致网站瘫痪的风险。
4. 服务器环境:Windows Server 2016 + IIS 反向代理
公司现有的服务器是 Windows 系统,虽然 Linux 在 Web 领域更主流,但在 Windows 环境下,我们可以利用 IIS 作为反向代理,将请求转发给 Nginx。这样既复用了现有硬件,又保证了 Nginx 的高性能优势。
选型总结表:
| 组件 | 选择 | 理由 |
|---|---|---|
| 前端 | HTML5/CSS3/JS | 简单、易维护、无需构建工具 |
| 服务端 | Nginx | 高性能、轻量级、静态资源处理强 |
| 逻辑处理 | PHP 7.4 | 部署简单、脚本语言易上手 |
| 存储 | 本地文件系统 | 无需数据库、备份方便 |
| 操作系统 | Windows Server | 复用现有硬件、行政人员熟悉 |
核心实现:代码与配置详解
光讲理论没用,咱们直接看代码。这部分内容对于新手入门非常有价值,你可以直接复制去测试。
1. 目录结构规划
在服务器硬盘 D:\IntranetSite 下建立如下结构:
D:\IntranetSite
├── html # 静态资源目录
│ ├── index.html
│ ├── css
│ ├── js
│ └── images
├── php # PHP 脚本目录
│ ├── download.php
│ └── config.php
├── files # 实际存放下载文件的目录(权限严格控制)
└── nginx.conf # Nginx 配置文件
2. Nginx 配置核心片段
这是最关键的部分。我们需要配置 Nginx 监听局域网 IP,并正确路由静态资源和 PHP 请求。
worker_processes 2; # 根据CPU核心数调整events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;# 这里填写你内网服务器的IP,例如 192.168.1.100server_name 192.168.1.100;root D:\IntranetSite\html;index index.html index.htm;# 访问日志,记录谁在什么时间下载了什么,方便排查access_log D:\IntranetSite\logs\access.log;# 静态资源缓存location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;add_header Cache-Control "public, immutable";}# PHP 处理部分location ~ \.php$ {fastcgi_pass 127.0.0.1:9000; # 假设 PHP-FPM 运行在 9000 端口fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME D:\IntranetSite\php$fastcgi_script_name;include fastcgi_params;}# 安全设置:禁止直接访问 files 目录,必须通过 PHP 脚本location /files/ {deny all;}# 错误页面error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}
3. PHP 下载控制脚本
为了安全,我们不能让用户直接通过 URL 访问 files 目录。必须经过 download.php 进行验证。
config.php:
<?php
// 简单的白名单机制,实际项目中建议结合 LDAP 或域账号
$allowed_users = ['sales01', 'design01', 'admin'];
$file_root = 'D:\\IntranetSite\\files';
?>
download.php:
<?php
require_once 'config.php';// 1. 验证用户身份(这里简化处理,实际应集成域账号验证)
$username = $_SERVER['PHP_AUTH_USER'] ?? '';
if (!in_array($username, $allowed_users)) {http_response_code(403);die("Access Denied");
}// 2. 获取文件名参数
$file = $_GET['file'] ?? '';// 3. 防止目录遍历攻击
if (strpos($file, '..') !== false || strpos($file, '/') !== false) {http_response_code(400);die("Invalid File Path");
}// 4. 检查文件是否存在
$full_path = $file_root . '\\' . $file;
if (!file_exists($full_path)) {http_response_code(404);die("File Not Found");
}// 5. 记录访问日志
$log_message = date('Y-m-d H:i:s') . " - User: $username - File: $file\n";
file_put_contents('D:\\IntranetSite\\logs\\download.log', $log_message, FILE_APPEND);// 6. 发送文件
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($full_path) . '"');
header('Content-Length: ' . filesize($full_path));
readfile($full_path);
exit;
?>
4. 前端触发下载
在 index.html 中,链接指向 PHP 脚本,而不是直接指向文件:
<a href="/download.php?file=product_spec_v1.pdf" class="btn-download">下载产品规格书</a>
上线与优化:从能用到好用
代码写完只是开始,上线后的调优才是拉开差距的地方。
1. 局域网 DNS 解析优化
很多公司内网都有自己的 DNS 服务器。如果让员工输 192.168.1.100 访问网站,体验很差。
建议联系公司 IT 部门,在内部 DNS 中添加一条 A 记录:
intranet.example.com 指向 192.168.1.100。
这样员工只需在浏览器输入 http://intranet.example.com 即可访问。
2. 静态资源 CDN(本地版)
虽然是局域网,但如果文件较多,加载速度依然重要。
在 Nginx 中开启 gzip 压缩,能显著减少 HTML、CSS、JS 的传输体积:
gzip on;
gzip_min_length 1k;
gzip_comp_level 5;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/xml application/xml+rss image/svg+xml;
3. 监控与告警
局域网网站虽然不对外,但也不能“裸奔”。 我写了一个简单的 PowerShell 脚本,每 5 分钟检测一次网站状态。如果 HTTP 状态码不是 200,就发送一封邮件给 IT 管理员。
try {$response = Invoke-WebRequest -Uri "http://192.168.1.100" -TimeoutSec 5if ($response.StatusCode -ne 200) {Send-MailMessage -To "it@company.com" -Subject "网站异常" -Body "状态码: $($response.StatusCode)"}
} catch {Send-MailMessage -To "it@company.com" -Subject "网站宕机" -Body "无法连接服务器"
}
4. 安全加固
- 修改默认端口:虽然局域网风险低,但习惯要好。可以将 Nginx 监听端口改为 8080 或 8443。
- HTTPS 加密:如果条件允许,申请一个自签名证书,强制 HTTPS。虽然自签名证书浏览器会报警告,但至少数据在传输过程中是加密的,防止中间人窃听内网流量。
经验总结:新手常踩的坑与避坑指南
回顾这个项目的整个周期,有几个坑是新手特别容易踩的,务必注意:
不要混用内外网 IP: 在配置 Nginx 或 PHP 时,一定要确认使用的是内网 IP。如果误配了公网 IP,可能会导致网站意外暴露,甚至触发工信部ICP备案系统的监测机制,引发合规风险。务必检查
server_name和listen指令。文件权限问题: 在 Windows 上,Nginx 用户(通常是
IUSR或SYSTEM)需要对html和files目录有读取权限,对logs目录有写入权限。权限设置不当会导致 403 Forbidden 或 500 Error。建议使用icacls命令精确控制权限。忽视客户端浏览器兼容性: 公司内网员工使用的浏览器版本可能参差不齐。有些老式电脑还在用 IE11。如果你的前端用了最新的 ES6+ 语法或 CSS Grid,可能导致页面崩坏。 解决方案:使用
babel-polyfill或autoprefixer进行兼容性处理,或者限制最低浏览器版本,并在页面上提示升级。备份策略缺失: 局域网服务器往往被忽视备份。务必配置每日自动备份脚本,将
html、php和files目录同步到另一台 NAS 或磁盘。一旦服务器硬盘损坏,没有备份就是灾难。文档缺失: 很多项目做完就完了,没留文档。下次换个管理员,或者服务器重装,又得从头再来。 建议:编写一份简单的《运维手册》,包含:
- 如何重启 Nginx
- 如何修改产品列表
- 如何查看访问日志
- 常见问题排查步骤
这个项目最终顺利上线,运行了半年零故障。公司行政人员也能轻松更新页面内容,销售团队反馈下载速度比以前快了不少。
通过这个项目,我们不仅解决了一个具体的业务需求,更重要的是建立了一套低成本、高稳定、易维护的局域网建站标准流程。
对于新手入门来说,不要一开始就追求高并发、微服务、云原生。先把手头的小项目做稳、做通,理解每一个环节的原理,才是最快的成长路径。
最后,想问问大家:你们公司或团队内部的网站/系统,当初建站花了多少钱?是外包的还是自研的?留言说说真实价格,咱们互相参考一下市场行情,避避坑!


