第1章:Nginx初识

1.1 Nginx是什么?

1.1.1 历史背景与发展

Nginx(发音为"engine x")是一款由俄罗斯开发者Igor Sysoev创建的高性能Web服务器软件。它的开发始于2002年,并于2004年首次公开发布。

发展历程

  • 2002年:Igor Sysoev开始开发Nginx,旨在解决C10K问题(同时处理10,000个并发连接)
  • 2004年:首次公开发布
  • 2011年:成立Nginx公司,提供商业支持
  • 2019年:被F5 Networks以6.7亿美元收购
  • 至今:持续更新,成为全球最受欢迎的Web服务器之一

1.1.2 Nginx vs Apache vs 其他Web服务器

特性 Nginx Apache
架构 事件驱动、非阻塞I/O 多进程/线程模型
并发处理 高性能,支持10,000+并发连接 相对较低,受限于进程/线程数量
内存占用 低内存消耗 较高内存消耗
配置风格 简洁的配置文件 复杂的.htaccess文件
模块化 动态模块支持 丰富的模块生态
适用场景 高并发Web服务器、反向代理、负载均衡 传统Web应用、动态内容处理

其他流行Web服务器

  • Lighttpd:轻量级,适合静态内容
  • Caddy:自动HTTPS,现代化配置
  • Microsoft IIS:Windows平台专用

1.1.3 应用场景

Nginx的主要应用场景包括:

  1. Web服务器:直接提供静态资源服务
  2. 反向代理:将客户端请求转发给后端服务器
  3. 负载均衡:将请求分发到多个后端服务器,提高可用性和性能
  4. API网关:管理、路由和保护API请求
  5. HTTP缓存:缓存静态资源,减少后端服务器压力
  6. 安全防护:防止DDoS攻击,提供基本的安全功能

1.2 安装与第一个Hello World

1.2.1 不同操作系统安装方法

Ubuntu/Debian系统

安装步骤

  1. 更新软件包列表:

    sudo apt update
  2. 安装Nginx:

    sudo apt install nginx -y
  3. 启动Nginx服务:

    sudo systemctl start nginx
  4. 设置开机自启:

    sudo systemctl enable nginx

CentOS/RHEL系统

安装步骤

  1. 安装EPEL仓库(如果尚未安装):

    sudo yum install epel-release -y
  2. 安装Nginx:

    sudo yum install nginx -y
  3. 启动Nginx服务:

    sudo systemctl start nginx
  4. 设置开机自启:

    sudo systemctl enable nginx

macOS系统

安装步骤

  1. 确保已安装Homebrew包管理器

  2. 安装Nginx:

    brew install nginx
  3. 启动Nginx:

    brew services start nginx

Windows系统

安装步骤

  1. 访问Nginx官方网站(https://nginx.org/en/download.html)下载Windows版本

  2. 解压下载的压缩包到指定目录,如C:\nginx

  3. 打开命令提示符,进入Nginx目录:

    cd C:\nginx
  4. 启动Nginx:

    start nginx

1.2.2 验证安装

无论使用哪种操作系统,安装完成后,您都可以通过以下方法验证Nginx是否正常运行:

  1. 通过浏览器访问
    打开浏览器,输入http://localhosthttp://127.0.0.1,您应该看到Nginx的默认欢迎页面

  2. 通过命令行检查

    curl -I http://localhost

    预期输出:

    HTTP/1.1 200 OK
    Server: nginx/[版本号]
    ...
  3. 检查服务状态

    sudo systemctl status nginx

    nginx -t

1.2.3 基本目录结构

Nginx的主要目录结构

目录/文件 用途
/etc/nginx/ 主配置目录
/etc/nginx/nginx.conf 主配置文件
/etc/nginx/conf.d/ 额外配置文件目录
/var/www/html/ 默认网页根目录
/var/log/nginx/ 日志文件目录
/usr/sbin/nginx Nginx可执行文件

1.2.4 第一个配置:静态网页服务

步骤1:创建自定义网页

  1. 创建网页目录:

    sudo mkdir -p /var/www/mywebsite
  2. 创建index.html文件:

    sudo nano /var/www/mywebsite/index.html
  3. 写入以下内容:

    <!DOCTYPE html>
    <html>
    <head>
        <title>我的第一个Nginx网站</title>
    </head>
    <body>
        <h1>Hello, Nginx!</h1>
        <p>这是我使用Nginx创建的第一个网站。</p>
    </body>
    </html>
  4. 设置目录权限:

    sudo chown -R www-data:www-data /var/www/mywebsite

步骤2:创建Nginx配置文件

  1. 创建配置文件:

    sudo nano /etc/nginx/conf.d/mywebsite.conf
  2. 写入以下配置:

    server {
        listen 80;
        server_name mywebsite.local;
        root /var/www/mywebsite;
        index index.html;
    }

步骤3:验证配置并重启Nginx

  1. 测试配置文件:

    sudo nginx -t

    预期输出:

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
  2. 重启Nginx服务:

    sudo systemctl restart nginx

步骤4:访问网站

  1. 在本地DNS解析中添加域名(可选):

    sudo nano /etc/hosts

    添加:

    127.0.0.1 mywebsite.local
  2. 通过浏览器访问:

    • 使用域名:http://mywebsite.local
    • 或直接使用IP:http://localhost

    您应该能看到我们创建的"Hello, Nginx!"页面

1.2.5 常见问题与解决方案

问题1:端口被占用

症状:Nginx无法启动,报错"address already in use"

解决方案

  1. 查找占用80端口的进程:

    sudo lsof -i :80
  2. 终止占用端口的进程:

    sudo kill -9 [进程ID]
  3. 重启Nginx:

    sudo systemctl restart nginx

问题2:权限错误

症状:浏览器显示"403 Forbidden"

解决方案

  1. 检查文件权限:

    ls -la /var/www/mywebsite/
  2. 设置正确的权限:

    sudo chown -R www-data:www-data /var/www/mywebsite
    sudo chmod -R 755 /var/www/mywebsite

问题3:配置文件语法错误

症状:Nginx无法启动,报错"nginx: configuration file /etc/nginx/nginx.conf test failed"

解决方案

  1. 使用nginx -t命令查看具体错误信息
  2. 根据错误信息修复配置文件
  3. 再次测试配置:
    sudo nginx -t

章节总结

在本章中,我们学习了:

  1. Nginx的基本概念:历史背景、与其他Web服务器的对比以及应用场景
  2. Nginx的安装方法:在不同操作系统上的安装步骤
  3. 验证安装:通过浏览器和命令行验证Nginx是否正常运行
  4. 基本配置:创建自定义网页和Nginx配置文件
  5. 常见问题:端口占用、权限错误和配置文件语法错误的解决方案

实践练习

  1. 在您的操作系统上安装Nginx
  2. 创建一个自定义网页,内容包含您的名字和当前日期
  3. 配置Nginx以提供该网页服务
  4. 验证您可以通过浏览器访问该网页
  5. 尝试修改Nginx配置,添加一个新的server块

延伸阅读


下一章第2章:核心概念理解

下一篇 » 核心概念理解