跳转到内容

Nginx

来自代码酷
Nginx
Developer(s)Nginx, Inc. (现为F5 Networks所有)
Initial releaseOctober 4, 2004; 20 years ago (2004-10-04)
模板:Infobox software/simple
Repository
  • {{URL|example.com|optional display text}}
Written inC
Engine
    Operating system类Unix, Windows
    TypeWeb服务器, 反向代理, 负载均衡, HTTP缓存
    LicenseBSD-like
    Websitenginx.org

    Nginx(发音为"engine x")是一个高性能的HTTP反向代理服务器,也是一个IMAP/POP3代理服务器。由俄罗斯程序员Igor Sysoev开发,最初是为解决C10k问题(即单机同时处理1万个连接的问题)而设计。

    历史[编辑 | 编辑源代码]

    Nginx由Igor Sysoev于2002年开始开发,并于2004年首次公开发布。2011年,Nginx, Inc.公司成立,提供商业支持和Nginx Plus产品。2019年,Nginx, Inc.被F5 Networks以6.7亿美元收购。

    特性[编辑 | 编辑源代码]

    Nginx以其高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。主要特性包括:

    • 处理静态文件、索引文件以及自动索引
    • 反向代理与负载均衡
    • FastCGIuWSGISCGI支持
    • 模块化架构
    • SSLTLS支持
    • 虚拟主机支持
    • URL重写和重定向
    • 访问控制
    • gzip压缩
    • 日志记录
    • 带宽限制

    架构[编辑 | 编辑源代码]

    Nginx采用事件驱动、异步非阻塞的架构,这使得它能够高效地处理大量并发连接,同时保持低内存占用。

    graph TD A[主进程 Master Process] --> B[工作进程 Worker Process] A --> C[工作进程 Worker Process] A --> D[工作进程 Worker Process] B --> E[事件循环 Event Loop] C --> F[事件循环 Event Loop] D --> G[事件循环 Event Loop]

    配置[编辑 | 编辑源代码]

    Nginx的配置文件通常位于/etc/nginx/nginx.conf,采用层次化的指令结构。基本配置示例如下:

    # 全局配置
    user  nginx;
    worker_processes  auto;
    
    events {
        worker_connections  1024;
    }
    
    http {
        # HTTP服务器配置
        server {
            listen       80;
            server_name  example.com;
    
            location / {
                root   /usr/share/nginx/html;
                index  index.html index.htm;
            }
        }
    }
    

    常用场景[编辑 | 编辑源代码]

    静态内容服务[编辑 | 编辑源代码]

    Nginx非常适合提供静态内容,如HTML、CSS、JavaScript和图像文件。

    反向代理[编辑 | 编辑源代码]

    Nginx常被用作反向代理,将客户端请求转发到后端服务器:

    server {
        listen 80;
        server_name example.com;
    
        location / {
            proxy_pass http://backend_server;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    

    负载均衡[编辑 | 编辑源代码]

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

    upstream backend {
        least_conn;
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }
    
    server {
        location / {
            proxy_pass http://backend;
        }
    }
    

    HTTPS配置[编辑 | 编辑源代码]

    配置SSL/TLS加密:

    server {
        listen 443 ssl;
        server_name example.com;
    
        ssl_certificate /path/to/cert.pem;
        ssl_certificate_key /path/to/key.pem;
    
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    }
    

    性能优化[编辑 | 编辑源代码]

    • 调整worker_processesworker_connections
    • 启用gzip压缩
    • 配置缓存头
    • 使用sendfile指令
    • 限制客户端带宽
    • 启用keepalive连接

    与Apache的比较[编辑 | 编辑源代码]

    特性 Nginx Apache
    架构 事件驱动 进程/线程驱动
    内存使用 较低 较高
    静态内容性能 优秀 良好
    动态内容处理 需要外部处理器 内置模块支持
    配置语法 声明式 过程式
    .htaccess支持 不支持 支持

    扩展模块[编辑 | 编辑源代码]

    Nginx支持通过模块扩展功能,常见模块包括:

    相关技术[编辑 | 编辑源代码]

    • OpenResty - 基于Nginx的Web平台
    • Kong - 基于Nginx的API网关
    • Tengine - 淘宝开发的Nginx分支

    参见[编辑 | 编辑源代码]

    参考资料[编辑 | 编辑源代码]