nginx配置:nginx.conf配置文件

news2025/2/23 9:45:24

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.coloradmin.cn/o/2303858.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于 PyQt5 的聊天机器人程序(AI)

这是一个基于 PyQt5 的聊天机器人程序,通过 API 接入硅基流动(Silicon Flow)或其他的聊天服务,支持用户与聊天机器人进行交互。 API 设置:通过菜单栏的“设置”选项,用户可以修改 API 地址和 API 密钥。 设…

[实现Rpc] 服务端 | RpcRouter实现 | Builder模式

目录 项目服务端独用类的实现 1. RpcRouter类的实现 ServiceDescribe SDescribeFactory ⭕ Builder模式 1. 动机 2. 模式定义 3. 要点总结 4. 代码感受 ServiceManager RpcRouter 4. 代码感受 ServiceManager RpcRouter 前文我们就将 Rpc 通用类都实现完啦&#…

红外人体传感器选型和电路解析

红外人体传感器选型和电路解析 背景:想要制作一套IoT系统,基于HA构建上层管理,蓝牙和蓝牙MESH构建无线网络,以及多种传感器和控制器作为底层,其中人体红外传感器作为一个重要的选项,需要考虑好。 红外人体传…

rtthread的串口框架、485框架

一、串口接收超时中断的实现。 1. rtthread中定义的串口超时结构体 定义串口接收超时的结构体 CM_TMR0_TypeDef 为TM0的实例(实际有CM_TMR0_1 CM_TMR0_2 对应华大460的两个TMR0单元 ) channel 每个timer0有两个通道(TMR0_CHA、TMR0_CHB) clock 为FCG2_PERIPH_TMR0_1、FCG…

Embedding模型

检索的方式有那些 关键字搜索:通过用户输入的关键字来查找文本数据。 语义搜索:它的目标是理解用户查询的真实意图,不仅考虑关键词的匹配,还考虑词汇之间的语义 (文字,语音,语调...&#xff0…

最新扣子(Coze)案例教程:全自动DeepSeek 写影评+批量生成 + 发布飞书,提效10 倍!手把手教学,完全免费教程

👨‍💻群里有同学是做影视赛道的博主,听说最近DeepSeek这么火,咨询能不能用DeepSeek写影评,并整理电影数据资料,自动发布到飞书文档,把每天的工作做成一个自动化的流程。 那今天斜杠君就为大家…

Ubuntu 22.04安装K8S集群

以下是Ubuntu 22.04安装Kubernetes集群的步骤概要 一、设置主机名与hosts解析 # Master节点执行 sudo hostnamectl set-hostname "k8smaster" # Worker节点执行 sudo hostnamectl set-hostname "k8sworker1"# 所有节点的/etc/hosts中添加: ca…

Apifox 增强 AI 接口调试功能:自动合并 SSE 响应、展示DeepSeek思考过程

在现代的API接口调试中,效率和精确性对于开发者和测试人员来说至关重要。Apifox,作为一款功能强大的API管理和调试工具,近年来不断提升其用户体验和智能化功能。最近,Apifox 推出了增强版的AI接口调试功能,其中包括自动…

MATLAB基础学习相关知识

MATLAB安装参考:抖音-记录美好生活 MATLAB基础知识学习参考:【1小时Matlab速成教程-哔哩哔哩】 https://b23.tv/CnvHtO3 第1部分:变量定义和基本运算 生成矩阵: % 生成矩阵% 直接法% ,表示行 ;表示列 a [1,2,3;4,5,6;7,8,9];%…

DeepSeek赋能智慧文旅:新一代解决方案,重构文旅发展的底层逻辑

DeepSeek作为一款前沿的人工智能大模型,凭借其强大的多模态理解、知识推理和内容生成能力,正在重构文旅产业的发展逻辑,推动行业从传统的经验驱动向数据驱动、从人力密集型向智能协同型转变。 一、智能服务重构:打造全域感知的智…

蓝桥与力扣刷题(蓝桥 交换瓶子)

题目:有 N 个瓶子,编号 1 ~ N,放在架子上。 比如有 5 个瓶子: 2 1 3 5 4 要求每次拿起 2 个瓶子,交换它们的位置。 经过若干次后,使得瓶子的序号为: 1 2 3 4 5 对于这么简单的情况&#x…

腿足机器人之十一- 深度强化学习

腿足机器人之十一- 深度强化学习 机器人能力腿足机器人RL问题建模强化学习解决方案 强化学习算法库选择建议 深度学习技术已经在语音、图像、视频、文本等领域应用广泛,其和强化学习的结合使得基于深度学习的大模型能力更是上升一个台阶。因而用在腿足机器人的运动中…

纠错检索增广生成论文

一、摘要 动机:RAG严重依赖于检索文档的相关性,如果检索出错,那么LLM的输出结果也会出现问题 解决方案:提出纠正性检索增强生成(CRAG)即设计一个轻量级的检索评估器,用来评估针对某个查询检索…

多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题

多源 BFS 是一种解决 边权为 1 的多源最短路问题 的高效算法。其核心思想是将所有源点视为一个“超级源点”,通过一次 BFS 遍历即可计算所有节点到最近源点的最短距离。以下从原理、实现和代码示例三个方面深入讲解: 目录 一、原理分析 1. 单源 BFS vs…

Jenkins 构建 Unity 打包 .apk 同时生成 .aab

Jenkins 构建 Unity 打包 .apk 同时生成 .aab Android App Bundle简称 AAB,想了解更多关于 AAB 的知识,请看官网 https://developer.android.google.cn/guide/app-bundle/faq?hlzh-cn APK 打包部分在复用上一篇 Jenkins 构建 Unity打包APK 一、新建一…

清华大学第五弹:《DeepSeek与AI幻觉》

作者:清华大学新闻与传播学院新媒体研究中心、人工智能学院(新媒沈阳团队) 时间:2025年2月 完整版下载地址:夸克网盘分享 一、AI幻觉的定义与分类 定义 学术定义:模型生成与事实不符、逻辑断裂或脱离上下…

分布式数据库解析

title: 分布式数据库解析 date: 2025/2/20 updated: 2025/2/20 author: cmdragon excerpt: 通过金融交易、社交平台、物联网等9大真实场景,结合Google Spanner跨洲事务、DynamoDB毫秒级扩展等38个生产级案例,揭示分布式数据库的核心原理与工程实践。内容涵盖CAP定理的动态…

Zotero 快速参考文献导出(特定期刊引用)

目录 一、添加样式 每次投期刊时每种期刊的引用方式不一样,就很麻烦。发现zeotero添加期刊模板再导入很方便 一、添加样式 然后就能导出自己想要的期刊格式的引用了

库的制作与原理(一)

1.库的概念 库是写好的,现成的可以复用的代码。本质上库是一种可执行的二进制形式,可以被操作系统载入内存执行。库有俩种:静态库 .a[Linux] .lib[windows] 动态库 .so[Linux] .dll[windows] 就是把.c文件变成.o文件,把…

go 日志框架

内置log import ("log""os" )func main() {// 设置loglog.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)// 自定义日志前缀log.SetPrefix("[pprof]")log.Println("main ..")// 如果用format就用PrintF,而不是…