Nginx — http、server、location模块下配置相同策略优先级问题

一、配置优先级简述

在 Nginx 中,httpserverlocation 模块下配置相同策略时是存在优先级的,一般遵循 "范围越小,优先级越高" 的原则,下面为你详细介绍:

1. 配置继承关系

  • http :作为全局配置块,其中的配置会对所有的 server 块生效,属于最宽泛的配置范围。
  • server :定义虚拟主机,其配置会覆盖 http 块中相同的配置,适用于特定的域名或 IP 地址。
  • location :处于 server 块内部,用于匹配特定的 URI 路径,其配置会覆盖 server 块和 http 块中相同的配置,是最精细的配置范围。

二、实验验证

以日志配置为例

实验准备:

步骤一:在http模块定义日志

配置在http块下配置日志

bash 复制代码
http {
    ...
    #配置日志
    log_format myformat '访问URL: $request_uri';
    access_log logs/http.log myformat;
    ...
}

步骤二:在server和location块下定义日志

bash 复制代码
server {
    ...
    access_log logs/server.log myformat;
    ...

    location /location {
        ...
        access_log logs/location.log myformat;
        ...
    }
}

步骤三:定义两个server 三个访问url

server配置

bash 复制代码
server {
    listen      443 ssl;
    ssl_certificate /usr/local/nginx/conf/ssl/gateway.crt;
    ssl_certificate_key /usr/local/nginx/conf/ssl/gateway.key;
    server_name  192.168.72.130;
    root /opt/xxx;
    location /http {
        #这里设置内部重定向,将http开头的请求重定向到根目录下
        rewrite ^/http(.*)$ /$1 break;
        # 开启目录列表展示功能
        autoindex on;
        # 以可读格式显示文件大小
        autoindex_exact_size off;
        # 以本地时间显示文件修改时间
        autoindex_localtime on;
        }
}

server {
    listen 80;
    server_name 192.168.72.130;  # 替换为你的域名
    gzip on;
    #配置日志
    access_log logs/server.log myformat;

    # 网站根目录,即要暴露内容的目录
    root /opt/xxx;

    location /server {
        #这里设置内部重定向,将server开头的请求重定向到根目录下
        rewrite ^/server(.*)$ /$1 break;
        # 开启目录列表展示功能
        autoindex on;
        # 以可读格式显示文件大小
        autoindex_exact_size off;
        # 以本地时间显示文件修改时间
        autoindex_localtime on;
    }

    location /location {
        #这里设置内部重定向,将 /location 开头的请求重定向到根目录下
        rewrite ^/location(.*)$ /$1 break;
        #配置日志
        access_log logs/location.log myformat;
        # 开启目录列表展示功能
        autoindex on;
        # 以可读格式显示文件大小
        autoindex_exact_size off;
        # 以本地时间显示文件修改时间
        autoindex_localtime on;
    }
}

三、实验结果

因为在location中有定义日志所以日志输出直接采用location中的策略

因为在location中没有定义日志所以日志输出采用server中的策略

因为在location和server中都没有定义日志,所以日志输出采用server中的策略

结论:

在 Nginx 中,httpserverlocation 模块下配置相同策略时是存在优先级的,一般遵循 "范围越小,优先级越高" 的原则,

相关推荐
沸速存储4 小时前
整机瓶颈判断思路,自上而下定位卡顿根源
运维·服务器·电脑·内容运营
奈斯先生Vector5 小时前
告别工具碎片化:基于 Nano Banana 全模态 AI 聚合架构搭建“文本-图像-视频”自动化协同生产线
运维·数据库·人工智能·架构·自动化·aigc·音视频
DLYSB_6 小时前
AIOps 大模型实战:基于 LangChain 运维 Agent 的根因诊断与现场声光播报闭环
运维·langchain·报警灯
一可米8 小时前
gitHub.com Actions自动化发布
运维·自动化·github
智塑未来8 小时前
证券公司智能运维平台哪个品牌做得好?擎创科技智能运维 2.0 适配券商全场景
运维·科技·区块链
酷可达拉斯9 小时前
自动化运维-ansible配置文件与主机清单
linux·运维·自动化·ansible
来者皆善10 小时前
ZYNQ linux上使用 USB CDC ACM
linux·运维·服务器
4/5$全真龙门10 小时前
廉价易行的内网穿透
运维
缓慢更新11 小时前
企业档案管理系统迁移实录:从文件服务器到智能检索引擎
运维·服务器
☆凡尘清心☆11 小时前
CentOS Stream 9 专用 LNMP 全自动一键脚本
linux·运维·mysql·nginx·lnmp·centos stream 9