基于 Windows Server 2003 搭建 Web 服务
概要
系统
Windows Server 2003 r2 enterprise with sp2 x86(使用 VMware workstaion 搭建的虚拟机)
软件
1 | httpd-2.4.23-win32 |
先前的搭建方式都是使用的 XAMPP 之类的集成环境,十分便捷。但考虑到各种因素,决定尝试一下手动搭建并配置一次。(由于其他版本的 Windows Server 还没有进行安装和配置,故本次选择了已经安装好的 Windows Server 2003 R2 来进行演示,其他版本也是大同小异)
注:本篇所涉及的软件均来源于各自的官方网站,若需为安全性考虑,建议根据官方提供的哈希值对文件进行校验。校验方法在此篇不会提及,请自行搜索。
下载
下载 Apache httpd 应用程序及 fcgi 模块
访问 https://www.apachelounge.com/download/VC10/ 下载对应系统版本的程序包即可。
下载 php 应用程序
直接访问 https://windows.php.net/downloads/releases/archives/ 配合 Ctrl + F 下载 php 5.4.9 nts 版。
(nts 指 None-Thread Safe,即非线程安全,详见PHP安装包TS和NTS的区别 及 PHP 运行模式)
Note:从 PHP 5.5.0 开始不再支持 Windows XP/2003。
下载 MySQL 应用程序
访问 https://downloads.mysql.com/archives/community/ 直接选择需要的版本进行下载,有安装包或压缩包两种选择(安装包的配置更便捷一点),本篇是后者。
下载 phpMyAdmin 数据库管理工具
访问 https://www.phpmyadmin.net/files/ 配合 Ctrl + F 找到自己需要的版本,本篇根据 PHP 及 MySQL 版本的兼容性,选择了 4.4.15.10 版本。
下载 VC 10 运行库
访问 https://www.microsoft.com/en-us/download/details.aspx?id=8328,直接点击下载安装即可。
安装
上传文件至服务器
将先前的文件上传至服务器的磁盘中,考虑到系统磁盘重置的可能性,可以将程序部署在其他磁盘。本篇中所使用的系统只建立了 C 盘,故不演示。
配置 Apache
进入 Apache 根目录下的 conf 文件夹,编辑 httpd.conf 配置文件。
先是修改程序的默认路径,在编辑器中按下 Ctrl+H 打开 替换 窗口,填入默认的内容和想要修改的内容后点击 全部替换 即可。(Windows 自带的记事本也是一样)
接下来修改 Servername,使用 Ctrl+F 输入 Servername 并查找。出现 #serverName www.example.com:80
,将前边的 # 删除。(Windows 自带的记事本也是一样)
再然后是 DocumentRoot,及随后一行的 Directory 。由于先前执行了全部替换的操作,这里的路径也已经被修改。
最后是 Require all,这一步很关键。如果忘记设置,那么访问网站一直都会是 HTTP 403 状态。
(本段的部分设置参考了网络上的配置方法)
配置项详解
ServerRoot | 程序的根目录 |
ServerName | 主机名称 |
DocumentRoot | 站点的根目录 |
Require | 是否允许请求 |
接下来使用管理员权限打开 cmd,进入 Apache 程序目录下的 bin 文件夹,输入
1 | httpd.exe -k install -n "Apache-2.4" |
(-n 后面跟着的是服务名称,可以不设置,默认为 Apache2.4。安装完后可以在 services.msc 中查看并设置。)
最后,使用 net start Apache-2.4
启动 Apache 服务,访问 IP 地址。
启动服务 net start 服务名称
关闭服务 net stop 服务名称
最后,根据需求设置 ServerName,配合系统的 hosts 文件可以进行本地解析。附使用效果:
附表(摘自网络):
Visual Studio (Vs) 版本 | Visual C++ (Vc) 版本 |
---|---|
Visual Studio 6 | vc6 |
Visual Studio 2003 | vc7 |
Visual Studio 2005 | vc8 |
Visual Studio 2008 | vc9 |
Visual Studio 2010 | vc10 |
Visual Studio 2012 | vc11 |
Visual Studio 2013 | vc12 |
Visual Studio 2015 | vc14 |
Visual Studio 2017 | vc15 |
Visual Studio 2019 | vc16 |
注:vc10 之后的版本不再支持 xp / 2003 等系统。
配置 FastCGI 模块
从下载的 mod_fcgid-2.3.9-win32-x86.zip
压缩文件中提取 mod_fcgid.so
并移动到 apache\modules
目录下。
打开 conf/httpd.conf
配置文件添加 FastCGI 模块,输入如下代码:
1 | LoadModule fcgid_module modules/mod_fcgid.so |
接下来,再重新配置一下网站根目录,根据自己的需求改写,也可以不更改。
图中标识出的 Indexes
决定了当找不到首页文件时是否允许直接显示根目录下的文件,若是处于安全考虑,不想让其显示,删除即可。(禁止目录索引并不只有这一种办法,本文末尾提供了一些可供参考的文章,详见)
而 ExecCGI
则是设置为以 CGI 模式运行。
设置首页文件为 index.php index.htm index.html
,也可以添加其他的文件名。
1 | <IfModule dir_module> |
配置 PHP
进入 PHP 程序根目录,视情况选择 php.ini-development
or php.ini-production
,将其重命名为 php.ini
(本篇选择的是php.ini-production)。
并用编辑器打开,Ctrl + F 查找 extension_dir
删除前面的 “;” 以取消注释,修改 “ext” 为 php/ext 的绝对目录,如 C:/wamp/php/ext
。
接着,根据下图开启所需要的模块,图中的左侧有黄色底色标记。将前面的 “;” 删除即可。
设置默认编码
将 PHP 添加到系统的环境变量中,下次可以在命令提示符里进行部分设置。(注意!不要省略最前端的 “;”号,除非前面已经有了一个)
1 | ;C:/wamp/php;C:/wamp/php/ext |
添加虚拟主机
这一步可以留在最后做。
1 | <VirtualHost *:80> |
配置 MySQL
1 | C:\> mysqld --initialize-insecure // 初始化 |
复制 my-small.ini
文件,重命名为 my.ini
。打开并找到 [mysqld]
新增两行内容:
1 | basedir=C:\wamp\mysql // MySQL 安装目录 |
如果服务启动失败,提示找不到文件之类的。有可能是路径问题,修复则使用 “注册表编辑器”。按下 Windows + R
,输入 regedit
。
并依次展开 我的电脑\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL
,修改 ImagePath
的值为 MySQL 的正确安装目录。如:
1 | "C:\wamp\mysql\bin\mysqld" MySQL |
设置数据库密码
方法一:
1 | C:\> mysql -u root -p |
方法二:
1 | C:\> mysqladmin -u root -p password yourpassword |
添加环境变量
在 Path 的末尾输入 ;C:\wamp\mysql\bin
。
测试
数据库连接
在网站根目录下创建 index.php
文件,输入如下代码:
1 |
|
摘自 (runoob.com)
卸载
Apache
1 | C:\wamp\apache\bin> httpd.exe -k uninstall -n "Apache-2.4" |
MySQL
1 | C:\> net stop mysql // 停止服务 |
之后删除环境变量及数据文件夹。
附录
遇到的问题
- 将文件路径
C:/wamp/...
写为C:\wamp\...
。 - Apache-2.4 服务无法启动。 - 发生服务特定错误: 1。
- 页面文字乱码。
解决方法
问题二出现的原因往往很可能是因为问题一,将 /
写成了 \
,建议在复制语句到配置文件后仔细检查一下。
如果出现了本篇没有涉及到的问题,可以试着用时间查看器配合 Apache 的错误日志来排错。
事件查看器:
Apache 错误日志:
默认的页面编码可以在 php.ini
中设置,也可以使用 header() 来单独设置页面的编码方式。
1 | header("Content-type: text/html; charset=utf-8"); |
又或者,插入 HTML 中的 <META> 标签。
1 | <meta charset="utf-8"> |