96·实战项目进阶

实战:搭建 Nginx/Apache Web 服务器

nginxapacheweb

第96课:实战:搭建 Nginx/Apache Web 服务器

难度: intermediate 标签: nginx, apache, web


1. 学习目标

完成本课后,你将能够:

  • 在Linux系统中独立完成Nginx和Apache Web服务器的安装、基本配置和启停管理。
  • 理解Nginx与Apache的核心架构差异,并根据需求选择合适的服务器。
  • 配置基于域名的虚拟主机,实现一个服务器托管多个网站。
  • 对服务器进行基础的安全与性能优化,如设置访问权限、开启gzip压缩。

2. 核心概念

Web服务器是互联网基础设施的核心,负责接收用户的HTTP请求,并将对应的网页文件(HTML、图片、CSS等)返回给用户的浏览器。

Apache 是历史最悠久、市场占有率极高的Web服务器。它像一位经验丰富的“管家”,采用进程/线程驱动的模型。每当一个请求到来,它就可能会派生或分配一个独立的“工作人员”(进程或线程)去处理,稳定可靠,模块极其丰富。

Nginx 则是一位更年轻、高效的“运动员”。它采用事件驱动、异步非阻塞的架构,能用少量的“工作人员”高效处理海量并发连接,尤其擅长处理静态文件和反向代理,在性能上通常优于Apache。

简单比喻:Apache像一家雇佣了大量员工的餐厅,服务周到但成本高;Nginx则像一家高效的自动化餐厅,用更少的员工就能服务大量客人,速度更快。

对于初学者和中小型网站,两者都是优秀的选择。Nginx在性能和资源消耗上往往更有优势。

3. 代码示例

示例1:安装并启动Nginx

# 1. 更新软件包索引(以Ubuntu/Debian为例)
sudo apt update

# 2. 安装Nginx
sudo apt install nginx -y

# 3. 检查Nginx服务状态
sudo systemctl status nginx
# 你应该会看到 “active (running)” 的绿色字样。

# 4. 测试默认页面
curl http://localhost
# 或者直接在浏览器访问服务器的IP地址。

# 5. 管理Nginx服务
sudo systemctl stop nginx      # 停止
sudo systemctl start nginx     # 启动
sudo systemctl restart nginx   # 重启
sudo systemctl reload nginx    # 重新加载配置(不中断服务,推荐)

示例2:配置Nginx虚拟主机

目标:让 www.site1.comwww.site2.com 指向服务器上的不同目录。

# 1. 创建网站根目录
sudo mkdir -p /var/www/site1.com /var/www/site2.com

# 2. 为两个站点分别创建一个简单的HTML文件
echo "<h1>Welcome to Site1!</h1>" | sudo tee /var/www/site1.com/index.html
echo "<h1>Welcome to Site2!</h1>" | sudo tee /var/www/site2.com/index.html

# 3. 创建虚拟主机配置文件
# 对于 Site1
sudo tee /etc/nginx/sites-available/site1.com > /dev/null <<EOF
server {
    listen 80;
    server_name www.site1.com site1.com;
    root /var/www/site1.com;
    index index.html;

    location / {
        try_files \$uri \$uri/ =404;
    }
}
EOF

# 对于 Site2
sudo tee /etc/nginx/sites-available/site2.com > /dev/null <<EOF
server {
    listen 80;
    server_name www.site2.com site2.com;
    root /var/www/site2.com;
    index index.html;

    location / {
        try_files \$uri \$uri/ =404;
    }
}
EOF

# 4. 启用站点(创建符号链接)
sudo ln -s /etc/nginx/sites-available/site1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site2.com /etc/nginx/sites-enabled/

# 5. 测试配置语法并重载Nginx
sudo nginx -t
# 输出 “syntax is ok” 和 “test is successful” 后:
sudo systemctl reload nginx

示例3:安装并配置Apache

# 1. 安装Apache
sudo apt update
sudo apt install apache2 -y

# 2. 启动并设置开机自启
sudo systemctl start apache2
sudo systemctl enable apache2

# 3. 配置Apache虚拟主机
# 禁用默认站点,启用我们的新站点
sudo a2dissite 000-default.conf

# 为 site1 创建配置文件
sudo tee /etc/apache2/sites-available/site1.com.conf > /dev/null <<EOF
<VirtualHost *:80>
    ServerName www.site1.com
    ServerAlias site1.com
    DocumentRoot /var/www/site1.com
    <Directory /var/www/site1.com>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
EOF

# 为 site2 创建配置文件(类似,只需修改ServerName和DocumentRoot)
# ...

# 4. 启用新站点并重载Apache
sudo a2ensite site1.com.conf
sudo a2ensite site2.com.conf
sudo systemctl reload apache2

4. 实践练习

练习1(基础)

在你的Ubuntu服务器上安装Nginx,并成功通过浏览器访问到它的默认欢迎页面。截图证明。

练习2(进阶)

使用Nginx配置一个虚拟主机,域名为 myblog.local,网站根目录为 /var/www/myblog。在该目录下创建一个简单的 index.html,内容为“我的第一个博客”。使用 curl 命令验证配置是否成功:

# 假设你已将 myblog.local 指向 127.0.0.1 (或服务器IP) 在本地hosts文件中
curl -H "Host: myblog.local" http://127.0.0.1

练习3(挑战)

在Nginx的 server 块配置中添加以下优化指令,并解释其作用:

    # 启用gzip压缩
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml;
    
    # 禁止访问隐藏文件 (如 .htaccess, .env)
    location ~ /\. {
        deny all;
    }

5. 常见错误

  1. 配置文件语法错误:修改配置后,务必先运行 sudo nginx -t (Nginx) 或 sudo apachectl configtest (Apache) 检查语法,否则直接重启会导致服务启动失败。
  2. 目录权限问题:Web服务器的运行用户(如www-data)需要对你网站根目录及其文件有读取和执行权限。使用 sudo chown -R www-data:www-data /var/www/your-sitesudo chmod -R 755 /var/www/your-site 修复。
  3. 域名未生效:在配置虚拟主机后,如果在本地测试,请确保在客户端电脑的 /etc/hosts 文件中添加了域名到IP的映射,例如:192.168.1.100 myblog.local
  4. 端口冲突:确保没有其他服务(如另一个Web服务器、Docker容器)占用了80或443端口。可以使用 sudo ss -tlnp | grep :80 命令检查。
  5. 防火墙拦截:确保服务器的防火墙(如 ufw)允许了HTTP(80)和HTTPS(443)流量。sudo ufw allow 'Nginx Full'sudo ufw allow 'Apache'

6. 小结

本节课我们进行了Web服务器搭建的实战演练:

  • 核心技能:掌握了Nginx和Apache的安装、基本配置、服务管理以及虚拟主机的配置方法,这是托管多个网站的关键。
  • 架构认知:理解了Nginx(事件驱动)与Apache(进程驱动)的模型差异,明白了Nginx在处理高并发静态请求时的性能优势。
  • 运维要点:学会了配置后的语法检查、权限设置、防火墙管理等基本但至关重要的运维步骤。
  • 下一步:配置好Web服务器后,通常下一步是为网站配置SSL/TLS证书实现HTTPS加密,以及使用Nginx/Apache作为反向代理来部署后端应用(如PHP、Python)。

动手实践是掌握这些知识的最佳途径,请务必完成练习题。下一课,我们将学习如何通过自动化脚本来简化这些重复性的运维工作。

练习编辑器

rust
Loading...

继续学习

完成本课后,建议继续学习下一课「实战:批量运维自动化脚本」 以巩固所学知识。