☰
Windows与Ubuntu下的IIS、Apache和FTP服务器配置指南
2026/9/30 13:27:25 网站建设 项目流程

简介:南京邮电大学计算机网络实验一完整实验报告,面向计算机专业学生及需要完成同类网络操作系统配置实验的读者。资源以Windows Server 2019与Ubuntu 16.04为载体,系统展示Web服务器(IIS、Apache+PHP)与FTP服务器(包括vsftpd)的安装、配置与测试全过程,同时覆盖本地用户、本地组的创建及权限分配,以及基于学号+姓名的访问验证;实验环境涉及PC、VMware虚拟化软件及两个操作系统,步骤涵盖添加网站、绑定物理路径、配置FTP站点、测试访问等关键操作,报告中还提供了命令行与图形化两种操作方式的对照说明。压缩包内为1个doc文档,仅1.69MB,文件组织清晰,按实验目的、实验环境、实验原理与步骤、实验小结的结构展开;报告的小结部分专门针对Web服务器无法安装、条件不足等问题给出了实际解决过程,并结合常见网络服务配置痛点梳理了排错思路,同时提到了对网络协议、网络安全的理解,有助于提升综合实验能力。该资源已有328人学习,适合作为实验预习、报告参考和服务器配置快速上手的模板。

1. 这门课装在虚拟机里的,是被低估的服务器三件套

南邮计网实验一,报告题目叫「网络操作系统的安装与配置」,实际是把 Windows Server 2019 和 Ubuntu 16.04 两套系统上的 Web 与 FTP 服务各搭一遍,最后用「学号 + 姓名」验证。翻车的地方从来不在点下一步的向导里,而在装完之后的默认文档、NTFS 权限、防火墙放行和身份验证这些看不见的位置。这份资源把完整流程拆成了可照做的步骤,从本地用户与本地组的创建,到 IIS、Apache、vsftpd 的安装配置,每一步都带验证方法。适合正在做实验的在校生,也适合想用一个下午把 Windows 和 Linux 两侧服务器基本操作补齐的一线从业者。

2. Windows Server 2019 开局:用户组、IIS 安装与第一个网站

2.1 为什么先建本地用户和本地组

实验要求第一条是「掌握 Windows Server 2019 工作环境的配置,本地用户以及本地组的创建与配置」。很多同学上手就装 IIS,等到网页登录功能做不出来,才发现没有可用的本地账号,又掉头回来补建。合理的顺序应该是先把用户和组建好,再装 Web 服务,因为 IIS 的身份验证和 FTP 的授权规则都要引用本机用户和组,先建后配能省掉大半排错时间。

我用「运行」里敲lusrmgr.msc打开本地用户和组,也可以从「计算机管理 → 系统工具 → 本地用户和组」进去。新建用户stu2023001,密码按实验统一规范设成满足复杂度要求的强密码,创建时勾掉「用户下次登录时须更改密码」,勾上「密码永不过期」,避免实验做到一半账号过期导致登录直接失败。再新建一个组webusers,把stu2023001加进去。

这一步的意义在于权限边界:后面 IIS 网站的授权规则只允许webusers组的用户访问,FTP 站点的授权也按这个组来,后续加人只要往组里塞账号,不用逐个站点改。如果你的实验要求里还有「不同用户不同权限」的说法,可以在组里放两个用户,给 FTP 写权限时单独按用户授权,体现出用户级管理。另外,虚拟机环境里我习惯先把网卡配成静态 IP,避免 DHCP 导致重启后 IP 漂移,后面 IIS 绑定和 FTP 访问都对着固定地址来,省很多事。

提示:实验要求的「用户登录」功能,建议用「基本身份验证 (Basic Authentication)」而不是匿名访问,否则网页谁都能打开,用户管理根本体现不出来。

2.2 添加 IIS 角色:最小功能选型

Windows Server 2019 装 IIS 的入口是「服务器管理器 → 添加角色和功能」,向导一大半是点「下一步」,核心就在「服务器角色」页面勾选「Web 服务器 (IIS)」。这里有一个经典坑:FTP 服务是 Web 服务器角色下面的子项,默认不勾,很多人装完 IIS 后找不到 FTP,只能重新进向导补装,浪费时间。我按实验要求整理了一份勾选清单:

功能路径是否勾选作用
Web 服务器 → 常见 HTTP 功能 → 静态内容勾提供静态页面支持
Web 服务器 → 常见 HTTP 功能 → 默认文档勾决定访问 IP 时优先加载哪个文件
Web 服务器 → 运行状况和诊断 → 日志记录勾排错时看日志的依据
Web 服务器 → 安全性 → 基本身份验证勾网页用户登录功能
FTP 服务器 → FTP 服务勾第四步的 FTP 一起装掉
FTP 服务器 → FTP 扩展性按需用 FTP 用户隔离才需要

安装完成后先验证 IIS:浏览器访问本机 IP 或localhost,看到默认欢迎页说明安装成功。如果访问直接超时,先别怀疑 IIS,去「Windows Defender 防火墙 → 允许的应用」看「万维网服务 (HTTP)」是否放行,这个排查顺序能省掉大量无谓重装。

2.3 添加网站:绑定、物理路径与学号页面

打开 IIS 管理器,命令行输inetmgr即可。左侧「网站」右键「添加网站」,网站名称填web_stu,物理路径选C:\inetpub\wwwroot\web_stu(先建好目录),绑定类型 HTTP,端口 80,主机名留空。主机名留空意味着本机所有 IP 的 80 端口都走这个站点,对虚拟机上只有一张网卡的实验环境完全够用。

在物理路径下写index.html:

<!DOCTYPE html> <html> <head><meta charset="utf-8"><title>计算机网络实验</title></head> <body> <h1>计网实验一 Web 服务</h1> <p>学号:2023001 姓名:张三</p> </body> </html>

逻辑说明:IIS 收到请求后按「默认文档」列表的顺序找文件,默认顺序里有 default.htm、default.asp、index.htm、index.html 等,文件名必须能对上,否则即使文件在目录里也会返回 403.14。

参数说明:charset=utf-8必须写。Windows 记事本默认保存为 ANSI(GBK),网页不加编码声明很容易乱码,用记事本另存为时把编码选成 UTF-8 再存。写完在 IIS 里选中站点,右键「浏览」,浏览器能正常显示学号姓名,Web 服务这个实验点就算通了。

2.4 基本身份验证:让登录功能真正生效

静态页面只能证明 IIS 跑通,实验里的「用户登录」要落在身份验证模块上。在 IIS 管理器选中站点,双击「身份验证」,把「匿名身份验证」改为「禁用」,把「基本身份验证」改为「启用」。操作完再访问网站,浏览器会弹出账号密码框,输入第 2.1 节建的stu2023001就能进;故意输错或点取消,会看到 401 未授权页面,这是登录功能生效的直接证据。

有两个点容易卡住:一是基本身份验证用的是「本地用户」,不是微软账户,建号时别选成 Microsoft 账户登录;二是如果登录框没弹出反而直接 403,检查站点的「授权规则」里有没有允许该用户,以及物理路径的 NTFS 权限里IUSR和IIS_IUSRS是否有读取权限。我一般先查 NTFS 权限再查授权规则,因为权限问题是静默的,通常表现为 403 而不是 401,方向错了会查很久。

3. Ubuntu 16.04 下的 Apache + PHP:从 apt 安装到页面能跑

3.1 安装命令与依赖关系

Ubuntu 16.04 的软件源里直接有 apache2 和 php 的现成包,不需要源码编译,这是 Linux 侧比 Windows 侧省事的地方。我的安装命令是两条:

sudo apt-get update sudo apt-get install -y apache2 php libapache2-mod-php

逻辑说明:apt-get update先刷新软件源索引,跳过这一步容易装到过期版本或拉取 404;apache2是 HTTP 服务本体,php是 PHP 解释器,libapache2-mod-php是让 Apache 以模块方式加载 PHP 的衔接包,三个缺一不可。

参数说明:-y表示自动确认安装提问,实验环境里没有交互需求,可以放心用。这套命令在 Ubuntu 18.04、20.04 上同样适用,只是 PHP 版本会从 7.0 升到 7.2、7.4,包名不变;Debian 系其他发行版也基本通用。

装完立刻做三连验证:

apache2 -v php -v systemctl status apache2

apache2 -v看版本号和编译时间,php -v确认解释器能独立运行,systemctl status apache2看服务是否 active (running)。三条都通过,说明安装这一步完成了,接下来才是配置。

3.2 站点根目录与权限配置

Apache 的默认站点根目录是/var/www/html,虚拟主机配置在/etc/apache2/sites-available/000-default.conf。实验要求「完成 web 服务器的搭建」,直接复用默认站点是最稳的,不用新建虚拟主机文件,把精力放在目录权限上。

sudo chown -R www-data:www-data /var/www/html sudo chmod -R 755 /var/www/html

逻辑说明:www-data是 Apache 的运行用户,把站点目录所有者改成它,Apache 才有读取权限。如果目录所有者是 root 而权限是 700,浏览器访问会直接 403 Forbidden,这个坑在 Ubuntu 上极常见,因为 apt 装的 Apache 默认文档目录是 root 所有。

参数说明:755 表示所有者可读可写可执行,组用户和其他用户只读可执行,这是 Web 目录的常规权限。实验只需要读,不需要在 Web 目录里通过网页写文件,所以 755 是最合适的选择。如果你的实验增加了「网页上传文件」的要求,需要给特定子目录改成www-data可写,那是另一个话题,别在基础配置时提前放开。

3.3 学号页面写入与 curl 验证

在/var/www/html下创建index.php,用nano或vim写:

<?php header('Content-Type: text/html; charset=utf-8'); echo "<h1>南邮计网实验一</h1>"; echo "<p>学号:2023001 姓名:张三</p>"; echo "<p>PHP 版本:" . phpversion() . "</p>"; ?>

逻辑说明:用 PHP 动态输出比纯 HTML 更能证明「PHP 服务安装成功」,phpversion()会把当前 PHP 版本打出来,页面上一眼就能确认 Apache 确实在执行 PHP,而不是把文件当纯文本吐出来。

参数说明:header('Content-Type: text/html; charset=utf-8')是防止中文乱码的最稳写法,虽然 Ubuntu 终端默认 UTF-8,但浏览器端显式声明能避免各种编码猜测带来的问题。文件名必须是index.php,因为默认文档列表里 index.php 排在 index.html 之前。

保存后重启并验证:

sudo systemctl restart apache2 curl -I http://127.0.0.1/ curl http://127.0.0.1/ | grep -E "学号|PHP"

curl -I看响应头,重点确认HTTP/1.1 200 OK和X-Powered-By: PHP/7.x这一行存在;curl拉正文并用grep过滤出学号和 PHP 版本,能同时命中说明 PHP 执行链路通了。如果响应头里没有 X-Powered-By 而正文直接吐源码,回到 3.1 节检查libapache2-mod-php是否安装,并确认 PHP 模块已启用:apache2ctl -M | grep php,没有输出就用a2enmod php7.0启用再重启服务。

4. FTP 服务双平台落地:IIS FTP 与 vsftpd 的配置对照

4.1 Windows 上基于 IIS 的 FTP 站点

Windows 上 FTP 有两种来源:独立安装的「FTP 服务器」角色,以及集成在 IIS 里的 FTP 发布服务。实验要求写的是「简单安装」,我建议用第 2.2 节一起装好的基于 IIS 的 FTP,最大好处是用户体系直接复用本地用户,不用再配一遍账号。

操作路径:IIS 管理器 → 左侧「网站」右键 → 添加 FTP 站点 → 名称ftp_stu,物理路径C:\inetpub\ftproot,绑定 IP 选「全部未分配」,端口 21,SSL 设置选「无 SSL」,身份验证勾「基本」,授权允许指定用户stu2023001,权限同时勾「读取」和「写入」。

参数说明:端口 21 是 FTP 控制连接默认端口,如果 21 被占用可以换 2121,但客户端地址必须写成ftp://IP:2121,实验报告里别忘记标注,否则复查时你会对着默认端口反复确认。「允许写入」必须勾,否则后面创建学号文件夹会报 550 Permission denied,这是写操作被服务端拒绝的典型错误码。

站点建好后,在C:\inetpub\ftproot下新建文件夹2023001张三,这是实验里「在文件夹中创建学号+姓名文件」的落点。然后从另一台机器或同机客户端访问ftp://IP,输入账号密码,能看到这个文件夹,FTP 的实验点就成立了。

4.2 Ubuntu 上 vsftpd:核心参数对照

Linux 侧 FTP 用 vsftpd,配置直观、安全选项明确,实验报告里也好解释。安装加备份:

sudo apt-get install -y vsftpd sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak

逻辑说明:备份是必须动作,vsftpd 对参数拼写零容忍,一个字符错服务就起不来,备份之后可以随时cp还原,不用重装。

编辑/etc/vsftpd.conf,实验场景我收敛成这几行:

参数值作用与坑点
anonymous_enableNO关闭匿名登录,安全底线
local_enableYES允许本地系统用户登录
write_enableYES允许写操作,没它 mkdir 直接 550
local_umask022新建文件默认 644、目录默认 755
chroot_local_userYES把用户锁在家目录里
allow_writeable_chrootYES必须和 chroot 成对,否则 500 OOPS

这里最容易被忽略的是最后两行:新版 vsftpd 出于安全考虑禁止「chroot 后根目录可写」,而实验用户家目录默认属主可写,不加allow_writeable_chroot=YES就会出现 5.5 节那个典型报错。chroot_local_user=YES可以按实验要求决定加不加,但一旦加了,allow_writeable_chroot=YES基本就是必选项。

改完应用配置:

sudo systemctl restart vsftpd sudo systemctl status vsftpd

服务起不来的话,用journalctl -u vsftpd -n 20拉日志看具体报错,十有八九是参数拼写错误或行尾多了空格,这类问题日志里都会明说,不用瞎猜。

4.3 客户端连接与文件夹验证

在 Ubuntu 本机验证 vsftpd,命令行 ftp 客户端就够用:

ftp 127.0.0.1 # 用户名输入 stu(Ubuntu 的本地用户) # 输入对应密码 ftp> pwd ftp> mkdir 2023001张三 ftp> ls ftp> bye

逻辑说明:mkdir对应 FTP 协议的 MKD 命令,vsftpd 收到后在用户家目录创建文件夹;ls列出刚建的目录,证明写入与读取都正常。

参数说明:如果pwd显示/home/stu,说明 chroot 生效;如果登录时报500 OOPS,按 4.2 节的allow_writeable_chroot=YES排查;如果mkdir报 550,检查write_enable=YES是否生效以及家目录属主是不是该用户。跨平台验证我习惯用 FileZilla,Windows 资源管理器直接输ftp://IP也可以,但有两点心里有数:中文文件夹名在 Windows 资源管理器里可能显示乱码,那是 GBK 和 UTF-8 的显示差异,不影响实际存储;另外 Windows 资源管理器默认可能用被动模式,虚拟机网络下偶尔需要切到主动模式才能稳定传输。

5. 避坑专章:这个实验最容易翻车的五个点

5.1 IIS 安装失败提示「条件不足」

现象:服务器管理器添加角色时向导报「无法安装,条件不足」,安装进程回滚到初始状态,重试多次依旧,原实验报告里记录的也是这个情况。

原因:本质是服务器缺少前置组件。最常见的是 .NET Framework 3.5 功能未启用,或系统更新没跑完,精简版系统镜像还会缺一堆依赖,向导检查环境不通过就直接回滚。

解决:重新打开「添加角色和功能」,先把「.NET Framework 3.5 功能」装上(会提示需要联网或系统镜像源),然后跑一遍完整 Windows 更新,最后再装 IIS。如果用的是离线精简镜像,换回标准版镜像重装系统是最省时间的选择,别跟环境死磕。

5.2 浏览器访问网站返回 403.14

现象:IIS 已安装,文件也放进目录了,访问站点却返回 403.14 Forbidden,页面提示「Web 服务器被配置为不列出此目录的内容」。

原因:默认文档列表里没有和实际文件名匹配。IIS 找了一圈没找到默认页,又禁止目录浏览,就抛 403.14。常见诱因是文件被存成index.HTML、新建文本文档.txt,或者根本没存进站点物理路径。

解决:确认文件名是index.html而不是其他后缀;在 IIS 站点「默认文档」里把index.html加到列表并上移到第一位;再用「内容视图」确认文件真的在站点物理路径下,而不是在桌面或下载文件夹里。三处都对了,403.14 基本消失。

5.3 PHP 源码被浏览器原样输出

现象:Ubuntu 下访问index.php,浏览器显示的是<?php echo ...的源码文本,而不是执行后的页面。

原因:libapache2-mod-php没装,或模块装了但没启用,Apache 把 .php 后缀当普通文本处理,直接送进响应体。

解决:sudo apt-get install -y libapache2-mod-php,然后sudo a2enmod php7.0(版本号按php -v实际结果填),最后systemctl restart apache2。重启后先apache2ctl -M | grep php看到模块输出,再刷新页面,两步缺一不可。

5.4 FTP 客户端连接被拒或超时

现象:Windows 防火墙开启的情况下,FTP 客户端连接报「连接被拒绝」或一直连接超时,而服务端明明显示 FTP 服务在运行。

原因:Windows 防火墙没放行 21 控制端口,或只放行了程序没放行端口。更隐蔽的是被动模式下的数据端口(1024-65535 随机范围)没放行,控制连接建立后数据通道打不通,客户端就卡在列表目录那一步。

解决:在「高级安全 Windows 防火墙」新建入站规则放行 TCP 21,再允许「FTP 服务器」程序通过防火墙。如果客户端坚持用被动模式,还需要在 IIS 的 FTP「防火墙支持」里配置外部 IP 和端口范围;实验场景最省事的做法是把 FileZilla 切到主动模式,绕过随机端口问题。

5.5 vsftpd 登录报 500 OOPS:writable root inside chroot

现象:Ubuntu 本地用户能通过认证,但一登录就断开,服务端日志显示500 OOPS: vsftpd: refusing to run with writable root inside chroot()。

原因:vsftpd 2.3.5 之后的安全策略禁止「chroot 后根目录可写」,而实验用户家目录默认是属主可写的,直接触发防护。

解决:在/etc/vsftpd.conf加一行allow_writeable_chroot=YES,重启 vsftpd。另一种思路是chmod a-w /home/用户名去掉家目录写权限,但这样 FTP 里mkdir会失败,实验要求明明要建文件夹,所以加配置项才是正解,别用 chmod 绕。

6. 收尾的验证链:一条命令确认四个服务

实验做完不是「截图交差」就结束了。我会在最后统一跑一遍验证,Windows 和 Ubuntu 两侧各用一组命令,把服务状态、端口监听和页面可达性一次看齐。

Windows 侧用 PowerShell:

Get-Service W3SVC,FTPSVC | Select-Object Name,Status Get-Website | Select-Object Name,State,PhysicalPath

逻辑说明:W3SVC是 IIS 核心服务,FTPSVC是 FTP 服务,两者同时显示 Running 才能说明 Windows 侧两个服务都活着;Get-Website输出站点状态和物理路径,排查文件放错位置时一查就知道。

Ubuntu 侧用 bash 一条命令做状态、端口、软件包三查:

systemctl is-active apache2 vsftpd ss -tlnp | grep -E ":80|:21" dpkg -l | grep -E "apache2|php7|vsftpd" | awk '{print $2, $3}'

逻辑说明:systemctl is-active直接回显 active 或 inactive,一眼判断服务;ss -tlnp确认 80 和 21 端口在监听,端口没监听说明服务配置有问题;dpkg -l列出三个软件包的版本,证明「装的是什么版本」而不是靠记忆。

服务状态、端口、页面、文件四条全过,我再回去对照实验报告逐条打勾:Web 服务能访问、登录生效、学号姓名页面显示、两个 FTP 里有对应文件夹。这个习惯是我被 403.14 和 500 OOPS 各坑过一次之后才养成的——每做完一个服务,先看状态和端口,再看页面和文件,最后截图。顺序反过来,很容易把「服务没起」错判成「配置写错」,白改半小时。从那以后我每次做服务器配置都强制走一遍「状态 → 端口 → 页面 → 文件」的验证链,写实验报告也快很多。这份资源里最有价值的不是某条命令,而是这条从安装到验证的完整链路,希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询