Nginx

简介

Nginx是一款高性能的开源Web服务器和反向代理服务器,由Igor Sysoev开发。它被广泛用于构建可扩展的、高性能的网站和应用程序。Nginx的设计目标是处理大量并发连接,提供高性能的静态文件服务,以及作为反向代理服务器来分发请求。

特点

Nginx具有以下主要特点:

  1. 高性能:Nginx采用事件驱动的异步架构,通过非阻塞I/O模型处理连接,能够同时处理大量并发连接,具有出色的性能表现。

  2. 轻量级:Nginx的代码精简,占用系统资源较少,启动速度快。这使得Nginx适用于资源有限的环境或嵌入式设备。

  3. 反向代理:Nginx可以作为反向代理服务器,接收客户端的请求,并将请求转发给后端的多个服务器。它可以实现负载均衡、缓存、SSL终止等功能。

  4. 静态文件服务:Nginx能够直接提供静态文件的服务,无需将请求转发给后端应用程序,从而减轻了动态请求的负载。

  5. 动态模块:Nginx支持动态模块的加载和扩展。这使得开发者可以根据需求,添加自定义的功能模块,以满足特定的需求。

Nginx配置文件

Nginx的主要配置文件是nginx.conf,位于Nginx安装目录下的conf文件夹中。配置文件采用简单的文本格式,使用#作为注释符号。

配置文件中的重要部分包括:

  • http块:定义HTTP服务相关的配置,包括全局配置、虚拟主机配置和HTTP请求处理配置。
  • server块:定义虚拟主机(server)的配置,包括监听端口、域名绑定、SSL证书配置等。
  • location块:定义请求的匹配规则和相应的处理方式,可以用于处理不同的URL路径。

下面是nginx.conf中常见的参数及其说明:

worker_processes

该参数指定Nginx的工作进程数量。通常设置为CPU核心数的倍数,以充分利用服务器的资源。

worker_processes  4;  # 设置为4个工作进程

events

该块用于配置Nginx的事件模块,包括连接数和工作进程模型。

events {
    worker_connections  1024;  # 设置每个工作进程的最大连接数
}

http

该块包含了HTTP服务相关的配置。

http {
    # 全局配置

    # 虚拟主机配置

    # HTTP请求处理配置
}

全局配置

全局配置包含了一些全局的设置,例如日志文件路径、MIME类型等。

http {
    # ...
    # 全局配置
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

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

    sendfile        on;
    tcp_nopush     on;
    # ...
}

虚拟主机配置

虚拟主机配置用于定义不同的服务器块(server block),每个服务器块可以监听不同的端口或域名,并具有独立的配置。

http {
    # ...

    # 虚拟主机配置
    server {
        listen       80;  # 监听80端口
        server_name  example.com;

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

        error_page  404  /404.html;
        error_page  500 502 503 504  /50x.html;
    }

    server {
        listen       443 ssl;  # 监听443端口,并启用SSL
        server_name  example.com;

        ssl_certificate  /path/to/certificate.crt;  # SSL证书路径
        ssl_certificate_key  /path/to/private_key.key;  # SSL私钥路径

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

HTTP请求处理配置

该部分用于配置HTTP请求的处理方式,例如请求匹配规则、反向代理、负载均衡等。

http {
    # ...

    # HTTP请求处理配置
    server {
        listen       80;
        server_name  example.com;

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

        location /api {
            proxy_pass http://backend-api;  # 反向代理到后端API服务器
        }

        location /static {
            alias  /var/www/static;  # 配置静态文件目录
        }
        # ...
    }
    # ...
}