当你输入
www.baidu.com并回车的那一瞬间,背后发生了什么?从 B/S 架构的概念,到 Apache 服务器的安装配置;从一台服务器跑多个网站的虚拟主机技术,到完整部署论坛、博客、电商、网校四大动态网站系统——本文将带你从零搭建完整的网站服务。学完本章,你将能够独立部署 LAMP 架构,并上线自己的网站。
基础概念
什么是 B/S 架构
B/S(Browser/Server):浏览器/服务器架构。用户通过浏览器访问服务器上的网站,无需安装专用客户端软件。
B/S vs C/S 对比:
| 对比维度 | B/S 架构 | C/S 架构 |
|---|---|---|
| 全称 | Browser / Server | Client / Server |
| 客户端 | 浏览器(Chrome、Firefox) | 需要安装专用软件(QQ、微信) |
| 更新维护 | 只需更新服务器端 | 客户端和服务器都要更新 |
| 跨平台 | 任何有浏览器的设备都能访问 | 需要开发不同平台的客户端 |
| 示例 | 淘宝网页版、百度 | QQ 客户端、微信电脑版 |
现代互联网的趋势是从 C/S 向 B/S 转变——越来越多的服务通过浏览器提供。
核心名词
| 名词 | 全称 | 说明 |
|---|---|---|
| HTML | HyperText Markup Language | 超文本标记语言,网页的基本构成语言 |
| 网页 | Web Page | 使用 HTML、PHP、Java 等语言格式编写的文件 |
| 主页 | Home Page | 用户访问网站时看到的第一个页面 |
| 网站 | Website | 多个网页组合而成的一台网站服务器 |
| URL | Uniform Resource Locator | 统一资源定位符,访问网站的地址 |
URL 结构拆解
http://www.baidu.com:80/1.html
│ │ │ │
│ │ │ └── 资源路径(文件名)
│ │ └────── 端口号(HTTP 默认 80)
│ └─────────────────── 域名(服务器地址)
└────────────────────────── 协议(HTTP/HTTPS/FTP)
更多示例:
http://www.baidu.com:80/1.html ← HTTP 网页
ftp://192.168.100.121:21/1.txt ← FTP 文件
https://www.google.com:443/search ← HTTPS 安全网页
网站架构:LAMP
LAMP 是最经典的 Web 服务器架构组合。
| 字母 | 组件 | 角色 | 说明 |
|---|---|---|---|
| L | Linux | 操作系统 | 系统平台 |
| A | Apache | Web 服务器 | 处理 HTTP 请求,提供网页 |
| M | MySQL/MariaDB | 数据库 | 存储和管理数据 |
| P | PHP | 中间件/编程语言 | 连接 Web 服务器和数据库的桥梁 |
┌─────────────────────────────────────────┐
│ 用户浏览器 │
└──────────┬──────────────────────────────┘
│ HTTP 请求
↓
┌─────────────────────────────────────────┐
│ L — Linux(操作系统平台) │
│ ┌─────────────────────────────────────┐│
│ │ A — Apache(接收请求,返回响应) ││
│ │ ┌─────────────────────────────────┐││
│ │ │ P — PHP(处理业务逻辑) │││
│ │ │ ┌─────────────────────────────┐│││
│ │ │ │ M — MySQL(存取数据) ││││
│ │ │ └─────────────────────────────┘│││
│ │ └─────────────────────────────────┘││
│ └─────────────────────────────────────┘│
└─────────────────────────────────────────┘
静态站点:Apache

Apache 基础知识
| 项目 | 值 | 说明 |
|---|---|---|
| 官网 | www.apache.org | Apache 软件基金会 |
| 软件包名 | httpd | CentOS 中的包名 |
| 服务端口 | 80/tcp (HTTP)、443/tcp (HTTPS) | Web 服务默认端口 |
| 主配置文件 | /etc/httpd/conf/httpd.conf | 核心配置 |
| 子配置文件 | /etc/httpd/conf.d/*.conf | 扩展配置(虚拟主机等) |
| 默认主目录 | /var/www/html | 网站源代码默认位置 |
版本建议:建议使用 Apache 2.4 及以上版本。
安装 Apache
# 安装 httpd
[root@localhost ~]# yum -y install httpd
# 启动服务
[root@localhost ~]# systemctl start httpd
# 查看服务状态
[root@localhost ~]# systemctl status httpd
# 设置开机自启
[root@localhost ~]# systemctl enable httpd
# 关闭防火墙(测试环境)
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
# 查看 Apache 版本
[root@localhost ~]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: May 30 2023 14:01:11
验证安装:
打开浏览器,访问 http://服务器IP,看到 Apache 测试页面即表示安装成功。
虚拟主机(VirtualHost)
什么是虚拟主机
虚拟主机 的作用:在一台物理服务器上运行多个网站。
基于主机名的虚拟主机:
同一台服务器(同一个 IP),通过不同的域名区分不同的网站:
www.a.org → 网站 A
www.b.org → 网站 B
实验目标
| 网站域名 | 网站资源存放目录 |
|---|---|
www.a.org | /var/www/html/a.org |
www.b.org | /b.org |
注意:
/b.org目录不在默认的/var/www/html下,需要额外配置目录权限。
配置 www.a.org 站点
步骤 1:准备网站源码目录
[root@web ~]# mkdir /var/www/html/a.org
[root@web ~]# vim /var/www/html/a.org/index.html
输入网页内容:
<html><body><h1>a.com.com.com</h1></body></html>
步骤 2:创建网站配置文件
[root@web ~]# vim /etc/httpd/conf.d/a.org.conf
<VirtualHost *:80>
ServerName www.a.org
DocumentRoot /var/www/html/a.org
</VirtualHost>
| 指令 | 说明 |
|---|---|
<VirtualHost *:80> | 定义虚拟主机,监听所有 IP 的 80 端口 |
ServerName | 网站域名 |
DocumentRoot | 网站根目录(源代码存放位置) |
步骤 3:检测配置并重启
# 检测配置文件语法
[root@web ~]# httpd -t
Syntax OK
# 重启服务
[root@web ~]# systemctl restart httpd
配置 www.b.org 站点
步骤 1:准备网站源码目录
[root@web ~]# mkdir /b.org
[root@web ~]# vim /b.org/index.html
输入网页内容:
<html><body><h1>b.org.org.org</h1></body></html>
步骤 2:创建网站配置文件
[root@web ~]# vim /etc/httpd/conf.d/b.org.conf
<VirtualHost *:80>
ServerName www.b.org
DocumentRoot /b.org
</VirtualHost>
<Directory "/b.org">
Require all granted
</Directory>
重要:
<Directory>区块用于目录授权。当网站主目录不在/var/www/html下时,必须添加此授权,否则 Apache 会拒绝访问。
步骤 3:检测配置并重启
[root@web ~]# httpd -t
Syntax OK
[root@web ~]# systemctl restart httpd
客户端测试
Linux 客户端
步骤 1:配置域名解析
[root@client ~]# vim /etc/hosts
# 添加以下内容:
192.168.100.121 www.a.org
192.168.100.121 www.b.org
/etc/hosts是本地 DNS 解析文件,优先级高于网络 DNS 服务器。
方法一:字符界面测试
[root@client ~]# yum install -y elinks
[root@client ~]# elinks http://www.a.org
[root@client ~]# elinks http://www.b.org
方法二:图形界面测试
打开 Firefox 浏览器,分别访问:
http://www.a.orghttp://www.b.org
Windows 客户端
步骤 1:配置域名解析
- 按
Win + R打开运行窗口 - 输入
cmd打开命令提示符 - 编辑 hosts 文件:
notepad C:\Windows\System32\drivers\etc\hosts - 添加以下内容:
192.168.100.121 www.a.org
192.168.100.121 www.b.org
步骤 2:浏览器测试
打开浏览器访问 http://www.a.org 和 http://www.b.org。

动态站点:LAMP 实战
资源准备
下面的资源下载链接如果失效,可下载好提供的资源后上传到虚拟机使用。
通过网盘分享的文件:网站源码
- 链接: https://pan.baidu.com/s/1X0jcrZolb-k3FFoIl3YI7A
- 提取码: uetg
上传示例:
# 下载传输工具
[root@apache ~]# yum -y install lrzsz
# 选择上传文件/压缩包(回车后会弹出选择框)
[root@apache ~]# rz
[root@apache ~]# ls
anaconda-ks.cfg Discuz_X2.5_SC_UTF8.zip
也可以使用 FinalShell 拖拽传输。
通用基础环境
以下所有动态站点部署,都需要先完成基础环境准备。
# 永久关闭 SELinux
[root@apache ~]# sed -ri '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
# 临时关闭 SELinux
[root@apache ~]# setenforce 0
# 停止防火墙
[root@apache ~]# systemctl stop firewalld.service
# 开机禁用防火墙
[root@apache ~]# systemctl disable firewalld.service
注意事项:
- 由于域名解析或浏览器缓存的问题,域名访问可能出现连接失败的现象,但 IP 无论在真机还是虚拟机都可以直接访问。
- 如使用域名访问:实验环境建议使用两台虚拟机,其中一台带有图形化的 Linux 虚拟机做验证(可以使用浏览器),浏览器清空历史数据或使用无痕模式访问。
- 可能出现如下图的问题,但不必在意,主要理解实验即可,无论是域名访问还是 IP 访问都不影响实验结果。

安装 LAMP 组件
# 安装 LAMP 全家桶
[root@apache ~]# yum -y install httpd mariadb-server mariadb php php-mysql gd php-gd
# 启动服务
[root@apache ~]# systemctl start httpd mariadb
# 设置开机自启
[root@apache ~]# systemctl enable httpd mariadb
| 软件包 | 说明 |
|---|---|
httpd | Apache Web 服务器 |
mariadb-server | MariaDB 数据库服务器 |
mariadb | MariaDB 数据库客户端 |
php | PHP 中间件 |
php-mysql | PHP 连接 MySQL 的插件 |
gd | 图形库 |
php-gd | PHP 图形库 |
部署论坛系统:Discuz

导入网站源码
# 下载 Discuz 源码
[root@apache ~]# wget http://download.comsenz.com/DiscuzX/2.5/Discuz_X2.5_SC_UTF8.zip
# 创建网站目录
[root@apache ~]# mkdir -p /webroot/discuz
# 安装解压工具
[root@apache ~]# yum install -y unzip
# 解压源码
[root@apache ~]# unzip Discuz_X2.5_SC_UTF8.zip
# 拷贝源码到网站目录
[root@apache ~]# cp -rf upload/* /webroot/discuz/
# 修改文件所有者(Apache 运行用户)
[root@apache ~]# chown -R apache.apache /webroot/discuz/
配置 Apache 虚拟主机
[root@apache ~]# vim /etc/httpd/conf.d/discuz.conf
<VirtualHost *:80>
ServerName www.discuz.com
DocumentRoot /webroot/discuz
</VirtualHost>
<Directory "/webroot/discuz">
Require all granted
</Directory>
[root@apache ~]# systemctl restart httpd
准备数据库
[root@apache ~]# mysql
MariaDB [(none)]> create database discuz;
MariaDB [(none)]> show databases; ← 验证是否创建成功
建议:创建数据库后,用
show databases;再检查一遍,确认创建成功。
前台安装
客户端配置域名解析:
[root@client ~]# vim /etc/hosts
192.168.100.121 www.discuz.com
如果没有配置域名解析,可直接输入 IP 访问。
浏览器访问:
打开浏览器访问 http://www.discuz.com 或 192.168.100.121,按照安装向导完成论坛的安装。




提示:如果安装过程出现下图所示,不用理会,可能是版本比较老旧的问题。打开新页面搜索即可看到主页。


部署博客系统:WordPress

配置 Apache 虚拟主机
[root@apache ~]# vim /etc/httpd/conf.d/wordpress.conf
<VirtualHost *:80>
ServerName www.wordpress.com
ServerAlias wordpress.com
DocumentRoot /webroot/wordpress
</VirtualHost>
<Directory "/webroot/wordpress">
Require all granted
</Directory>
[root@apache ~]# systemctl restart httpd
ServerAlias是域名别名——用户访问wordpress.com或www.wordpress.com都能看到网站。
导入网站源码
# 创建网站目录
[root@apache ~]# mkdir -p /webroot/wordpress
# 获取、解压源码包
[root@apache ~]# wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
[root@apache ~]# tar xvf wordpress-4.9.4-zh_CN.tar.gz
# 拷贝源码到主目录
[root@apache ~]# cp -rf wordpress/* /webroot/wordpress/
# 赋予权限
[root@apache ~]# chmod -R 777 /webroot/wordpress
# 重启 Web 服务和数据库服务
[root@apache ~]# systemctl restart httpd mariadb
准备数据库
[root@apache ~]# mysql
MariaDB [(none)]> create database wordpress;
MariaDB [(none)]> show databases; ← 验证
前台安装
客户端配置域名解析:
[root@client ~]# vim /etc/hosts
192.168.100.121 www.wordpress.com
浏览器访问:
打开浏览器访问 http://www.wordpress.com 或 IP,按照安装向导操作:
1. 点击”现在安装”

2. 填写数据库信息(数据库名:wordpress,用户:root,密码留空)


3. 设置站点标题和管理员密码


4. 安装完成后,根据提示登录查看控制台(仪表盘),也可访问 IP/wp-admin 进入


5. 打开新页面搜索 IP 或域名访问站点首页

部署电商系统:ECShop
下载并导入源码
# 从 ECShop 官网下载:http://www.ecshop.com/
# 源码包:ECShop_V3.0.0_UTF8_release0518.zip
# 也可以使用提供的资源
[root@apache ~]# mkdir -p /webroot/ecshop
[root@apache ~]# unzip ECShop_V3.0.0_UTF8_release0518.zip
[root@apache ~]# cp -rf ECShop_V3.0.0_UTF8_release0518/* /webroot/ecshop/
配置 HTTP 虚拟主机
[root@apache ~]# vim /etc/httpd/conf.d/ecshop.conf
<VirtualHost *:80>
ServerName www.ecshop.com
ServerAlias ecshop.com
DocumentRoot /webroot/ecshop
</VirtualHost>
<Directory "/webroot/ecshop">
Require all granted
</Directory>
# 检测语法
[root@apache ~]# httpd -t
# 重启服务
[root@apache ~]# systemctl restart httpd
配置域名解析
[root@client ~]# vim /etc/hosts
192.168.100.121 www.ecshop.com
授权源码目录
[root@apache ~]# chmod -R 777 /webroot/ecshop/
ECShop 安装过程中需要写入配置文件,必须赋予足够的权限。
修改 PHP 时区
如果安装时遇到时区报错:
[root@apache ~]# vim /etc/php.ini
# 找到这一行(默认被注释):
;date.timezone =
# 修改为:
date.timezone = Asia/Shanghai
[root@apache ~]# systemctl restart httpd
准备数据库
[root@apache ~]# mysql
MariaDB [(none)]> create database ecshop;
MariaDB [(none)]> show databases; ← 验证是否创建成功
建议:创建数据库后,用
show databases;再检查一遍,确认创建成功。
前台安装
打开浏览器访问 http://www.ecshop.com/ 或 IP,按照安装向导操作:
1. 欢迎界面 → 同意协议

2. 检测环境

3. 配置数据库信息
4. 填写站长信息(设置管理员账号密码)

5. 安装完成
访问前台:
http://www.ecshop.com/

访问管理后台(需管理员账号密码登录):
http://www.ecshop.com/admin/privilege.php?act=login

部署网校系统:EduSoho
安装 EPEL 源
[root@apache ~]# yum -y install epel-release
如果
yum repolist中已有 epel 源,则无需此步骤。
安装 LAMP 组件
[root@apache ~]# yum -y install bash-completion httpd php php-cli php-curl \
php-fpm php-intl php-mcrypt php-mysql php-gd php-mbstring php-xml php-dom \
mariadb-server mariadb
[root@apache ~]# systemctl start httpd mariadb
EduSoho 需要更多的 PHP 扩展模块,因此安装项比前面的系统多。
准备数据库
[root@apache ~]# mysql
MariaDB [(none)]> create database edusoho;
MariaDB [(none)]> show databases; ← 检查
设置上传限制(可选)
网校的视频文件比较大,需要修改 PHP 的上传限制:
[root@apache ~]# vim /etc/php.ini
post_max_size = 1024M
memory_limit = 1024M
upload_max_filesize = 1024M
date.timezone = Asia/Shanghai
[root@apache ~]# vim /etc/php-fpm.d/www.conf
listen.owner = apache
[root@apache ~]# systemctl restart httpd php-fpm
上传源码
# 下载源码
[root@apache ~]# wget http://download.edusoho.com/edusoho-7.5.12.tar.gz
# 解压
[root@apache ~]# tar xf edusoho-7.5.12.tar.gz
# 创建目录并拷贝
[root@apache ~]# mkdir -p /webroot/edusoho
[root@apache ~]# cp -rf edusoho/* /webroot/edusoho
# 修改所有者
[root@apache ~]# chown -R apache.apache /webroot/edusoho
设置虚拟主机
[root@apache ~]# vim /etc/httpd/conf.d/edusoho.conf
<VirtualHost *:80>
ServerName www.edusoho.com
DocumentRoot /webroot/edusoho/web
</VirtualHost>
<Directory "/webroot/edusoho/web">
Require all granted
</Directory>
注意:EduSoho 的
DocumentRoot指向的是/webroot/edusoho/web(多了一层web),这是框架的要求。
[root@apache ~]# systemctl restart httpd
客户端配置 DNS
[root@client ~]# vim /etc/hosts
192.168.100.121 www.edusoho.com
前台安装
浏览器访问以下地址开始安装:
http://www.edusoho.com/install/start-install.php
或
http://192.168.100.121/install/start-install.php

按照安装向导完成安装。请记住管理员用户名和密码——这是后续上传视频和管理课程的账号。




正式访问
http://www.edusoho.com/app.php 或 http://192.168.100.121/app.php

需要先在后台创建课程、分配课时,才能正常访问课程内容。
常用命令速查
Apache 管理
| 命令 | 说明 |
|---|---|
systemctl start httpd | 启动 Apache |
systemctl stop httpd | 停止 Apache |
systemctl restart httpd | 重启 Apache |
systemctl status httpd | 查看 Apache 状态 |
systemctl enable httpd | 设置开机自启 |
httpd -v | 查看 Apache 版本 |
httpd -t | 检测配置文件语法 |
MySQL/MariaDB 管理
| 命令 | 说明 |
|---|---|
systemctl start mariadb | 启动数据库 |
mysql | 进入数据库命令行 |
create database 库名; | 创建数据库 |
show databases; | 查看所有数据库 |
drop database 库名; | 删除数据库 |
域名解析
| 系统 | 配置文件 | 格式 |
|---|---|---|
| Linux | /etc/hosts | IP 域名 |
| Windows | C:\Windows\System32\drivers\etc\hosts | IP 域名 |
常见问题
Apache 无法启动
# 检查端口是否被占用
[root@localhost ~]# netstat -antp | grep 80
# 检查配置文件语法
[root@localhost ~]# httpd -t
# 查看错误日志
[root@localhost ~]# tail /var/log/httpd/error_log
访问网站显示 403 Forbidden
检查 <Directory> 授权配置,确保 Require all granted 已正确设置。
访问网站显示 404 Not Found
检查 DocumentRoot 配置的路径是否正确,目录下是否有 index.html。
虚拟主机不生效
- 确保子配置文件放在
/etc/httpd/conf.d/目录下 - 文件名必须以
.conf结尾 - 修改配置后重启 Apache
- 客户端
/etc/hosts中配置了正确的域名解析
PHP 页面显示源码而不是渲染
确保 php 和 php-mysql 已正确安装,并重启 Apache。
最佳实践
虚拟主机配置分离
- 每个网站一个独立的
.conf文件,放在/etc/httpd/conf.d/下 - 文件名使用域名命名,如
discuz.conf、wordpress.conf
- 每个网站一个独立的
网站目录规范
- 统一使用
/webroot/作为网站代码根目录 - 每个网站以域名命名子目录:
/webroot/discuz/、/webroot/wordpress/
- 统一使用
权限管理
- 网站文件所有者设为
apache.apache - 需要写入的目录(如上传目录)赋予 777 权限
- 生产环境不应使用 777,应精确控制权限
- 网站文件所有者设为
数据库安全
- 每个应用使用独立的数据库和用户
- 不要使用 root 用户连接应用数据库
- 定期备份数据库
PHP 配置优化
- 修改时区为
Asia/Shanghai - 根据需求调整上传限制(
upload_max_filesize) - 生产环境关闭错误显示
- 修改时区为
总结
通过本章节的学习,你应该掌握了:
- 理解 B/S 架构的概念和优势
- 掌握 HTML、网页、主页、网站、URL 等核心名词
- 理解 LAMP 架构(Linux + Apache + MySQL + PHP)的各组件作用
- 掌握 Apache 的安装、启动、版本查看和配置检测
- 理解虚拟主机的概念和基于主机名的虚拟主机配置
- 掌握
<VirtualHost>和<Directory>配置指令 - 理解
/etc/hosts本地 DNS 解析的作用 - 掌握 LAMP 环境的一键安装(httpd + mariadb + php + 扩展)
- 能够独立部署 Discuz 论坛系统
- 能够独立部署 WordPress 博客系统
- 能够独立部署 ECShop 电商系统
- 能够独立部署 EduSoho 网校系统
- 掌握每个系统的通用部署流程:基础环境 → 安装 LAMP → 导入源码 → 配置虚拟主机 → 创建数据库 → 前台安装
学习建议:网站服务是运维工作中最常接触的内容。建议在自己的虚拟机上完整部署一遍这四个系统,尤其是 LAMP 环境的搭建和虚拟主机的配置。实际操作一遍,远胜于阅读十遍文档。每个系统部署成功后,截图记录,这些都是你技术能力的证明。