Nginx 核心功能

Nginx 是一个高性能的 Web 服务器反向代理服务器,广泛应用于处理静态内容、负载均衡、代理请求以及反向代理等场景。它不仅是一个Web服务器,还被广泛用作反向代理、负载均衡器、API 网关等多种用途。Nginx 以其高性能、低资源消耗和可扩展性而著称,尤其适合高并发的环境。

Nginx 核心功能

1. 反向代理

Nginx 可以作为 反向代理服务器,将客户端的请求转发到后端的服务器上。通过这种方式,可以隐藏真实的服务器,并提供负载均衡、缓存、SSL/TLS 协议等功能。

2. 负载均衡

Nginx 支持多种负载均衡算法,如:

  • 轮询(Round Robin):默认的负载均衡策略,按照顺序将请求分配给每个后端服务器。
  • 最少连接(Least Connections):将请求分配给当前连接数最少的服务器。
  • IP 哈希(IP Hash):根据客户端的 IP 地址哈希值将请求路由到指定的服务器。

3. 静态文件服务

Nginx 非常擅长提供静态内容服务(如 HTML、CSS、JS、图片等)。它使用异步事件驱动的架构,能够在高并发场景下提供高效的静态内容服务。

4. 反向代理缓存

Nginx 可以缓存后端服务器的响应,减少后端负载,并提升系统性能。通过配置缓存策略,Nginx 可以在缓存内容的有效期内,直接向客户端返回缓存的内容,而不需要每次都请求后端服务器。

5. SSL/TLS 加密

Nginx 支持 SSL/TLS 加密,提供 HTTPS 安全协议的支持。它可以处理 HTTPS 请求和解密,加快后端服务器的响应速度。

6. 请求限制

Nginx 支持对客户端请求进行限速、限制请求频率等操作,防止过多的请求对服务器造成负担。

7. 访问控制与身份验证

Nginx 可以通过配置 IP 白名单、黑名单、请求头限制等方式进行访问控制。同时,它也可以与外部身份验证系统(如 LDAP、HTTP 基本认证等)结合,控制对资源的访问。


Nginx 配置文件解析

Nginx 的配置文件通常位于 /etc/nginx/nginx.conf,并且配置文件的语法比较直观,主要由以下几个部分组成:

1. 全局设置

全局设置位于配置文件的顶部,主要用于设置一些全局性参数,比如用户权限、进程数量、工作模式等。

user  www-data;
worker_processes  4;
pid  /run/nginx.pid;

2. HTTP 块

HTTP 块是最常见的配置块,用于定义 HTTP 服务相关的设置,如日志、代理、负载均衡、缓存等。

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }

        error_page  404              /404.html;
        location = /40x.html {
        }
    }
}
  • server:一个虚拟主机配置块,代表一个独立的站点或服务。
  • location:指定 URL 路径匹配的规则,定义特定路径下的行为,如反向代理、文件路径等。

3. Server 块

Server 块用于定义单个虚拟主机配置。每个 server 块可以监听不同的端口和地址,并且可以根据请求的域名来选择性地配置不同的规则。

server {
    listen       80;
    server_name  example.com;

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

4. Location 块

Location 块用于根据请求的 URI 路径,指定请求的具体处理方式,可以定义路径转发、反向代理、静态文件处理等。

location /images/ {
    root /var/www/html;
}
  • location /images/:表示当请求路径以 /images/ 开头时,将会匹配该块并执行相应的操作。

5. Upstream 块(负载均衡)

upstream 用于定义一个后端服务器集群的负载均衡规则,可以为某个 server 配置一组可用的后端服务器。

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

常见 Nginx 配置项

  1. listen 指定 Nginx 监听的端口和地址。

    listen 80;
    
  2. server_name 用于指定虚拟主机的域名或 IP 地址,通常与 listen 配合使用。

    server_name example.com;
    
  3. root 指定网站根目录,用于处理静态文件的请求。

    root /usr/share/nginx/html;
    
  4. index 定义默认访问的首页文件,如 index.htmlindex.php

    index index.html index.htm;
    
  5. proxy_pass 用于将客户端请求转发到后端服务器,常用于反向代理。

    proxy_pass http://backend;
    
  6. error_page 用于定义错误页面的路径,例如 404 错误页面。

    error_page 404 /404.html;
    
  7. access_log 和 error_log 用于设置访问日志和错误日志的文件路径。

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    

Nginx 性能优化

  1. 工作进程数
    根据 CPU 核心数调整 worker_processes,可以提高并发性能。一般设置为 CPU 核心数的数量。

    worker_processes auto;
    
  2. 缓存
    Nginx 支持多种缓存机制,如代理缓存、静态文件缓存等。合理配置缓存可以减少对后端服务器的请求,提高性能。

  3. Gzip 压缩
    启用 Gzip 压缩,减少响应数据的大小,提升传输效率。

    gzip on;
    gzip_types text/plain text/css application/javascript;
    
  4. TCP连接优化
    使用 keepalive 可以减少 TCP 连接的建立与关闭,提升性能。

    keepalive_timeout 65;
    
  5. 反向代理优化
    对反向代理进行优化,减少与后端服务器的交互延迟,如配置代理缓存、调整 proxy_buffers 等。


Nginx 高可用性和容错

  1. 负载均衡
    Nginx 可配置为负载均衡器,将流量分发到多个后端服务器,增强系统的可用性和容错能力。

  2. 健康检查
    Nginx 结合健康检查工具,可以确保只将请求转发给健康的后端服务器。

  3. Failover(故障转移)
    配置镜像服务器或后备服务器,确保在主服务器故障时,流量能够自动切换到备份服务器。

  4. 限流和限速
    配置请求限流和限速策略,避免单一用户或恶意攻击占用大量资源,导致系统崩溃。


总结

Nginx 是一个轻量级、高性能、可扩展的 Web 服务器和反向代理服务器,适用于高并发、负载均衡、反向代理、API 网关等场景。它的事件驱动架构和高效的资源管理使其在处理大量并发连接时,能够维持低的资源消耗。合理配置 Nginx,可以显著提升 Web 服务的性能、可靠性和安全性。

 

Nginx 配置文件通常位于 /etc/nginx/nginx.conf,其中包含多种配置指令,定义了服务器的行为。以下是 Nginx 配置文件的主要结构和常见的配置示例,帮助你理解和配置 Nginx。

Nginx 配置文件结构

Nginx 配置文件分为几个部分:

  1. 全局配置(Global Configuration)
  2. 事件配置(Events Block)
  3. HTTP 配置(HTTP Block)
  4. Server 配置(Server Block)
  5. Location 配置(Location Block)

1. 全局配置(Global Configuration)

全局配置位于配置文件的最上面,影响整个 Nginx 进程的行为,如工作进程数、用户权限等。

user  nginx;  # 设置运行 Nginx 的用户
worker_processes  4;  # 设置工作进程数量,通常为 CPU 核心数
pid  /var/run/nginx.pid;  # 设置 Nginx 的进程 ID 文件路径

# 其他全局配置项
error_log  /var/log/nginx/error.log  warn;  # 设置错误日志的路径和日志级别

2. 事件配置(Events Block)

events 配置块主要用于设置 Nginx 的事件模型,例如工作连接数等。

events {
    worker_connections  1024;  # 设置每个 worker 进程的最大连接数
    use epoll;  # 使用 epoll 模式(适用于 Linux)
}

3. HTTP 配置(HTTP Block)

http 配置块包含了大多数与 HTTP 服务相关的设置,如静态文件处理、反向代理、负载均衡等。

http {
    include       mime.types;  # 加载 MIME 类型文件
    default_type  application/octet-stream;  # 设置默认文件类型
    access_log    /var/log/nginx/access.log;  # 设置访问日志路径

    sendfile on;  # 启用高效文件传输
    tcp_nopush on;  # 适用于高性能的传输控制

    keepalive_timeout  65;  # 设置客户端连接保持时间
    gzip on;  # 启用 Gzip 压缩
    gzip_types text/plain text/css application/javascript;  # 设置压缩的文件类型

    # 启用反向代理
    server {
        listen 80;  # 监听端口 80
        server_name example.com;  # 配置虚拟主机名

        location / {
            root   /usr/share/nginx/html;  # 设置静态文件路径
            index  index.html index.htm;  # 配置默认主页
        }
    }
}

4. Server 配置(Server Block)

server 配置块用于定义虚拟主机的设置,可以根据域名、IP 地址等来匹配请求。

server {
    listen 80;  # 监听 80 端口
    server_name www.example.com;  # 设置域名
    root /var/www/html;  # 配置网站根目录

    # 配置站点首页
    location / {
        index index.html;
    }

    # 错误页面设置
    error_page  404 /404.html;
    location = /404.html {
        root /var/www/html;
    }

    # 反向代理设置
    location /api/ {
        proxy_pass http://backend-server;  # 将请求转发到后端服务器
        proxy_set_header Host $host;  # 设置传递给后端的 Host 头
        proxy_set_header X-Real-IP $remote_addr;  # 转发客户端 IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

5. Location 配置(Location Block)

location 配置块用于根据请求的 URI 来匹配请求,进行 URL 路径控制、代理等操作。

示例 1:静态文件服务

location /images/ {
    root /var/www/html;  # 设置静态文件路径
    autoindex on;  # 启用目录浏览
}

示例 2:反向代理

location /api/ {
    proxy_pass http://backend-server;  # 转发到后端服务器
    proxy_set_header Host $host;  # 保持原始 Host 头
    proxy_set_header X-Real-IP $remote_addr;  # 转发客户端 IP
}

示例 3:设置缓存

location /assets/ {
    root /var/www/html;
    expires 30d;  # 设置缓存时间为 30 天
    add_header Cache-Control public;
}

示例 4:错误页面配置

location /404.html {
    root /usr/share/nginx/html;
}

6. 反向代理与负载均衡

http 块中,可以使用 upstream 配置来定义后端服务器集群,实现负载均衡。

http {
    upstream backend_servers {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend_servers;  # 将请求转发到负载均衡后端
        }
    }
}

7. SSL/TLS 配置

启用 HTTPS 需要配置 SSL/TLS 证书。Nginx 可以通过以下方式启用 SSL 支持:

server {
    listen 443 ssl;  # 启用 SSL 协议
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;  # 设置证书路径
    ssl_certificate_key /etc/nginx/ssl/example.com.key;  # 设置证书私钥路径

    ssl_protocols TLSv1.2 TLSv1.3;  # 限制使用的 SSL/TLS 协议
    ssl_ciphers 'HIGH:!aNULL:!MD5';  # 配置安全的加密套件

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

8. 日志配置

Nginx 支持配置访问日志和错误日志,可以指定日志文件的路径及格式:

http {
    access_log /var/log/nginx/access.log;  # 设置访问日志路径
    error_log /var/log/nginx/error.log warn;  # 设置错误日志路径和级别
}

9. 性能优化

Nginx 可以通过配置多项参数来优化性能:

  • worker_processes: 设置 Nginx 使用的工作进程数,通常根据 CPU 核心数来调整。
  • worker_connections: 设置每个工作进程允许的最大连接数。
  • keepalive_timeout: 设置客户端连接保持的时间。
worker_processes 4;  # 设置工作进程数为 4
worker_connections 1024;  # 每个工作进程的最大连接数
keepalive_timeout 65;  # 客户端连接保持 65 秒

10. 防火墙与安全配置

  • 限制请求速率:防止恶意请求过多。

    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    limit_req zone=one burst=5;
    
  • IP 白名单与黑名单

    location /admin/ {
        allow 192.168.1.0/24;  # 允许 IP 地址
        deny all;  # 拒绝所有其他 IP
    }
    

总结

Nginx 的配置文件结构清晰且灵活,可以实现多种功能,如反向代理、负载均衡、静态文件服务、安全控制等。通过调整不同的配置项,可以优化 Nginx 的性能和可靠性,并根据实际需求进行功能扩展。

 

你可能感兴趣的:(nginx)