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

打印 上一主题 下一主题

主题 912|帖子 912|积分 2736

媒介

大家好,我是老马。很高兴遇到你。
我们为 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 个例子,设置的获取逻辑就变成下面的样子:
  1. private List<String> getHttpServerGzipTypes(final NgxConfig conf, final NgxBlock serverBlock) {
  2.     // value
  3.     NgxParam param = serverBlock.findParam("gzip_types");
  4.     if(param != null) {
  5.         return StringUtil.splitToList(param.getValue(), " ");
  6.     }
  7.     // http 默认
  8.     NgxParam httpParam = conf.findParam("gzip_types");
  9.     if(httpParam != null) {
  10.         return StringUtil.splitToList(httpParam.getValue(), " ");
  11.     }
  12.     return NginxUserServerConfigDefaultConst.gzipTypes;
  13. }
  14. private long getHttpServerGzipMinLen(final NgxConfig conf, final NgxBlock serverBlock) {
  15.     // value
  16.     NgxParam param = serverBlock.findParam("gzip_min_len");
  17.     if(param != null) {
  18.         return Long.parseLong(param.getValue());
  19.     }
  20.     // http 默认
  21.     NgxParam httpParam = conf.findParam("gzip_min_len");
  22.     if(httpParam != null) {
  23.         return Long.parseLong(httpParam.getValue());
  24.     }
  25.     return NginxUserServerConfigDefaultConst.gzipMinLength;
  26. }
  27. private String getHttpServerGzip(final NgxConfig conf, final NgxBlock serverBlock) {
  28.     // value
  29.     NgxParam param = serverBlock.findParam("gzip");
  30.     if(param != null) {
  31.         return param.getValue();
  32.     }
  33.     // http 默认
  34.     NgxParam httpParam = conf.findParam("gzip");
  35.     if(httpParam != null) {
  36.         return httpParam.getValue();
  37.     }
  38.     return NginxUserServerConfigDefaultConst.gzip;
  39. }
复制代码
小结

这种设置的默认获取,在技能的实现上难度一般。
这个实现后续可以考虑统一优化,因为存在重复性实现。
但是出发点是站在用户的使用角度,让用户的使用更加便捷。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表