当前位置: 首页 > article >正文

nginx配置:nginx.conf配置文件

nginx.conf配置文件说明

基本结构

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

1. 全局配置

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

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

2. 事件配置

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

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

3. HTTP 配置

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

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 地址。

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 路径的请求。

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 常用作反向代理,将请求转发到后端服务器。

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 流量。

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

2. 最少连接(Least Connections)

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

3. IP哈希(IP Hash)

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

4. 加权轮询(Weighted Round Robin)

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

5. 通用Hash(Generic Hash)

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

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

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

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

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

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

上传or下载

Nginx本身是一个高性能的HTTP和反向代理服务器,主要用于处理静态文件服务、反向代理、负载均衡等任务。虽然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 实现安全下载)

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.kler.cn/a/556830.html

相关文章:

  • spring中事务为什么会回滚?什么原理?
  • Vue 和 React 响应式的区别
  • 植物大战僵尸杂交版v3.2.1最新版本(附下载链接)
  • 1、Window Android 13模拟器 将编译的映像文件导入Android Studio
  • 《Zookeeper 分布式过程协同技术详解》读书笔记-2
  • [Android]AppCompatEditText限制最多只能输入两位小数
  • 在 VS Code 远程连接服务器时遇到 “Bad permissions“ 错误的解决方案
  • 如何在 Ubuntu 上安装 Docker:详细步骤指南
  • 关闭超时订单和七天自动确认收货+RabbitMQ规范
  • git 目前常用的一些命令整理记录
  • 安装Liunx(CentOS-6-x86_64)系统
  • 苍穹外卖day7 缓存菜品 SpringCache缓存套餐 增删改查购物车
  • Python:Matplotlib详细使用
  • 【RL Latest Tech】安全强化学习(Safe RL):理论、方法与应用
  • 贪心算法-买卖股票的最佳时机
  • 第四届图像、信号处理与模式识别国际学术会议(ISPP 2025)
  • VMware安装Centos 9虚拟机+设置共享文件夹+远程登录
  • docker独立部署milvus向量数据库
  • rust笔记8-Deref与隐式解引用强制转换
  • cesium视频投影