Nginx完全指南:从入门到精通(基于Ubuntu系统)

一、Nginx 简介

  1. 什么是 Nginx?

    • Nginx(读作 “engine x”)是一个高性能的 HTTP 和反向代理服务器,同时也支持 IMAP/POP3/SMTP 代理功能。
    • 特点:内存占用少、并发处理能力强、配置灵活、高可扩展性。广泛用于 Web 服务器、反向代理、负载均衡、API 网关等场景。
  2. Nginx 的常见应用场景

    • HTTP 服务器:处理静态文件或作为 Web 应用的前端服务器。
    • 反向代理:为后端服务器提供负载均衡、缓存等功能。
    • 负载均衡:通过算法将请求分发到多个后端服务器,提升服务能力。
    • 缓存:利用代理缓存加速访问。
    • HTTPS / SSL 终止:在 Nginx 端卸载 SSL,后端使用 HTTP 提高效率。

二、在 Ubuntu 中安装 Nginx

系统要求:建议使用 Ubuntu 20.04 LTS 或 22.04 LTS(当前支持的长期支持版本)。

  1. 更新软件源

    sudo apt update
    
  2. 安装 Nginx

    sudo apt install nginx
    
  3. 验证安装是否成功

    • 查看版本:
      nginx -v
      
    • 启动服务:
      sudo systemctl start nginx
      
    • 检查状态:
      sudo systemctl status nginx
      
    • 在浏览器访问 http://localhosthttp://服务器IP/,确认是否显示默认的 Nginx 欢迎页面。

三、Nginx 服务管理常用命令(Ubuntu)

以下是在 Ubuntu 系统下管理 Nginx 的常用命令:

# 启动 Nginx
sudo systemctl start nginx

# 停止 Nginx
sudo systemctl stop nginx

# 重启 Nginx
sudo systemctl restart nginx

# 重新加载配置(不中断服务)
sudo systemctl reload nginx

# 查看 Nginx 运行状态
sudo systemctl status nginx

# 设置开机自启动
sudo systemctl enable nginx

# 取消开机自启动
sudo systemctl disable nginx

四、Nginx 文件结构与主要配置

Ubuntu 默认安装的 Nginx 配置文件目录结构如下:

/etc/nginx/
├── nginx.conf        # 主配置文件(全局入口)
├── sites-available/  # 可用的站点配置文件存放目录
├── sites-enabled/    # 已启用的站点配置文件(通常为软链接)
├── conf.d/           # 额外的配置文件目录
├── modules-available/
├── modules-enabled/
└── ...

1. nginx.conf 主配置文件

  • http 块:配置 HTTP 协议相关参数,如日志格式、默认 MIME 类型等。
  • events 块:设置网络连接处理参数,如 worker_connections(工作连接数)。
  • worker_processes:定义工作进程数量,通常根据 CPU 核心数设置。
  • 站点配置通常放在 sites-available 中,并通过软链接到 sites-enabled 被主配置文件引用。

2. sites-availablesites-enabled

  • sites-available:存储所有可用的站点配置文件。
  • sites-enabled:存储实际启用的站点配置文件,通常从 sites-available 创建软链接。
  • 主配置文件 nginx.confhttp 块中通常包含:
    include /etc/nginx/sites-enabled/*;
    
    以加载所有启用站点的配置。

3. 基本站点配置示例

以下是一个简单的静态网站配置示例(文件路径:/etc/nginx/sites-available/my_site.conf):

server {
    listen 80;
    server_name example.com www.example.com; # 替换为你的域名或 IP

    root /var/www/my_site;     # 网站根目录
    index index.html index.htm;

    # 日志路径可自定义
    access_log /var/log/nginx/my_site_access.log;
    error_log /var/log/nginx/my_site_error.log;

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

配置生效步骤

# 创建并编辑配置文件
sudo nano /etc/nginx/sites-available/my_site.conf

# 测试配置文件语法
sudo nginx -t

# 创建软链接到 sites-enabled
sudo ln -s /etc/nginx/sites-available/my_site.conf /etc/nginx/sites-enabled/

# 重新加载 Nginx
sudo systemctl reload nginx

五、常见功能与配置

1. 反向代理与负载均衡

(1)反向代理示例

将请求转发到后端应用(如运行在 localhost:8080 的服务):

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;  # 后端服务地址
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
(2)负载均衡示例

使用 upstream 定义后端服务器池:

upstream backend_servers {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    # 可选负载均衡策略:least_conn; 或 ip_hash; # 默认轮询(round-robin)
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_servers;
    }
}

2. HTTPS/SSL 配置

假设已获取证书文件 server.crt 和私钥 server.key(可通过 Let’s Encrypt 获取),存放于 /etc/nginx/ssl/

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate     /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    # 安全配置建议
    ssl_session_timeout 5m;
    ssl_protocols TLSv1.2 TLSv1.3;  # 使用现代 TLS 版本
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;

    root /var/www/my_site;
    index index.html index.htm;
}

HTTP 自动跳转到 HTTPS

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

3. 日志与调试

  • 访问日志:默认路径 /var/log/nginx/access.log
  • 错误日志:默认路径 /var/log/nginx/error.log
  • 自定义日志示例:
    access_log /var/log/nginx/my_site_access.log main;
    error_log /var/log/nginx/my_site_error.log warn;
    

4. 缓存与静态文件处理

为静态文件设置缓存策略,减少服务器压力:

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 7d;  # 缓存 7 天
    access_log off;
}

5. 防盗链与访问限制

防止图片被其他网站盗用:

location ~* \.(png|jpg|gif)$ {
    valid_referers none blocked server_names *.yourdomain.com;
    if ($invalid_referer) {
        return 403;
    }
}

六、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. 查看错误日志

    tail -f /var/log/nginx/error.log
    
  3. 重载配置

    sudo systemctl reload nginx
    
  4. 常见问题解决

    • 80 端口占用
      sudo lsof -i :80
      
    • 权限问题:检查文件和目录权限(如 ls -l /var/www/)。
    • 防火墙:确保允许 80/443 端口:
      sudo ufw allow 'Nginx HTTP'
      sudo ufw allow 'Nginx HTTPS'
      

七、进阶与优化方向

  1. 性能优化

    • 设置 worker_processes auto; 自动匹配 CPU 核心数。
    • 调整 worker_connectionskeepalive_timeout
    • 启用 HTTP/2:listen 443 ssl http2;
  2. 安全优化

    • 强制 HTTPS,禁用弱加密协议。
    • 添加安全 HTTP 头:
      add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
      add_header X-Frame-Options DENY;
      add_header X-Content-Type-Options nosniff;
      
  3. 模块与插件

    • 使用 Nginx 自带模块(如 Gzip、Rewrite)或第三方模块(如 Lua)。
  4. 监控与日志分析

    • 使用 Prometheus + Grafana 监控 Nginx 性能。
    • 将日志接入 Elastic Stack 或 Splunk 进行分析。

八、总结

  • Nginx 是 Web 服务领域的核心工具,掌握其基本功能(如 HTTP 服务器、反向代理、负载均衡、HTTPS)至关重要。
  • 通过学习安装、配置、调试,可根据业务需求灵活应用。
  • 建议参考 Nginx 官方文档 并结合实践加深理解。
  • 在生产环境中,注重安全高可用性,并进行充分测试和监控。

推荐学习步骤

  1. 熟悉基础命令:安装、启动、停止、重启,测试配置文件。
  2. 理解配置结构:掌握 nginx.confsites-* 目录的作用。
  3. 实现基本站点:搭建静态网站,配置日志和静态文件处理。
  4. 进阶功能:配置反向代理、负载均衡、HTTPS、防盗链等。
  5. 优化与监控:提升性能、增强安全、实现日志分析。

希望这份笔记对你学习 Nginx 有所帮助!祝你学习顺利,早日掌握 Nginx 的强大功能!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值