nginx核心功能

发布于:2025-05-10 ⋅ 阅读:(22) ⋅ 点赞:(0)

一、基础架构与性能优势

  1. 事件驱动与异步非阻塞模型
    • 采用单线程或多进程(基于配置)的事件驱动架构,通过 epoll(Linux)、kqueue(BSD)等机制高效处理并发连接。
    • 异步非阻塞 I/O 模型,避免因等待 I/O 操作阻塞进程,适合高并发场景(如每秒数万请求)。
  2. 低资源消耗
    • 内存占用少,尤其在处理静态文件时,显著优于传统多线程服务器(如 Apache)。
  3. 多进程模式
    • 主进程(Master)负责管理配置和协调工作进程(Worker),Worker 进程处理实际请求,提升稳定性与扩展性。

二、核心功能详解

1. Web 服务器功能

  • 静态内容服务
    • 高效处理 HTML、CSS、JS、图片等静态文件,支持 sendfile 系统调用,减少内存拷贝。
    • 示例配置:

location /static/ {

    root /var/www/html;

    expires 30d; # 客户端缓存

}

  • 动态内容代理
    • 通过 FastCGI、uWSGI 等协议将动态请求(如 PHP、Python)转发至后端应用服务器。
    • 示例(PHP-FPM):

location ~ \.php$ {

    fastcgi_pass 127.0.0.1:9000;

    include fastcgi_params;

}

2. 反向代理

  • 请求转发
    • 将客户端请求转发至后端服务器,隐藏后端细节,提升安全性。
    • 示例:

location / {

    proxy_pass http://backend_servers;

    proxy_set_header Host $host;

}

  • SSL/TLS 终止
    • 在 Nginx 端解密 HTTPS 请求,减轻后端服务器负担。
    • 示例:

server {

    listen 443 ssl;

    ssl_certificate /path/to/cert.pem;

    ssl_certificate_key /path/to/key.pem;

    # 代理至HTTP后端

    proxy_pass http://backend;

}

  • WebSocket 支持
    • 通过 Upgrade 头代理 WebSocket 连接:

proxy_http_version 1.1;

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "upgrade";

3. 负载均衡

  • 算法支持
    • 轮询(Round Robin:默认策略,按顺序分配请求。
    • 加权轮询(Weighted Round Robin:按权重分配流量。
    • IP 哈希(IP Hash:基于客户端 IP 分配固定后端,保持会话一致性。
    • 最少连接(Least Connections:优先选择连接数最少的后端。
    • 示例配置:

upstream backend_servers {

    server 10.0.0.1 weight=3;

    server 10.0.0.2;

    server 10.0.0.3 backup; # 备用服务器

    least_conn;

}

  • 健康检查
    • 被动检查:通过失败重试机制(max_fails、fail_timeout)标记不可用节点。
    • 主动检查(需 Nginx Plus 或第三方模块):定期向后端发送探测请求。

4. 缓存机制

  • 代理缓存
    • 缓存后端响应,减少重复请求对后端的压力。
    • 配置示例:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m;

server {

    location / {

        proxy_cache my_cache;

        proxy_pass http://backend;

        proxy_cache_valid 200 302 10m; # 缓存200/302状态码10分钟

    }

}

  • FastCGI 缓存
    • 缓存动态内容(如 PHP 页面):

fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=fcgi_cache:10m;

location ~ \.php$ {

    fastcgi_cache fcgi_cache;

    fastcgi_cache_valid 200 5m;

}

5. 安全特性

  • 访问控制
    • IP 黑白名单:

location /admin/ {

    deny 192.168.1.100;

    allow 10.0.0.0/8;

    deny all;

}

    • HTTP 基础认证:

auth_basic "Restricted Area";

auth_basic_user_file /etc/nginx/.htpasswd;

  • 速率限制
    • 限制请求频率与并发连接数:

limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;

limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

location /api/ {

    limit_req zone=req_limit burst=20;

    limit_conn conn_limit 5;

}

  • DDoS 防护
    • 结合 limit_req、limit_conn 模块限制异常流量。

6. 高级路由与重写

  • URL 重写(Rewrite
    • 修改请求路径或重定向:

rewrite ^/old-url/(.*)$ /new-url/$1 permanent; # 301重定向

  • Location 匹配规则
    • 支持前缀匹配(/path/)、正则匹配(~* \.jpg$ 不区分大小写)等。

7. 日志与监控

  • 访问日志
    • 自定义日志格式与存储路径:

log_format main '$remote_addr - $request_time';

access_log /var/log/nginx/access.log main;

  • 错误日志
    • 记录服务器错误信息:

error_log /var/log/nginx/error.log warn; # 日志级别为警告及以上

8. 压缩与优化

  • Gzip 压缩
    • 减少传输数据量:

gzip on;

gzip_types text/plain application/json;

  • 文件传输优化
    • sendfile:零拷贝传输文件。
    • tcp_nopush:优化数据包发送效率。

9. 模块化扩展

  • 官方模块
    • 如 ngx_http_ssl_module(SSL 支持)、ngx_http_geoip_module(IP 地理定位)。
  • 第三方模块
    • 动态加载模块(Nginx 1.9.11+),如 ngx_http_lua_module(Lua 脚本支持)。

10. 邮件代理

  • 支持协议
    • SMTP、IMAP、POP3 代理,适用于邮件服务器负载均衡。

三、配置与管理

  • 热部署与平滑重启
    • 更新配置无需重启服务:nginx -s reload。
    • 二进制升级:替换可执行文件后通过信号通知主进程。
  • 多虚拟主机
    • 通过 server 块支持多域名托管:

server {

    listen 80;

    server_name example.com;

    # 配置...

}


四、典型应用场景

  1. 静态资源托管:直接高效提供静态文件。
  2. API 网关:路由、限流、认证一体化。
  3. 微服务入口:反向代理与负载均衡多个后端服务。
  4. 内容缓存:加速网站响应,降低后端负载。
  5. 安全防护:作为 SSL 终端和访问控制层。


网站公告

今日签到

点亮在社区的每一天
去签到