Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >『学习笔记』Nginx 基础入门与配置详解

『学习笔记』Nginx 基础入门与配置详解

原创
作者头像
数字扫地僧
发布于 2024-11-23 03:05:04
发布于 2024-11-23 03:05:04
1890
举报
文章被收录于专栏:活动活动

🎈今日推荐——https://cloud.tencent.com/developer/article/2469533

BuildAdmin19:前端项目如何设计一个异步API请求模块——这篇文章介绍了如何在前端项目中设计一个异步API请求模块。文章详细讲解了使用axios创建实例、配置请求参数、设置拦截器,并封装了一个axios工具类。通过创建一个axios实例并配置基础参数,结合拦截器处理请求和响应,最后在api模块中调用封装好的请求方法,实现了前后端分离架构下的API请求。


Nginx 是一个轻量级、高性能的开源 Web 服务器和反向代理服务器,以其高并发处理能力和灵活的配置成为现代 Web 架构中不可或缺的一部分。

  1. 传统 Web 服务器的瓶颈 在高并发请求场景下,传统的 Web 服务器(如 Apache)由于线程和资源管理机制的限制,往往难以满足性能需求:
    • 每个请求对应一个线程,线程上下文切换开销大。
    • 资源利用率不高,难以支持大量并发连接。
  2. Nginx 的诞生 Nginx 于 2004 年由 Igor Sysoev 开发,最初用于俄罗斯最大的搜索引擎 Yandex。它基于事件驱动和异步非阻塞架构,能够高效处理大量并发请求,同时占用资源极少。
  • Nginx 的发展历程

时间节点

发展事件

2004

Nginx 发布第一个版本。

2011

Nginx 公司成立,推出商业版 Nginx Plus。

2019

F5 Networks 收购 Nginx,增强企业支持能力。

2023

Nginx 在云原生和微服务架构中应用广泛。

随着互联网业务规模的增长,Nginx 已从一个简单的 Web 服务器演变为支持反向代理、负载均衡、内容缓存以及安全网关等功能的全面解决方案。


Nginx 的核心特性与应用场景

核心特性

特性

描述

高并发

单进程多事件机制,每秒可处理数万并发连接。

反向代理

能够转发客户端请求到后端服务器,并实现负载均衡。

静态文件服务

高效提供静态资源,如 HTML、CSS、JS 和图片。

模块化设计

支持灵活扩展功能,如 Gzip 压缩、SSL、认证等模块。

热加载

配置文件修改后无需重启服务即可生效。

应用场景

场景

描述

Web 服务器

作为静态网站和动态内容的主要服务引擎。

反向代理服务器

分发请求到多个后端服务器,并隐藏真实服务器地址。

负载均衡器

在后端服务器之间分配流量,提升系统性能与可靠性。

缓存服务器

缓存静态和动态内容,减少服务器压力并提升访问速度。

安全网关

提供 HTTPS 加密、访问控制和防火墙功能。


Nginx 的安装与基础配置

安装 Nginx

  • Linux 上安装(以 Ubuntu 为例)

更新系统包管理器

代码语言:bash
AI代码解释
复制
sudo apt update

安装 Nginx:

代码语言:bash
AI代码解释
复制
sudo apt install nginx

启动并验证 Nginx:

代码语言:bash
AI代码解释
复制
sudo systemctl start nginx
sudo systemctl status nginx

测试服务是否运行:

在浏览器中访问 http://<服务器IP>,应该能看到默认的 Nginx 欢迎页面。

Nginx 的配置结构

Nginx 的主配置文件通常位于 /etc/nginx/nginx.conf。其结构如下:

代码语言:nginx
AI代码解释
复制
# 主配置部分
user www-data;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# 事件模块
events {
    worker_connections 1024;  # 每个 worker 的最大连接数
}

# HTTP 模块
http {
    include /etc/nginx/mime.types;  # 文件类型映射
    default_type application/octet-stream;
    
    sendfile on;
    keepalive_timeout 65;

    # 服务器配置
    server {
        listen 80;
        server_name localhost;

        location / {
            root /var/www/html;
            index index.html index.htm;
        }
    }
}

配置实例:静态文件服务

准备静态文件

将 HTML 文件放入 /var/www/mywebsite 目录。例如:

代码语言:bash
AI代码解释
复制
sudo mkdir -p /var/www/mywebsite
echo "<h1>Welcome to My Website</h1>" | sudo tee /var/www/mywebsite/index.html

配置 Nginx 服务

/etc/nginx/sites-available/mywebsite 中创建配置文件:

代码语言:nginx
AI代码解释
复制
server {
    listen 80;
    server_name mywebsite.com;

    location / {
        root /var/www/mywebsite;
        index index.html;
    }
}

创建符号链接并重载配置:

代码语言:bash
AI代码解释
复制
sudo ln -s /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

在浏览器中访问 http://mywebsite.com,应该能看到网站内容。


Nginx 的高级功能与配置

Nginx 不仅仅是一个简单的 Web 服务器,还可以通过配置实现反向代理、负载均衡、HTTPS 加密以及缓存等高级功能,为现代 Web 应用提供高性能和灵活的解决方案。

反向代理与负载均衡

反向代理是 Nginx 的核心功能之一,用于将客户端请求转发到后端服务器。同时,Nginx 提供多种负载均衡算法,将请求均匀分布到后端集群中,提高服务的可用性和性能。

常用负载均衡算法

Nginx 提供以下几种主要的负载均衡算法:

算法

描述

轮询(Round Robin)

默认算法,请求依次分发到每台后端服务器。

最少连接数(Least Connections)

将请求分发给当前活动连接数最少的服务器,适合处理长连接应用场景。

IP 哈希(IP Hash)

根据客户端 IP 计算哈希值,将请求固定分发到特定后端服务器,用于保持会话状态。

权重(Weight)

根据服务器的处理能力分配权重,权重高的服务器处理更多请求。

配置示例

假设有两台后端服务器,IP 地址分别为 192.168.1.101192.168.1.102,以下是 Nginx 的反向代理和负载均衡配置示例。

代码语言:nginx
AI代码解释
复制
# 定义后端服务器集群
upstream backend {
    server 192.168.1.101;  # 第一台服务器
    server 192.168.1.102;  # 第二台服务器
}

# 配置服务器监听端口
server {
    listen 80;  # 监听 HTTP 请求的端口

    location / {
        proxy_pass http://backend;  # 转发请求到 backend 集群
        proxy_set_header Host $host;  # 传递客户端的原始主机名
        proxy_set_header X-Real-IP $remote_addr;  # 将客户端 IP 转发到后端服务器
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 支持多级代理的客户端 IP 跟踪
    }
}

配置说明:

  • upstream backend 定义后端服务器的地址列表。
  • proxy_pass http://backend 将所有客户端请求转发到后端集群。
  • proxy_set_header 负责设置请求头信息,确保后端服务器能够识别客户端的原始请求。

配置验证与测试

确认 Nginx 配置语法正确:

代码语言:bash
AI代码解释
复制
sudo nginx -t

重启 Nginx 服务应用新配置:

代码语言:bash
AI代码解释
复制
sudo systemctl reload nginx

模拟客户端请求,观察请求是否被均匀分发:

代码语言:bash
AI代码解释
复制
curl -I http://<nginx_server_ip>

HTTPS 配置

HTTPS 是加密的 HTTP 通信协议,通过 SSL/TLS 提供数据加密身份验证,保护数据传输的安全性。Nginx 提供完善的 HTTPS 支持,并可与免费的 Let's Encrypt 证书工具集成。

准备工作

安装 Let's Encrypt 的 Certbot 工具:

代码语言:bash
AI代码解释
复制
sudo apt install certbot python3-certbot-nginx

获取免费 SSL/TLS 证书

运行以下命令获取证书并自动配置 Nginx:

代码语言:bash
AI代码解释
复制
sudo certbot --nginx -d example.com

说明:

  • -d example.com 指定域名,请替换为实际的域名。
  • Certbot 会自动检测 Nginx 的配置文件并插入 HTTPS 支持。

配置示例

生成的 HTTPS 配置类似如下:

代码语言:nginx
AI代码解释
复制
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;  # 强制将 HTTP 重定向到 HTTPS
}

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

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;  # SSL 证书路径
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;  # 私钥路径

    location / {
        root /var/www/html;
        index index.html;
    }
}

配置验证与续期

验证配置文件:

代码语言:bash
AI代码解释
复制
sudo nginx -t

重载 Nginx 配置:

代码语言:bash
AI代码解释
复制
sudo systemctl reload nginx

自动续期证书: Certbot 默认安装了 cron 任务来自动续期证书,无需手动干预。

缓存配置

Nginx 的缓存功能通过存储后端服务器的响应数据,提高客户端请求的响应速度,同时减少后端负载。

缓存路径与参数

http 模块中添加缓存路径配置:

代码语言:nginx
AI代码解释
复制
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;

参数说明:

  • /var/cache/nginx:缓存文件存储路径。
  • levels=1:2:缓存文件存储目录的层级结构。
  • keys_zone=my_cache:10m:定义缓存区域名称和共享内存大小。
  • inactive=60m:未被访问的缓存内容会在 60 分钟后过期。
  • max_size=1g:限制缓存占用磁盘空间为 1GB。

配置缓存使用

在特定的 serverlocation 块中启用缓存:

代码语言:nginx
AI代码解释
复制
server {
    listen 80;

    location / {
        proxy_cache my_cache;  # 启用缓存
        proxy_pass http://backend;
        add_header X-Cache-Status $upstream_cache_status;  # 添加缓存状态到响应头
    }
}

说明:

  • proxy_cache my_cache 指定缓存区域。
  • add_header X-Cache-Status $upstream_cache_status 返回缓存命中状态,如 HITMISSEXPIRED

验证缓存功能

重启 Nginx:

代码语言:bash
AI代码解释
复制
sudo systemctl reload nginx

访问目标 URL,并观察返回头部信息:

代码语言:bash
AI代码解释
复制
curl -I http://<nginx_server_ip>

验证 X-Cache-Status 是否为 HIT 表示缓存生效


Nginx 的性能调优

基础优化参数

参数

描述

worker_processes

设置为 CPU 核心数,提升并发性能。

worker_connections

每个 worker 的最大连接数。

sendfile

启用高效文件传输模式。

实践建议

  • 使用
代码语言:bash
AI代码解释
复制
gzip

压缩响应数据,减少传输量:

代码语言:nginx
AI代码解释
复制
gzip on;
gzip_types text/plain text/css application/json;
  • 启用 HTTP/2,提高多路复用能力:
代码语言:nginx
AI代码解释
复制
listen 443 ssl http2;

Nginx 凭借其轻量化和高性能的架构,已成为现代 Web 架构的核心组件之一。从静态文件服务到复杂的反向代理和负载均衡,它都能胜任。同时,通过持续学习和优化配置,可以充分发挥 Nginx 的潜力,为企业带来高效可靠的 Web 服务。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档