Nginx配置文件

news/2024/11/13 18:14:36/文章来源:https://www.cnblogs.com/my-king/p/18539188

Nginx配置文件

Nginx配置文件主要有以下几个部分构成,并且嵌套结构如下:

全局配置
http { # http 块server{ # server 块location { #location块}}
}

全局配置

全局配置位于配置文件的最上方,用于设置 Nginx 的一些基本行为。平时使用基本也用不着修改。

user www-data;                      # 设置工作进程的用户
worker_processes auto;              # 设置工作进程数量,通常为 CPU 核数
error_log /var/log/nginx/error.log;  # 设置错误日志
pid /var/run/nginx.pid;             # 设置 pid 文件路径
events {                           worker_connections 1024;        #指定每个工作进程的最大并发连接数。
}

http 块

http 块是 Nginx 配置的核心,定义了 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;sendfile on;                      # 启用高效文件传输
tcp_nopush on;                    # 用于优化大文件传输
tcp_nodelay on;                   # 减少延迟
keepalive_timeout 65;              # 设置持久连接的超时时间
types_hash_max_size 2048;          # 设置类型哈希表最大大小include /etc/nginx/mime.types;     # 加载MIME类型
default_type application/octet-stream;

其中log_format是access log的日志格式,可以根据自己的需要添加或者减少字段,每一个字段都会打出来,如果为空日志中会以-形式占位。

nginx配置文件是自上而下的顺序执行,如果log_format配置在http块的最前面,那么日志会在nginx收到请求就打出来,如果配置在server块,或者location块里面,那么只有满足对应的配置条件,才会输出日志。

具体参数说明如下:

参数                      说明                                        
$remote_addr             客户端地址                               
$remote_user             客户端用户名称                         
$time_local              访问时间和时区                                
$request                 请求的URI和HTTP协议                          
$http_host               请求地址,即浏览器中你输入的地址(IP或域名)      
$status                  HTTP请求状态                                  
$upstream_status         upstream状态                                 
$body_bytes_sent         发送给客户端文件内容大小                        
$http_referer            url跳转来源                              
$http_user_agent         用户终端浏览器等信息                        
$ssl_protocol            SSL协议版本                           
$ssl_cipher              交换数据中的算法                        
$upstream_addr           后台upstream的地址,即真正提供服务的主机地址    
$request_time            整个请求的总时间                             
$upstream_response_time  请求过程中,upstream响应时间              

server 块

server 块用于定义一个虚拟主机配置。每个http可以包含多个serer,每个 server 块可以包含多个 location 块,每个 location块用来处理特定的 URL 请求。

listen 80;                       # 监听 80 端口(HTTP)
server_name example.com;          # 配置服务器域名

location 块

location 块用于定义如何处理特定 URL 路径的请求。Nginx 会根据请求的 URI 匹配 location块。这里也是我用到最多的地方。

location [modifier] /uri/ {# 配置项
}
  • modifier(可选):location 指令可以使用不同的匹配修饰符(例如:=~~*)。

  • /uri/:指定需要匹配的 URI 路径,可以是精确路径、前缀路径或正则表达式。

location 块的匹配规则有几种常见方式:

  • 精确匹配 location = /path:完全匹配该路径。
  • 前缀匹配 location /path/:匹配以 /path/ 开头的路径。
  • 正则匹配 location ~ /pattern:匹配正则表达式模式。
  • 不区分大小写的正则匹配 location ~* /pattern:匹配不区分大小写的正则表达式模式。

而这四种匹配的优先级并不是按照配置文件的自上而下一个个匹配的,而是先按照优先级,然后再自上而下匹配。

  1. 精确匹配 (=):最优先匹配。如果请求的 URI 完全与 location = /uri 相同,则直接匹配。

  2. 最长前缀匹配:匹配以 /uri/ 开头的最长路径。

  3. 正则匹配 (~~\*):在没有精确匹配和前缀匹配的情况下,使用正则表达式进行匹配。正则表达式的匹配顺序是自上而下,直到找到第一个匹配项为止。

匹配成功之后,有以下几种处理方式

  • proxy_pass:用于反向代理,将请求转发到后端服务器。

  • rootalias:用于指定文件系统中的根目录或别名。

  • rewrite:用于重写 URL。

  • fastcgi_passuwsgi_passscgi_pass:用于与 FastCGI、uWSGI 或 SCGI 后端通信。

  • return:用于返回特定的状态码和内容。

proxy_pass

使用proxy_pass可以将请求,转发到后端服务器,并且可以决定转发的时候携带哪些信息,具体携带那些信息可以参考前面access log的配置。

location /api/ {proxy_pass http://backend_server;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_pass具体请求要不要携带匹配到的路径,是一个容易混淆的点。

这里主要看proxy_pass代理的URL后面是否有 /

  • 有,不会携带匹配到的路径

    比如 proxy_pass http://backend_server,代理后的路径就是proxy_pass http://backend_server/api

  • 没有,会携带匹配后的路径

    比如 proxy_pass http://backend_server,代理后的路径就是proxy_pass http://backend_server/

静态资源

location /static/ {root /var/www/html;  # 指定静态文件所在的根目录
}

try_files

try_files 用于按顺序尝试访问多个文件或路径,通常用于文件或页面不存在时的备用处理。

location / {try_files $uri $uri/ /index.html;  # 尝试查找文件,如果找不到则返回 index.html
}

重定向

可以使用 returnrewrite 进行 URL 重定向:

示例:使用 return 进行重定向

location /old-page {return 301 /new-page;  # 重定向到新的 URL
}

示例:使用 rewrite 重写 URL

location /old-page {rewrite ^/old-page$ /new-page permanent;  # 使用正则表达式重写 URL
}

当使用rewrite的时候,其实质是对原有访问url的修改,并且把修改后的地址返回给浏览器,浏览器收到之后重新新请求新地址。

location 中的变量

location 配置中,可以使用 Nginx 提供的变量来动态处理请求。常见的变量包括:

  • $uri:请求的 URI。
  • $remote_addr:客户端 IP 地址。
  • $query_string:请求的查询字符串。
  • $request_uri:完整的请求 URI(包括查询字符串)。
location /images/ {root /var/www/images/$remote_addr;  # 根据客户端 IP 动态选择文件夹
}

几种常见配置

  • 设置文件上传的大小限制。

    http{client_max_body_size 10M;  # 设置最大上传文件大小为 10MB
    }
    
  • SSL 配置 (SSL Configuration)

    server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;location / {root /var/www/html;}
    }
    
  • 自定义错误页面

    server {listen 80;server_name example.com;error_page 404 /404.html;  # 配置 404 错误页面location = /404.html {root /usr/share/nginx/html;}
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/831700.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

乐维网管平台(六):如何正确管理设备端口

一、什么是端口下联 在网络环境中,端口下联是指网络设备(通常是交换机)的端口与其他设备相连接的一种网络架构关系。交换机作为网络中的核心连接设备,其端口下联可以连接多种类型的终端设备,如计算机、服务器、IP 电话等,也可以连接下级网络设备,如接入层交换机连接到汇…

自动驾驶中的ego states包含的内容

截图来自论文:[2305.10430] Rethinking the Open-Loop Evaluation of End-to-End Autonomous Driving in nuScenes

ABB机器人维修之IRB 4600助力半导体晶圆

"ABB机器人:半导体晶圆运输盒拆包自动化的革新方案 在现代电子设备中,半导体无疑扮演着至关重要的角色,而其制造过程之精密复杂,更是令人叹为观止。然而,在半导体必要材料——晶圆于各机器或工厂间频繁转移的过程中,如何有效减少其所受的污染与损耗,却始终是一大亟…

如何处理微信小程序大量未捕获的异常

1)如何处理微信小程序大量未捕获的异常2)如何关闭代码创建的纹理的读写,或者创建不带读写的图片3)回收带有贴图和Collider的Mesh,如何正确用对象池维护4)Cloth组件使用在一个篮筐上,运行后篮网扭曲,是什么原因这是第408篇UWA技术知识分享的推送,精选了UWA社区的热门话…

2024年最新21款精品项目管理软件推荐:提高工作效率必备

在项目管理中,选择合适的软件工具能显著提高工作效率,优化团队协作,增强项目透明度和跟踪能力。以下是2024年最新、最受欢迎的20款精品项目管理软件推荐,它们涵盖了不同团队规模、行业需求以及功能特点,帮助用户更好地管理任务、时间、资源和预算。 1. 禅道 (ZenTao)功能:…

代码随想录之滑动窗口、Java日期api、集合(11.4-11.11)

代码 1、长度最小的子数组⭐ 使用滑动窗口的思想,外层循环控制结束位置j,内层循环控制起始位置i,看似是双层循环,但时间复杂度是o(2n)。 2、水果成篮 自己想法:使用backet1和backet2表示篮子1和篮子2;使用backet1Account和backet2Account分别表示两个篮子里水果的数量,内…

90%的项目经理都在使用的15款项目管理工具清单

以下是 90% 项目经理常用的项目管理工具清单。它们帮助项目经理规划、组织、执行和监控项目,确保项目按时、按预算完成,并满足项目目标。 1. 禅道(Zentao)用途:项目管理、需求管理、任务分配、缺陷跟踪。 特点:完全开源,适合中小型企业。 提供从需求、开发、测试到交付的…

2024年项目管理趋势预测:大厂都在关注什么?

在2024年,项目管理的趋势继续受到技术、远程工作和敏捷方法等多种因素的影响。大厂和各行业领先企业都在关注以下几个关键趋势: 1. AI与自动化的深度集成 人工智能(AI)和自动化技术的引入,正在极大改变项目管理的方式。大厂越来越多地依赖AI来预测项目风险、自动化重复性任…

2024年产品经理必备:10款最佳项目管理软件推荐

在2024年,产品经理的工作越来越依赖于高效的项目管理工具。项目管理软件不仅能帮助团队协作、跟踪进度,还能帮助规划任务、管理预算、识别风险和收集反馈等。随着技术的发展,市场上出现了各种类型的项目管理软件,各具特色,能够满足不同产品经理的需求。以下是2024年产品经…

禅道、Jira与Ones对比:2024年项目管理平台谁更适合你的团队?

在2024年,选择一个合适的项目管理平台对于团队的高效协作至关重要。禅道、Jira 和 Ones 都是目前市场上较为流行的项目管理工具,它们各有优势和特点,适合不同需求的团队。以下是对这三款工具的对比分析,帮助你选择最适合你团队的项目管理平台。 1. 禅道 禅道是一个国产的开…

2024年最优秀的10款项目管理工具,项目经理必看!

在2024年,随着企业的数字化转型,项目管理工具变得越来越多样化,涵盖了从敏捷开发、团队协作到复杂企业项目管理等各类需求。以下是10款值得项目经理关注的优秀项目管理工具,它们涵盖了不同规模和需求的团队,帮助提升团队效率、项目透明度及交付质量。1. Jira Jira 是一款强…

KubeSphere 社区双周报| 2024.10.25-11.07

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2024.10.25-11.07。 贡献者名单新晋 KubeSphere co…