首页 > 系统相关 >从零手写实现 nginx-17-nginx.conf 全局的默认配置

从零手写实现 nginx-17-nginx.conf 全局的默认配置

时间:2024-06-11 09:00:41浏览次数:20  
标签:return 17 实现 param nginx conf 手写

前言

大家好,我是老马。很高兴遇到你。

我们为 java 开发者实现了 java 版本的 nginx

https://github.com/houbb/nginx4j

如果你想知道 servlet 如何处理的,可以参考我的另一个项目:

手写从零实现简易版 tomcat minicat

手写 nginx 系列

如果你对 nginx 原理感兴趣,可以阅读:

从零手写实现 nginx-01-为什么不能有 java 版本的 nginx?

从零手写实现 nginx-02-nginx 的核心能力

从零手写实现 nginx-03-nginx 基于 Netty 实现

从零手写实现 nginx-04-基于 netty http 出入参优化处理

从零手写实现 nginx-05-MIME类型(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型)

从零手写实现 nginx-06-文件夹自动索引

从零手写实现 nginx-07-大文件下载

从零手写实现 nginx-08-范围查询

从零手写实现 nginx-09-文件压缩

从零手写实现 nginx-10-sendfile 零拷贝

从零手写实现 nginx-11-file+range 合并

从零手写实现 nginx-12-keep-alive 连接复用

从零手写实现 nginx-13-nginx.conf 配置文件介绍

从零手写实现 nginx-14-nginx.conf 和 hocon 格式有关系吗?

从零手写实现 nginx-15-nginx.conf 如何通过 java 解析处理?

从零手写实现 nginx-16-nginx 支持配置多个 server

从零手写实现 nginx-17-nginx 默认配置优化

从零手写实现 nginx-18-nginx 请求头+响应头操作

从零手写实现 nginx-19-nginx cors

从零手写实现 nginx-20-nginx 占位符 placeholder

从零手写实现 nginx-21-nginx modules 模块信息概览

从零手写实现 nginx-22-nginx modules 分模块加载优化

从零手写实现 nginx-23-nginx cookie 的操作处理

目标

这一节我们对 server 中的配置进一步优化,让用户使用起来更加方便。

配置的获取方式流程图:

获取方式

1)首先从当前 server 配置获取

2)不存在,则从全局的配置中获取

3)全局配置属性不存在,则直接从默认配置中获取。

核心代码调整

我们节选 2 个例子,配置的获取逻辑就变成下面的样子:

private List<String> getHttpServerGzipTypes(final NgxConfig conf, final NgxBlock serverBlock) {
    // value
    NgxParam param = serverBlock.findParam("gzip_types");
    if(param != null) {
        return StringUtil.splitToList(param.getValue(), " ");
    }
    // http 默认
    NgxParam httpParam = conf.findParam("gzip_types");
    if(httpParam != null) {
        return StringUtil.splitToList(httpParam.getValue(), " ");
    }
    return NginxUserServerConfigDefaultConst.gzipTypes;
}

private long getHttpServerGzipMinLen(final NgxConfig conf, final NgxBlock serverBlock) {
    // value
    NgxParam param = serverBlock.findParam("gzip_min_len");
    if(param != null) {
        return Long.parseLong(param.getValue());
    }
    // http 默认
    NgxParam httpParam = conf.findParam("gzip_min_len");
    if(httpParam != null) {
        return Long.parseLong(httpParam.getValue());
    }
    return NginxUserServerConfigDefaultConst.gzipMinLength;
}

private String getHttpServerGzip(final NgxConfig conf, final NgxBlock serverBlock) {
    // value
    NgxParam param = serverBlock.findParam("gzip");
    if(param != null) {
        return param.getValue();
    }
    // http 默认
    NgxParam httpParam = conf.findParam("gzip");
    if(httpParam != null) {
        return httpParam.getValue();
    }
    return NginxUserServerConfigDefaultConst.gzip;
}

小结

这种配置的默认获取,在技术的实现上难度一般。

这个实现后续可以考虑统一优化,因为存在重复性实现。

但是出发点是站在用户的使用角度,让用户的使用更加便捷。

标签:return,17,实现,param,nginx,conf,手写
From: https://www.cnblogs.com/houbbBlogs/p/18241457

相关文章

  • ARC179D Portable Gate
    题意简述有一棵树\(n\)个点,你有一个门,你现在从一个你选定的点开始走,目标是所有点都至少访问一次。每次你可以选择:经过一条树边走到相邻点,花费\(1\)。将门放在当前点。将自己传送到门所在的点。求最小花费。\(n\le2\times10^5\)。分析先考虑根(出发点)固定怎么做。由于......
  • Luogu P1784 数独 [ 模板 ] / P1074 靶形数独 题解 [ 蓝 ] [ 深搜 ] [ 剪枝 ] [ 卡常
    数独模板,靶形数独卡了2h,再也不想写数独了。思路显然是对每个格子进行枚举,类似八皇后的方法去做,朴素方法是由\((1,1)\)到\((9,9)\)遍历过去。优化我们人在做数独时,会优先选择已填格数多的行、列、区域,这样可以保证尝试次数少。同样,这一点在本题中也可以应用,但是有两......
  • nginx中的限速
    nginx中的限速分为限流量(limit_rate)、限数量(limit_req)、限连接(limit_conn)配置Limit_rate限制的是某个请求的response速率。不同请求间的response速率不受影响。配置方法:https://github.com/zongzw-learn/learn-nginx/blob/main/limit/limit_rate.yamlLimit_req限制......
  • 从零手写实现 nginx-15-nginx.conf 解析处理转换为 POJO
    前言大家好,我是老马。很高兴遇到你。我们为java开发者实现了java版本的nginxhttps://github.com/houbb/nginx4j如果你想知道servlet如何处理的,可以参考我的另一个项目:手写从零实现简易版tomcatminicat手写nginx系列如果你对nginx原理感兴趣,可以阅读:从零......
  • 运维系列:nginx 重启报nginx: [error] invalid PID number ““ in “/run/nginx.pid“
    这nginx重启报nginx:[error]invalidPIDnumber““in“/run/nginx.pid“nginx重启报nginx:[error]invalidPIDnumber““in“/run/nginx.pid“为何出现这种原因?解决方式:nginx重启报nginx:[error]invalidPIDnumber““in“/run/nginx.pid“......
  • 运维系列:redis.conf“ E212: 无法打开并写入文件
    redis.conf"E212:无法打开并写入文件redis.conf"E212:无法打开并写入文件Redis配置文件的E212错误解决方法介绍E212错误的原因E212错误表示无法打开并写入文件,这通常是由于以下几个原因造成的:解决方法1.权限问题2.文件不存在3.文件被锁定4.重启Redis服务流程图......
  • 在centos7.9下编译安装nginx1.16.1带fancyindex
    在centos7.9下编译安装nginx1.16.1带fancyindex文章目录前言一、安装环境centos7.9/nginx1.16.1/ngx-fancyindex-0.4.4二、需要达到的效果1.默认效果2.安装主题效果三、nginx编译安装1.安装依赖工具2.创建目录并下载Nginx及其模块3.运行编译与安装4.配置环境变......
  • CSP历年复赛题-P5017 [NOIP2018 普及组] 摆渡车
    原题链接:https://www.luogu.com.cn/problem/P5017题意解读:先将问题进行抽象、建模。设一条数轴,从左到右,每个点对应一个时刻,每个时刻可能有多个人到达,然后有若干个发车时刻,每两个发车时刻间隔必须>=m,每个人的等待时长就是到最近一个发车时刻的时间累加,计算所有人等待时间最小值。......
  • Nginx Rewrite
    目录1.常用的Nginx正则表达式2.location3.rewrite1.常用的Nginx正则表达式^:匹配输入字符串的起始位置$:匹配输入字符串的结束位置*:匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”+:匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll......
  • Leetcode-917
    题目917.仅仅反转字母难度:简单给你一个字符串s,根据下述规则反转字符串:所有非英文字母保留在原有位置。所有英文字母(小写或大写)位置反转。返回反转后的s。示例1:输入:s="ab-cd"输出:"dc-ba"示例2:输入:s="a-bC-dEf-ghIj"输出:"j-Ih-gfE-dCba"示例3:输入:s=......