nginx配置:nginx.conf配置文件

embedded/2025/2/22 17:57:49/

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;  # 后端服务器 1server 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_byteserver 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.ppmy.cn/embedded/164403.html

相关文章

汽车长期不保养的危害

汽车两三年不保养会对车辆的多个系统和部件产生严重危害,以下将详细阐述: 发动机系统 润滑系统问题 机油在发动机中起着润滑、冷却、清洁和密封的重要作用。长时间不更换机油,机油会因氧化、污染等原因变质,其润滑性能大幅下降。…

【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(二) -> tabs

目录 1 -> 创建Tabs 2 -> 设置Tabs方向 3 -> 设置样式 4 -> 显示页签索引 5 -> 场景示例 1 -> 创建Tabs 在pages/index目录下的hml文件中创建一个Tabs组件。 <!-- index.hml --> <div class"container" ><tabs> <tab-…

深入理解Zookeeper:分布式系统的协调者

引言 在现代分布式系统中&#xff0c;协调和管理多个节点之间的状态和行为是一个复杂且关键的任务。Zookeeper作为一个分布式协调服务&#xff0c;为开发者提供了一种高效、可靠的方式来处理分布式系统中的一致性问题。本文将介绍Zookeeper的基本概念、使用场景以及如何通过示…

Git是什么

简单介绍&#xff1a; Git是一个分布式版本控制系统&#xff0c;用于跟踪文件的更改&#xff0c;特别是在多人协作开发的环境中。 Key: 分布式 版本控制 系统 最常用于软件开发&#xff0c;但也可以用于管理任何类型的文件和文件夹。 Git帮助团队跟踪和管理文件的历史版本&a…

前端(AJAX)学习笔记(CLASS 2):图书管理案例以及图片上传

* BootStrap弹框 功能&#xff1a;不离开当前页面&#xff0c;显示单独内容&#xff0c;供用户操作 步骤&#xff1a; 1、引入bootstrap.css和bootstrap.js 2、准备弹框标签&#xff0c;确认结构 3、通过自定义属性&#xff0c;控制弹框的显示和隐藏 其中的bootstrap.css…

MAC快速本地部署Deepseek (win也可以)

MAC快速本地部署Deepseek (win也可以) 下载安装ollama 地址: https://ollama.com/ Ollama 是一个开源的大型语言模型&#xff08;LLM&#xff09;本地运行框架&#xff0c;旨在简化大模型的部署和管理流程&#xff0c;使开发者、研究人员及爱好者能够高效地在本地环境中实验和…

ML.NET库学习009:花卉图像分类模型

文章目录 ML.NET库学习009&#xff1a;花卉图像分类模型进行图像分类训练的实现功能分析代码结构核心组件示例输出代码实现详细步骤说明注意事项 进行图像分类预测的实现主要目的原理概述实现的主要功能主要流程步骤使用的主要函数和方法关键技术功能详细解读&#xff08;1&…

【Rust中级教程】1.15. Trait bounds(Trait 约束)的编译与分派

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 1.15.1. 静态分发(static dispatch) 编译泛型代码或者调用dyn Trait(详见【Rust自学】17.2…