nginx配置:nginx.conf配置文件

news/2025/2/22 21:12:46

nginxconf_1">nginx.conf配置文件说明

基本结构

  1. 全局块:位于最外层,定义影响整个Nginx服务器的设置。
  2. 事件块:配置网络连接相关的设置。
  3. HTTP块:定义HTTP服务器以及反向代理、负载均衡等特性。
  4. Server块:定义虚拟主机,即响应哪些请求及如何响应。
  5. Location块:更精确地控制对特定URL路径的请求。

1. 全局配置

全局配置影响 Nginx 的整体运行,通常位于文件顶部。

nginx">user  nginx;  # 运行 Nginx 的用户和组
worker_processes  auto;  # 工作进程数,通常设为 CPU 核心数
error_log  /var/log/nginx/error.log warn;  # 错误日志路径和级别
pid        /var/run/nginx.pid;  # 主进程 PID 文件路径

2. 事件配置

事件配置控制 Nginx 处理连接的方式。

nginx">events {
    worker_connections  1024;  # 每个工作进程的最大连接数
    use epoll;  # 使用 epoll 事件模型(Linux)
    multi_accept on;  # 允许同时接受多个连接
}

3. HTTP 配置

HTTP 配置块包含所有与 HTTP 相关的配置。

nginx">http {
    include       /etc/nginx/mime.types;  # 包含 MIME 类型文件
    default_type  application/octet-stream;  # 默认 MIME 类型

    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;  # 访问日志路径和格式

    sendfile        on;  # 启用 sendfile 系统调用
    tcp_nopush     on;  # 优化数据包发送
    tcp_nodelay    on;  # 禁用 Nagle 算法

    keepalive_timeout  65;  # 保持连接的超时时间

    gzip  on;  # 启用 gzip 压缩
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;  # 压缩的文件类型

    include /etc/nginx/conf.d/*.conf;  # 包含其他配置文件
    include /etc/nginx/sites-enabled/*;  # 包含虚拟主机配置
}

4. Server 配置

Server 配置块定义虚拟主机,每个块对应一个域名或 IP 地址。

nginx">server {
    listen       80;  # 监听端口
    server_name  example.com;  # 服务器名称(域名)

    location / {
        root   /usr/share/nginx/html;  # 根目录
        index  index.html index.htm;  # 默认索引文件
    }

    error_page  404  /404.html;  # 404 错误页面
    location = /404.html {
        root   /usr/share/nginx/html;
    }

    error_page   500 502 503 504  /50x.html;  # 50x 错误页面
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

5. Location 配置

Location 配置块定义如何处理特定 URL 路径的请求。

nginx">location /images/ {
    root   /data;  # 文件根目录
    index  index.html;
}

location ~ \.php$ {
    proxy_pass   http://php_backend;  # 反向代理到 PHP 后端
    include      fastcgi_params;  # 包含 FastCGI 参数
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}

6. 反向代理配置

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

nginx">http {
    upstream backend {
        # 负载均衡算法: round-robin (默认), least_conn, ip_hash, 或者其他
        # 使用ip_hash实现简单的会话保持
        ip_hash;

        # 后端服务器列表
        server 192.168.1.101:8080 max_fails=3 fail_timeout=30s;  # 后端服务器 1
        server 192.168.1.102:8080 max_fails=3 fail_timeout=30s;  # 后端服务器 2
        
        # 备用服务器,在所有主服务器都不可用时启用
        server 192.168.1.103:8080 backup;
        
        # 健康检查(需要第三方模块或使用商业版)
        # check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        # check_http_send "HEAD /health HTTP/1.0\r\n\r\n";
        # check_http_expect_alive http_2xx http_3xx;
    }

    server {
        listen       80;
        server_name  example.com;

        location / {
            proxy_pass  http://backend;  # 反向代理到后端服务器
            
            # 设置HTTP头部信息
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;

            # 超时设置
            proxy_connect_timeout       60s;
            proxy_send_timeout          60s;
            proxy_read_timeout          60s;
            send_timeout                60s;

            # 缓冲区大小设置
            proxy_buffer_size           128k;
            proxy_buffers               4 256k;
            proxy_busy_buffers_size     256k;
            proxy_temp_file_write_size  256k;

            # 如果后端响应头中没有指定Content-Length,则允许流式传输
            proxy_buffering off;
        }
        
        # 错误页面处理
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}

7. SSL/TLS 配置

Nginx 支持 SSL/TLS,用于加密 HTTPS 流量。

nginx">server {
    listen       443 ssl;
    server_name  example.com;

    ssl_certificate      /etc/nginx/ssl/example.com.crt;  # SSL 证书
    ssl_certificate_key  /etc/nginx/ssl/example.com.key;  # SSL 私钥

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

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

主要的负载算法

1. 轮询(Round Robin)

  • 默认策略:如果没有指定其他策略,Nginx会使用轮询作为默认的负载均衡方法。
  • 工作原理:按照顺序依次将请求分配给每个后端服务器。当到达列表末尾时,重新从头开始。
  • 适用场景:适合所有后端服务器性能相近的情况。
nginx">upstream backend {
    server backend1.example.com;
    server backend2.example.com;
}

2. 最少连接(Least Connections)

  • 策略描述:将新请求分配给当前连接数最少的服务器。
  • 配置方式:通过least_conn指令启用。
  • 适用场景:适用于长连接或请求处理时间差异较大的情况,可以更均匀地分布负载。
nginx">upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
}

3. IP哈希(IP Hash)

  • 策略描述:基于客户端IP地址的哈希值来选择服务器,确保来自同一IP的请求总是被发送到相同的服务器上(除非该服务器不可用)。
  • 配置方式:通过ip_hash指令启用。
  • 适用场景:需要会话保持(sticky sessions)的情况下非常有用,例如用户登录状态需要在多个请求间保持一致。
nginx">upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}

4. 加权轮询(Weighted Round Robin)

  • 策略描述:允许为每个服务器设置权重,权重越高的服务器接收更多的请求。
  • 配置方式:直接在server指令中添加weight参数。
  • 适用场景:可以根据服务器性能或容量调整流量分配比例。
nginx">upstream backend {
    server backend1.example.com weight=3;
    server backend2.example.com;
}

5. 通用Hash(Generic Hash)

  • 策略描述:允许你定义一个自定义键(可以是文本、变量等),并根据这个键的哈希值来选择服务器。
  • 配置方式:通过hash指令和指定的键启用。
  • 适用场景:对于某些特定应用可能需要固定某类请求到特定服务器的情况。
nginx">upstream backend {
    hash $request_uri consistent;
    server backend1.example.com;
    server backend2.example.com;
}

注意这里的consistent关键字用于启用一致性哈希,这有助于减少缓存丢失问题。

6. 最少时间(Least Time,仅限Nginx Plus)

  • 策略描述:综合考虑平均响应时间和活跃连接数,选择最佳服务器。
  • 配置方式:这是Nginx Plus特有的功能,通过least_time指令启用。
  • 适用场景:优化响应速度的关键场景。
nginx">upstream backend {
    least_time header; # 或者 last_byte
    server backend1.example.com;
    server backend2.example.com;
}

7. 随机选择(Random,仅限Nginx Plus)

  • 策略描述:随机选择一台服务器,可以选择是否结合最小连接数或加权机制。
  • 配置方式:这也是Nginx Plus的功能之一。
nginx">upstream backend {
    random two least_conn;
    server backend1.example.com;
    server backend2.example.com;
}

上传or下载

Nginx本身是一个高性能的HTTP和反向代理服务器,主要用于处理静态文件服务、反向代理、负载均衡等任务。虽然Nginx的核心功能并不直接包括复杂的文件上传下载管理,但它可以通过一些配置和技术实现基本的文件上传和下载支持。

文件下载

对于文件下载,Nginx可以非常高效地提供静态文件服务。你只需要将文件存储在Nginx能够访问的目录中,并通过适当的配置来允许客户端访问这些文件即可。

nginx深色版本

nginx">server {
    listen 80;
    server_name example.com;

    location /downloads/ {
        alias /path/to/your/files/;
        auto_index on;  # 可选,开启目录浏览功能
    }
}

在这个例子中,当用户访问http://example.com/downloads/时,Nginx会从服务器上的/path/to/your/files/目录下查找对应的文件并返回给客户端。如果启用了auto_index on;,则还会显示该目录下的文件列表。(风险: 使用 Nginx 的 X-Accel-Redirect 实现安全下载)

nginx">location /protected-downloads/ {
    internal;
    alias /secure/path/to/files/;
}

文件上传

Nginx本身不直接支持文件上传处理,因为这是一个需要后台逻辑处理的操作(如验证文件类型、大小限制、保存文件到服务器等)。然而,你可以结合其他后端技术(如PHP、Python、Node.js等)来实现文件上传的功能,而Nginx作为前端反向代理来转发请求。

其他

server_name的基本使用

  1. 精确匹配
    • 直接写入完整的域名。
    • 示例:server_name example.com;
    • 影响:只有当请求的Host头完全匹配example.com时,此配置块才会处理该请求。
  2. 通配符匹配
    • 使用*来匹配任意数量的字符。
    • 前缀通配符:*.example.com,匹配所有子域名。
    • 后缀通配符:example.*,匹配所有顶级域下的example域名。
    • 示例:server_name *.example.com;
    • 影响:适用于任何以.example.com结尾的子域名请求。
  3. 正则表达式匹配
    • 使用~开头表示正则表达式匹配。
    • 示例:server_name ~^(www\.)?(.+)$;
    • 影响:可以灵活地定义复杂的匹配规则,比如忽略www.前缀等。

http://www.niftyadmin.cn/n/5862764.html

相关文章

LeetCode 2595.奇偶位数:位运算

【LetMeFly】2595.奇偶位数:位运算 力扣题目链接:https://leetcode.cn/problems/number-of-even-and-odd-bits/ 给你一个 正 整数 n 。 用 even 表示在 n 的二进制形式(下标从 0 开始)中值为 1 的偶数下标的个数。 用 odd 表示…

Lua C API:深入理解 lua_pushnumber 函数 — 将数字压入 Lua 栈中

在使用 Lua 与 C 进行交互时,Lua 提供了一套强大的 C API 来管理 Lua 状态机、操作栈上的数据。lua_pushnumber 是其中一个非常常用的函数,用于将一个数字值从 C 推送到 Lua 栈上。接下来,我们将详细讲解这个函数的用法,原理&…

人工智能之自动驾驶技术体系

自动驾驶技术体系 自动驾驶技术是人工智能在交通领域的重要应用,旨在通过计算机视觉、传感器融合、路径规划等技术实现车辆的自主驾驶。自动驾驶不仅能够提高交通效率,还能减少交通事故和环境污染。本文将深入探讨自动驾驶的技术体系,包括感…

文本分类与情感分析算法

引言 自然语言处理(NLP)作为人工智能的重要分支,致力于让计算机理解和处理人类语言。在这一领域中,文本分类和情感分析是两项基础且至关重要的任务。文本分类旨在将文本划分到预定义的类别中,而情感分析则关注于识别和提取文本中的情感倾向。本文将深入探讨文本分类和情感…

关于YApi接口操作

YApi有 接口集合 和 测试集合 两个概念。 接口集合 将接口进行分类,使接口结构更清晰,一个接口只能属于一个集合,且不允许与其他接口重名。测试集合 为了方便我们测试接口,测试集合 将若干接口组合在一起,在这里一个接…

本地部署DeepSeek的硬件配置建议

本地部署DeepSeek的硬件配置需求因模型参数规模和部署工具不同而有所差异,以下是综合多个来源的详细要求: 1. 基础配置(适用于7B参数模型) 内存:最低8GB,推荐16GB及以上;若使用Ollama工具&…

等保测评-GaussDB高斯数据库

查询版本:select version(); 或gaussdb --version 一、身份鉴别 a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换; 身份验证:是否采用用户名+密码或其他认证方式 唯一性(USESYSID):select * from pg_user; 复杂…

IntelliJ IDEA中Maven配置全指南

一、环境准备与基础配置 1.1 Windows 环境下载并配置 Maven 见此篇博文:环境配置 1.2 IDEA配置步骤 打开设置面板:File → Settings → Build → Build Tools → Maven 关键配置项: Maven home path E:\apache-maven-3.9.9 (…