本文写于 2019年03月03日,距今已超过 1 年,距 2022年10月18日 的最后一次修改也已超过 3 个月,部分内容可能已经过时,您可以按需阅读。如果图片无法显示或者下载链接失效,请给我反馈,谢谢!


Visits: 344

0 0 投票数
评分
学校华东师范大学
专业计算机科学与技术
课程服务器维护与网站建设
教师金健
年份2019年春

这是一篇非常非常非常详(啰)细(嗦)的教程

如果不是因为这是选修课的作业,我才懒得写这么详细还配截图……你可以去我博客上看看我以前写的教程,都只有核心步骤


本文首发于jxtxzzw的个人博客(https://www.jxtxzzw.com)

CentOS 系统安装 LNMP 环境并搭建个人博客请查看我的教程 https://www.jxtxzzw.com/archives/4218


使用 VPN 连接到校园网

1551604539947

打开 Windows 远程桌面,输入 IP 地址、用户名和密码

1551604104069

然后可能会遇到证书验证,点击 是 就可以了

1551604567603

打开以后是很复古的界面,以及一个服务器控制台

1551604639576

下载 XAMPP

由于学校提供的虚拟机是 Window Server 2008,为了照顾兼容性,需要使用较老版本

鄙视……都已经 2019 年了还在玩 10 年前的玩意

老师说是为了强调补丁的重要性……

(其实我觉得是学校没钱了……以及,服务器性能支持不了 40 台 Win Server 2016?那为什么不用 CentOS 呢……强烈鄙视用 Win Server 做服务器

我的观点很简单:每个系统做自己该做的事情,工作娱乐看电影打游戏就用 Windows,鄙视平时用 Linux 装 * 的人,而服务器就用 Linux,鄙视用 Win Server 的人

广告时间:欢迎访问我的个人博客:https://www.jxtxzzw.com、我的个人主页:https://www.jxtxzzw.com/resume,我用 CentOS 不也用的很好,哼!

1551604451509

点击下载按钮的 Click here for other versions 选择更多版本

找到 XAMPP for Windows,点击 More Downloads

1551604525207

找到 XAMPP Windows,点击进入,然后 找到 5.6.40 版本的 Win 32 的版本,因为服务器是 32 位的,还需要预装 VC 11,所以直接下载包括以上所有必要信息的 installer 版本

1551604780230

耐心等待下载完成

不行

等待下载的时候我要再吐槽一下

竟然用 Apache

哼!我 NGINX 哪里不好了,你要用 Apache

NGINX 还可以做负载均衡呢

我还可以开很多虚拟主机做反向代理呢

Apache 要运行多个服务就要开很多个端口,在 URL 后面跟着端口号好看么好看么,www.cst.ecnu.edu.cn:81 太丑陋了,我 NGINX 就很优雅

And,NGINX 可以 upstream 到 Docker 的端口,请求还是走 80 端口 + SSL,你 Apache 行么,垃圾……

什么?Apache 也有好的地方?我不听,就是不听,哼!

下载完成以后上传到服务器,直接在客户机右键复制,到远程桌面粘贴即可,当然也可以直接在服务器上下载……我是为了一边写教程方便截图一边操作,所以在客户机下载的

1551605007203

上传完成以后双击运行

1551605372132

如果给出提示说,因为 UAC 的启用可能会导致安装没有写入权限,那么这个时候可以关闭 UAC

1551605400333

这服务器性能也太垃圾了吧

1551605791251
1551605943026

不过我好像安装的时候没有遇到这个问题,那么不关闭也问题不大,UAC 开着毕竟多了一层保护

然后只需要勾选我们需要的组件

1551606062314

安装目录选择了 C:\website\xampp

下面给出老师给出的目录规划,我可能会按照自己的习惯调整,不过安装到哪个目录倒是无所谓

1551606146204

耐心等待安装完毕

1551606109945

安装完成后打开控制面板,选择英语

1551606419125
1551606433273

或者也可以在安装目录下的 xampp-control.exe 打开

这时左侧都是打了红叉叉的,表示服务没有在运行,我们点击 Start 开启 Apache 和 MySQL 的服务

1551606519458

然后检查是不是模块的底色变成绿色,绿色表示已经启用

1551606567098

有可能会弹出防火墙,点击允许

1551606586152

默认情况下的端口,Apache 应该用的是 80 和 443,MySQL 用的是 3306

在浏览器输入 http://localhost,应该就可以看到 XAMPP 的欢迎界面了

有可能浏览器会说不安全,这个以后再说,现在只是验证环境是否正常

如果是给出了安全性配置,可以一个一个点击添加,把这里的网址全部添加到白名单,也可以直接在服务控制台关闭 IESEC (不推荐)

1551606869405

吐槽

慢……出……了……新……的……下……限

1551607053549

然后点击 PHPInfo,或者 http://localhost/dashboard/phpinfo.php 查看 PHP 也正常了

1551607147383

访问 http://localhost/phpmyadmin 能够进入 PHPMyAdmin,说明 MySQL 也正常

1551607191139
1551607208839

接下来测试配置文件,在命令提示符输入 cd C:\website\xampp\apache\bin,然后输入 httpd -t,看到测试通过,说明语法正确

1551610379677

接下来进行作业尝试

conf\ 目录下复制 httpd.confmyconf81.confmyconf8.conf

1551610507498

安装不同的 Apache 服务器

由于端口号必须不同,所以打开 myconf81.conf,修改其中的 Listen 端口号 80 为 81,保存退出

httpd.exe -k install -f .\conf\myconf81.conf -n myconf81

对于 82 也是一样的修改和安装过程

这里的 -n NAME 是一个名字,我就用了 myconf81myconf82

1551611057379

如此就算安装成功

如果已经安装成功,再次运行就会显示

1551611088674

然后利用 httpd.exe 验证上述 2 个配置文件是否存在语法错误

显然也是没有错误的

修改上述 2 个文件,使其中 1 个存在错误

可做 2 个尝试

可以把 DocumentRoot 后面的目录修改为 "C:/website/jxtxzzw",即一个不存在的目录

或者可以尝试一些语法错误,例如 Listen 82 修改为 Listening 82

然后尝试进行验证

期望的运行结果显然应该是被发现语法错误

分别是

1551620664756

1551620694487

也可以修改成其他的错误,然后再次验证

打开 apache\conf\httpd.conf,加载 mod_dir 模块

1551613429115

确保这一行前面的 # 被删除

然后检查索引文件的优先级,越前面的优先级越高,反斜杠表示接续下一行

1551613481699

也可以解封自动索引

当用户访问目录,找不到索引文件的时候,列出目录下的相关文件

吐槽

在生产环境,强烈不推荐开着这个东西

应该直接给出 403 Forbidden

否则直接暴露真实目录结构会很危险

或者还有一种优雅的方式是直接重定向到首页

LoadModule autoindex_module modules/mod_autoindex.so 确保前面的 # 被删除了

吐槽

默认竟然是开着的

垃圾 Apache

吹爆 NGINX

下面开始作业部分

首先找到默认的根目录

默认是 DocumentRoot "C:/website/xampp/htdocs",那么可以直接在这个目录下面简历 mylove.htm 文件,然后尝试访问 http://localhost/mylove.htm

1551614409252
1551614462209

然后要求不指定目录下具体的文件就能访问

这意味着要把 mylove.htm 设置为默认索引,而且优先级可能要最高

在进行这一步之前,我们先把网站根目录转移到别的地方,以方便后面的管理

我在 C:\website\ 下面建立了 wwwroot 目录,存放各大网站的根目录

一如我自己服务器上的文件结构

1551614616893

wwwroot 是各虚拟主机的根目录,wwwcert 是 SSL 证书,wwwlogs 是日志文件

由于现在没有域名什么的,所以丢在了 .\default 文件夹下面

那么在 Win Server 上需要做什么呢

修改以下两个地方

1551614810806
1551614823802

把刚才的 mylove.htm 复制到 C:\website\wwwroot\default\ 下,然后重启 httpd 服务

浏览 http://localhost 应该可以看到了索引列表

1551614947793

接下来回到作业

设置默认索引

在配置文件中添加 mylove.htm 为最高优先级

1551615004774

重启 httpd 然后刷新页面,若文件存在,自动打开该文件,于是可以看到 mylove.htm 被自动加载

1551615243980

若文件不存在,则列出根目录下其他文件列表

这个不需要设置默认就是这个配置

为了测试,可以把这个文件删了,然后新建一些其他的文件/文件夹

1551615327416

关键的问题在于,文件不存在,则提示无权访问

也就是说 ,如果都没有在默认的索引文件中,那么,直接给出 403 Forbidden

在配置文件的这一行

1551615670599

删掉 Indexes

按照老师的说法,具体的操作是

1551615689464

不过有可能这样会导致修改以后重启 httpd 的时候出现问题

1551615739886

所以干脆删掉好了

反正 +IndexesIndexes 是一个意思,而 -Indexes 和不写也是一样的

这时,配置文件变成了 Options FollowSymLinks Includes ExecCGI,保存配置文件,然后重启 httpd

刷新浏览器,发现已经显示 403 Forbidden 了

1551615816801

这时候还不能掉以轻心

mylove.htm 复制回去,看看到底是只有默认索引不存在的时候禁止访问,还是所有情况都被禁止了

发现仍能够自动打开 mylove 页面

说明一切正常

作业完成

别名

前提是加载 mod_alias 模块

默认是加载的

下面开始作业部分

第 1 步是将 /website/data/web/webroot 作为根目录,同样的,修改 DocumentRootC:\website\data\web\webroot

website/data/web/mytest 中新建文件 test.htm

<p>这是一个别名的测试</p>
<p>欢迎访问我的个人网站</p>
<a href="https://www.jxtxzzw.com"> https://www.jxtxzzw.com </a>

当访问 http://localhost/yourtest/test.htm 时,实际访问 /website/data/web/mytest/test.htm

Alias 的设置的第一个参数是以 DocumentRoot 为根目录的 webpath,而第二个参数并不是以根目录为基础的,而是完整的系统路径(FULL/FILESYSTEM/PATH

因此,修改方式为,在 <IfModule alias_module> 下面增加一行

Alias /yourtest C:\website\data\web\mytest

1551616993220

重启 httpd,刷新,输入 http://localhost/yourtest/test.htm,发生了令人意外的事情

禁止访问?

原因是在于,webroot 以外的目录被默认禁止了

这个设置是在这里写的

1551617122902

不推荐 Allow 整个 /,所以,我们需要单独配置这个 mytest 目录的访问权限

<Directory "C:\website\data\web\mytest">
    Options FollowSymLinks Includes ExecCGI

    AllowOverride All

    Require all granted
</Directory>

重启服务,刷新,发现成功

1551617239455

端口和根目录相关的作业如下端口

号为 80 的已经好了,默认根目录就是上面设置的

下面就是要开一个 81 端口

首先复制 myconf81.conf 并打开

  • 修改 Listen 81
  • 修改 ServerName localhost:81
  • 修改 DocumentRoot "C:/website/data/web/webroot1/" <Directory "C:/website/data/web/webroot1/">

然后进入 bin 目录,用 httpd -f 命令启动 81 端口的配置文件

c:\website\xampp\apache\bin>httpd -f .\conf\myconf81.conf

这时候可能会出错,说 443 端口被重复使用了

由于测试不需要 SSL,所以可以先禁用这个

在配置文件中

# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf

注释掉 Include conf/extra/httpd-ssl.conf 这一行

1551618057670

这时候输入 http://localhost:81,就可以进入 81 端口对应的 wwwroot1 目录,可以看到目录下是空的,然后也可以看到 Apache 服务显示的 Server at localhost Port 81

1551618107263

在两个目录中新建一些文件用来测试

<p>这个文件叫做mylove.htm,是索引中优先级最高的,这个服务器运行在80端口</p>
<p>欢迎访问我的个人网站</p>
<a href="https://www.jxtxzzw.com"> https://www.jxtxzzw.com </a>
1551618371699

一切正常

目录访问权限

和1位搭档合作,你的操作客户端IP地址为ip1,搭档的是ip2

设置服务器的文档根目录(/):允许ip1访问,不允许ip2访问

设置服务器文档子目录(/mytest/):不允许ip1访问,允许ip2访问

提示:从服务器本机外的客户端访问,要注意服务器上的防火墙设置

由于我做这个作业的时候,还没有其他任何同学的进度比我快

所以没办法了

只能自己做,找不到可以合作的搭档

只能把自己的客户机,即我自己的电脑,作为 IP2,而服务器本身是作为IP1

首先,在客户机打开浏览器,输入我的服务器的IP地址,http://172.23.131.27,发现可以访问

1551618490057

语法是这样的

<Directory "C:\website\data\web\webroot"> 这个目录下

<RequireAll>
    Require all granted
    Require not ip MY_IP_2
</RequireAll>

这意思是,默认允许所有的 IP 访问,其中禁止 MY_IP_2 访问

这里有一个大坑

首先,我是查了自己本机的 IP

1551622046326

然后,我写了

<RequireAll>
    Require all granted
    Require not ip 222.66.117.91
</RequireAll>

却发现,不管是在服务器访问 http://localhost 还是在自己电脑访问 http://172.23.131.27 仍然可以访问

那么这个时候尝试禁用本机的 IP 呢?

例如

<RequireAll>
    Require all granted
    Require not ip 127.0.0.1
</RequireAll>

这是不是就是意味着从服务器访问 localhost 不能访问了?

因为禁用了 127.0.0.1 啊,也就是,本机的回环地址被禁用了

好像应该是这样一回事情

但是事实上,还是可以访问的,页面还是能打开

有点奇怪是不是?

那干脆再把 Require not ip 172.23.131.27 也禁用了吧

然而,还是可以访问

1551622358705

为什么不管怎么修改,在服务器访问 http://localhost 还是在自己电脑访问 http://172.23.131.27 仍然可以访问呢?

有点诡异是不是?

查一下访问日志

惊喜地发现,原来,根本不是用 127.0.0.1 回环地址的,也不是用 172.23.131.27 这个IP访问的

他用的是 IPv6 的 ::1

1551622433691

好的,那么大胆地修改成 not ip ::1

1551622463689

重启服务以后

终于不能访问了

1551622530440

那么,估计我的电脑也不是用 222 开头的那个 IP 去访问的

究其原因,可能是挂了 VPN 的缘故

222 是挂上 VPN 以后 WAN 的 IP,而 172 是LAN 的 IP

访问内网,用的肯定是 LAN 的 IP,所以应该禁用的是这个

1551622781699

在日志信息中可以看到,我其实是用 172.20.144.193 这个 LAN 口 IP 访问的,而不是 222.66.117.91 这个 IP 访问的

<RequireAll>
    Require all granted
    Require not ip 172.20.144.193
</RequireAll>
1551622852342
1551622875873

终于正常了

这个坑不可谓不大

但是我估计,如果是直接找了组队的队友,都是从服务器访问的,可能用的都是内网的 IPv4,就都没有问题了

或者不是挂 VPN 而是直接连校园网,那么估计也是用的内网 IP

我没有再尝试

但是如果校园网下,或者都是服务器,但是访问却没有经过 IPv4,那么可能就需要查 log,看看到底用的是什么奇怪的 IP(也许是 IPv6)访问的

这个问题解决了以后

设置服务器文档子目录(/mytest/):不允许ip1访问,允许ip2访问

这个作业也就简单了

不允许 IP1 访问,也就是不允许本机访问,从上面的分析可知,禁用 127.0.0.1 或者禁用 172.23.131.27 都是没用的,需要禁用 ::1

而允许 IP2 访问,granted 就可以了

1551623307500
<Directory "C:\website\data\web\webroot\mytest">
    <RequireAll>
        Require all granted
        Require not ip ::1
    </RequireAll>
</Directory>
1551623656290

对于 IP1,也就是本机的 IP,localhost 可以访问,而 localhost/mytest 不能访问

对于 IP2,也就是客户机的 IP,自然可以访问 localhost/mytest

映射用户目录和日志控制比较简单,只需要按照提示解封相关模块,并且设置日志的存放目录、命名格式和循环条件即可,而且没有作业,从略

0 0 投票数
评分
发表留言
订阅评论
提醒
guest

在点击发表评论按钮时,网络请求的数据包含浏览器版本、操作系统版本和 IP 地址;您的网络服务提供商、雇主或学校、政府机构可能会看到您的访问活动;根据浏览器默认行为、操作系统设置和安全防护软件的设置不同,您的浏览器可能会也可能不会在本地 Cookies 缓存您输入的用户名、邮箱以便下次评论使用。

请对自己的言行负责。

您想以什么身份发表评论
邮箱将在您的评论被回复时给您通知
(可选)如果您也有个人网站,不妨分享一下
我对这篇文章的评分
这篇文章给您带来多大帮助
0 评论
内联反馈
查看所有评论