🎉 限时公测|限量体验29元4核8G39元8核16G云开发环境一个月,助力Vibe Coding新时代!

Web服务器配置 - Apache与Nginx部署管理

初级

深入学习Ubuntu 24.10 Server上Web服务器的安装配置:从基础概念到实践部署,掌握Apache和Nginx的核心技能,包括虚拟主机、SSL证书和安全配置。通过科学工程化类比和渐进式实践,让初学者轻松掌握Web服务器管理技能。

未知
easylearning团队
更新于 2025-01-23

🚀 实践环境(SSH)

欢迎使用Easylearning为您专属打磨的自由学习实践环境, 登录后马上开始边学边练吧!

StudyBoard

创建StudyBoard练习实例,系统自动连接到实例后,可以在教程中直接发送远程命令到实例中执行并能查看结果,享受更好的学习体验。

Web服务器配置 - Apache与Nginx部署管理

Web服务器是现代互联网基础设施的核心组件,就像城市中的交通枢纽一样重要。在掌握了存储管理的基础上,我们现在要学习如何搭建和管理Web服务,为用户提供稳定可靠的网站服务。本教程将通过科学工程化类比和实践操作,帮助您掌握Web服务器的核心技能。

🎯 学习目标

完成本章学习后,您将能够:

  • Web服务器概念理解: 深入理解Web服务器的工作原理和在网络架构中的作用
  • 基础安装配置: 熟练掌握Apache和Nginx的安装、启动和基础配置方法
  • 虚拟主机管理: 学会配置多个网站共享同一台服务器的虚拟主机技术
  • SSL证书部署: 掌握HTTPS加密配置和SSL证书的申请、安装、续期管理
  • 安全加固实践: 了解Web服务器安全配置和常见攻击防护措施

🏗️ Web服务器核心概念

Web服务器是什么?

官方定义: 根据Apache HTTP Server官方文档,Web服务器是一种运行在网络服务器上的软件,用于接收、处理和响应来自Web浏览器的HTTP请求,并向客户端返回HTML页面、图像、文档或其他Web内容的服务程序

科学工程化类比: Web服务器就像现代化的智能图书馆系统

  • 图书管理员 = Web服务器软件(Apache/Nginx),负责接待访客和处理请求
  • 图书馆建筑 = 服务器硬件,提供物理空间和基础设施
  • 图书分类系统 = 虚拟主机配置,不同区域存放不同类型的内容
  • 借阅卡验证 = SSL/TLS加密,确保访问安全和身份验证
  • 图书索引目录 = DNS解析,帮助访客找到正确的资源位置
  • 多个服务窗口 = 并发处理,同时为多个访客提供服务

🚀 Nginx Web服务器入门

我们从Nginx开始学习,因为它配置简单、性能优秀,非常适合初学者入门。

Nginx是什么?

官方定义: 根据Nginx官方文档,Nginx是一个高性能的HTTP和反向代理服务器,采用事件驱动的异步非阻塞架构,能够高效处理大量并发连接,广泛用于Web服务、负载均衡和反向代理

工程化类比: Nginx就像一个高效的快递分拣中心

  • 分拣员 = Worker进程,专门处理包裹(请求)
  • 调度中心 = Master进程,统一管理和调度
  • 传送带系统 = 事件驱动机制,高效传输
  • 智能路由 = 反向代理功能,自动分配到正确目的地

Nginx安装和基础配置

1. 安装Nginx

请登录以使用远程命令功能
# 更新软件包列表
$sudo apt update
# 安装Nginx
$sudo apt install nginx -y
# 启动并启用Nginx服务
$sudo systemctl start nginx
$sudo systemctl enable nginx
# 检查服务状态
$sudo systemctl status nginx
# 验证Nginx版本
$nginx -v

命令解释

  • apt update:更新软件包索引,确保获取最新版本信息
  • apt install nginx -y:安装nginx软件包,-y自动确认安装
  • systemctl start:立即启动nginx服务
  • systemctl enable:设置nginx开机自动启动
  • systemctl status:查看服务运行状态和日志信息

2. 验证安装结果

请登录以使用远程命令功能
# 检查Nginx是否正在监听80端口
$sudo ss -tlnp | grep :80
# 测试本地访问
$curl http://localhost
# 查看Nginx进程
$ps aux | grep nginx

如果看到类似"Welcome to nginx!"的页面内容,说明Nginx安装成功!

3. Nginx目录结构

请登录以使用远程命令功能
# 查看Nginx配置目录结构
$tree /etc/nginx/ || ls -la /etc/nginx/
/etc/nginx/
├── nginx.conf            # 主配置文件
├── sites-available/      # 可用站点配置
├── sites-enabled/        # 启用的站点配置
├── conf.d/               # 额外配置目录
├── snippets/             # 配置片段
└── modules-enabled/      # 启用的模块

目录说明

  • nginx.conf:主配置文件,包含全局设置
  • sites-available/:存放所有网站配置文件
  • sites-enabled/:存放启用的网站配置(通常是符号链接)
  • conf.d/:存放额外的配置文件
  • snippets/:存放可重用的配置片段

🛠️ 实践练习1:创建第一个网站

让我们创建一个简单的个人网站来练习Nginx配置。

步骤1:创建网站目录和文件

请登录以使用远程命令功能
# 创建网站目录
$sudo mkdir -p /var/www/my-first-site
# 设置目录权限
$sudo chown -R $USER:$USER /var/www/my-first-site
$sudo chmod -R 755 /var/www/my-first-site
# 创建简单的HTML页面
$cat <<EOF | sudo tee /var/www/my-first-site/index.html(多行命令)
><!DOCTYPE html>
><html>
><head>
> <title>我的第一个网站</title>
> <meta charset="UTF-8">
></head>
><body>
> <h1>🎉 恭喜!您的第一个网站成功运行!</h1>
> <p>这是使用Nginx搭建的网站</p>
> <p>服务器时间:$(date)</p>
></body>
></html>
>EOF

步骤2:创建Nginx站点配置

请登录以使用远程命令功能
# 创建站点配置文件
$sudo vim /etc/nginx/sites-available/my-first-site

在编辑器中输入以下配置:

NGINX
server {
    listen 80;
    listen [::]:80;
 
    server_name localhost;
    root /var/www/my-first-site;
    index index.html index.htm;
 
    location / {
        try_files $uri $uri/ =404;
    }
}

配置解释

  • listen 80:监听80端口(HTTP默认端口)
  • server_name localhost:服务器名称
  • root:网站文件根目录
  • index:默认首页文件
  • try_files:文件查找规则

步骤3:启用网站

请登录以使用远程命令功能
# 创建符号链接启用网站
$sudo ln -s /etc/nginx/sites-available/my-first-site /etc/nginx/sites-enabled/
# 禁用默认网站(可选)
$sudo unlink /etc/nginx/sites-enabled/default
# 测试Nginx配置语法
$sudo nginx -t
# 重新加载Nginx配置
$sudo systemctl reload nginx

步骤4:验证网站运行

请登录以使用远程命令功能
# 测试网站访问
$curl http://localhost
# 查看Nginx访问日志
$sudo tail -f /var/log/nginx/access.log
# 停止Nginx 服务
$sudo systemctl disable --now nginx

成功标志:如果看到您创建的HTML内容,恭喜您成功配置了第一个Nginx网站!

🔧 Apache Web服务器

现在让我们学习Apache,它是另一个重要的Web服务器。

Apache是什么?

官方定义: 根据Apache HTTP Server官方文档,Apache是一个开源的跨平台HTTP服务器软件,采用模块化架构设计,支持多种多处理模块(MPM),提供灵活的配置选项和丰富的功能扩展

工程化类比: Apache就像一个多功能的服务大厅

  • 服务窗口 = 多处理模块(MPM),不同窗口处理不同类型业务
  • 业务专员 = 各种模块,每个专员负责特定功能
  • 服务流程 = 配置文件,定义如何处理不同请求
  • 分区管理 = 虚拟主机,不同区域服务不同客户

Apache安装和基础配置

1. 安装Apache

请登录以使用远程命令功能
# 安装Apache2
$sudo apt install apache2 -y
# 启动并启用Apache服务
$sudo systemctl start apache2
$sudo systemctl enable apache2
# 检查服务状态
$sudo systemctl status apache2
# 验证Apache版本
$apache2 -v

2. 验证Apache安装

请登录以使用远程命令功能
# 检查Apache是否监听80端口
$sudo ss -tlnp | grep :80
# 测试本地访问
$curl http://localhost
# 查看Apache进程
$ps aux | grep apache2

🛠️ 实践练习2:Apache虚拟主机配置

让我们配置Apache虚拟主机,学习如何在一台服务器上托管多个网站。

步骤1:创建网站目录

请登录以使用远程命令功能
# 创建两个不同的网站目录
$sudo mkdir -p /var/www/site1.local/public_html
$sudo mkdir -p /var/www/site2.local/public_html
# 设置目录权限
$sudo chown -R $USER:$USER /var/www/site1.local/public_html
$sudo chown -R $USER:$USER /var/www/site2.local/public_html
$sudo chmod -R 755 /var/www

步骤2:创建网站内容

请登录以使用远程命令功能
# 创建第一个网站的页面
$cat <<EOF | sudo tee /var/www/site1.local/public_html/index.html(多行命令)
><!DOCTYPE html>
><html>
><head>
> <title>网站1 - Apache虚拟主机</title>
> <meta charset="UTF-8">
></head>
><body>
> <h1>🌟 欢迎访问网站1</h1>
> <p>这是使用Apache虚拟主机技术搭建的第一个网站</p>
> <p>域名:site1.local</p>
></body>
></html>
>EOF
# 创建第二个网站的页面
$cat <<EOF | sudo tee /var/www/site2.local/public_html/index.html(多行命令)
><!DOCTYPE html>
><html>
><head>
> <title>网站2 - Apache虚拟主机</title>
> <meta charset="UTF-8">
></head>
><body>
> <h1>🚀 欢迎访问网站2</h1>
> <p>这是使用Apache虚拟主机技术搭建的第二个网站</p>
> <p>域名:site2.local</p>
></body>
></html>
>EOF

步骤3:创建虚拟主机配置

请登录以使用远程命令功能
# 创建第一个网站的配置文件
$cat <<EOF | sudo tee /etc/apache2/sites-available/site1.local.conf(多行命令)
><VirtualHost *:80>
> ServerAdmin admin@site1.local
> ServerName site1.local
> DocumentRoot /var/www/site1.local/public_html
# # 日志配置
$ ErrorLog \${APACHE_LOG_DIR}/site1.local_error.log
$ CustomLog \${APACHE_LOG_DIR}/site1.local_access.log combined
# # 目录配置
$ <Directory /var/www/site1.local/public_html>
$ Options Indexes FollowSymLinks
$ AllowOverride All
$ Require all granted
$ </Directory>
$</VirtualHost>
$EOF
# 创建第二个网站的配置文件
$cat <<EOF | sudo tee /etc/apache2/sites-available/site2.local.conf(多行命令)
><VirtualHost *:80>
> ServerAdmin admin@site2.local
> ServerName site2.local
> DocumentRoot /var/www/site2.local/public_html
> ErrorLog \${APACHE_LOG_DIR}/site2.local_error.log
> CustomLog \${APACHE_LOG_DIR}/site2.local_access.log combined
> <Directory /var/www/site2.local/public_html>
> Options Indexes FollowSymLinks
> AllowOverride All
> Require all granted
> </Directory>
></VirtualHost>
>EOF

配置解释

  • ServerName:虚拟主机的域名
  • DocumentRoot:网站文件根目录
  • ErrorLog/CustomLog:错误和访问日志文件
  • Directory:目录权限和选项设置

步骤4:启用虚拟主机

请登录以使用远程命令功能
# 启用两个网站
$sudo a2ensite site1.local.conf
$sudo a2ensite site2.local.conf
# 禁用默认网站
$sudo a2dissite 000-default.conf
# 测试Apache配置
$sudo apache2ctl configtest
# 重新加载Apache
$sudo systemctl reload apache2

步骤5:配置本地域名解析(测试用)

请登录以使用远程命令功能
# 编辑hosts文件添加本地域名解析
$echo "127.0.0.1 site1.local" | sudo tee -a /etc/hosts
$echo "127.0.0.1 site2.local" | sudo tee -a /etc/hosts
# 验证域名解析
$nslookup site1.local
$nslookup site2.local

步骤6:测试虚拟主机

请登录以使用远程命令功能
# 测试第一个网站
$curl http://site1.local
# 测试第二个网站
$curl http://site2.local
# 查看Apache访问日志
$sudo tail -f /var/log/apache2/site1.local_access.log
# 停止apache2服务
$sudo systemctl disable --now apache2

成功标志:如果两个curl命令返回不同的网站内容,说明虚拟主机配置成功!

🔒 SSL/TLS证书配置

HTTPS加密是现代网站的必备功能,让我们学习如何配置SSL证书。

SSL/TLS是什么?

官方定义: 根据RFC 8446标准,TLS(传输层安全协议)是一种加密协议,用于在计算机网络上提供通信安全,通过加密、身份验证和完整性保护来确保客户端和服务器之间的安全通信

工程化类比: SSL/TLS就像银行的安全保险箱系统

  • 加密锁 = 数据加密,确保信息不被窃取
  • 身份验证 = 证书验证,确认服务器身份真实性
  • 完整性检查 = 数据完整性,确保信息未被篡改
  • 安全通道 = 加密隧道,保护整个传输过程

使用Let's Encrypt免费证书

Let's Encrypt是一个免费的SSL证书颁发机构,非常适合学习和小型项目使用。

1. 安装Certbot

请登录以使用远程命令功能
# 安装Certbot和相关插件
$sudo apt install certbot python3-certbot-nginx python3-certbot-apache -y
# 验证安装
$certbot --version
# 启用Nginx服务
$sudo systemctl enable --now nginx

2. 为Nginx网站申请SSL证书

请登录以使用远程命令功能
# 确保网站可以通过域名访问(这里使用localhost演示)
# 注意:实际使用时需要真实域名和公网IP
# 为Nginx站点获取证书(模拟命令,实际需要真实域名)
# sudo certbot --nginx -d your-domain.com
# 生成自签名证书用于测试
$sudo mkdir -p /etc/ssl/private
$sudo mkdir -p /etc/ssl/certs
# 生成私钥
$sudo openssl genrsa -out /etc/ssl/private/nginx-selfsigned.key 2048
# 生成自签名证书
$sudo openssl req -new -x509 -key /etc/ssl/private/nginx-selfsigned.key \(多行命令)
> -out /etc/ssl/certs/nginx-selfsigned.crt -days 365 \
> -subj "/C=CN/ST=Beijing/L=Beijing/O=Test/CN=localhost"

3. 配置Nginx使用SSL

请登录以使用远程命令功能
# 创建SSL配置片段
$cat <<EOF | sudo tee /etc/nginx/snippets/self-signed.conf(多行命令)
>ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
>ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
>EOF
# 创建SSL参数配置
$cat <<EOF | sudo tee /etc/nginx/snippets/ssl-params.conf(多行命令)
>ssl_protocols TLSv1.2 TLSv1.3;
>ssl_prefer_server_ciphers on;
>ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
>ssl_session_timeout 10m;
>ssl_session_cache shared:SSL:10m;
>add_header X-Frame-Options DENY;
>add_header X-Content-Type-Options nosniff;
>add_header X-XSS-Protection "1; mode=block";
>EOF

4. 更新网站配置支持HTTPS

请登录以使用远程命令功能
# 更新之前创建的网站配置
$cat <<EOF | sudo tee /etc/nginx/sites-available/my-first-site(多行命令)
# HTTP重定向到HTTPS
$server {
$ listen 80;
$ listen [::]:80;
$ server_name localhost;
$ return 302 https://\$server_name\$request_uri;
$}
# HTTPS配置
$server {
$ listen 443 ssl http2;
$ listen [::]:443 ssl http2;
$ server_name localhost;
$ root /var/www/my-first-site;
$ index index.html index.htm;
# # SSL配置
$ include snippets/self-signed.conf;
$ include snippets/ssl-params.conf;
$ location / {
$ try_files \$uri \$uri/ =404;
$ }
$}
$EOF
# 重新加载Nginx
$sudo nginx -t && sudo systemctl reload nginx

5. 测试HTTPS配置

请登录以使用远程命令功能
# 测试HTTPS访问(忽略证书警告)
$curl -k https://localhost
# 查看SSL证书信息
$openssl x509 -in /etc/ssl/certs/nginx-selfsigned.crt -text -noout

注意:自签名证书会在浏览器中显示安全警告,这是正常的。在生产环境中应该使用Let's Encrypt或购买的SSL证书。


🤔 思考题

  1. 概念理解:为什么说Nginx适合高并发场景,而Apache更适合复杂应用?它们的架构差异在哪里?

  2. 实践应用:如果要在一台服务器上托管10个不同的网站,你会选择什么方案?需要考虑哪些因素?

  3. 安全考虑:除了SSL证书,Web服务器还需要配置哪些安全措施来防护常见的网络攻击?

  4. 故障排除:当网站突然无法访问时,你会按什么顺序进行问题排查?每个步骤要检查什么?

📚 扩展阅读

官方文档

进阶学习

实用工具

实践练习

通过实际操作来巩固所学知识,在真实的系统化的训练环境中练习本教程的内容。

Web服务器配置 - Apache与Nginx部署管理 - 实践练习

待学习
ID: LINUX_04_WEB_SERVERS
未登录
训练服务器:
训练内容:

基于 Web服务器配置 - Apache与Nginx部署管理 教程的实践练习