回答
收藏
分享
举报
filter 缓存所有body
提问于2020-08-12 11:37

浏览 3.7k

各位大神好:

最近在做一个字符串替换模块,想要在所有要发出的html文件中,对所有的外链进行修改,在链接的最后加一个标识。因此想要将所有收到的html文件先全部缓存了之后再进行处理,以避免边界问题。但是对于缓存方式有些疑惑:

  1. 仅仅缓存收到的 in 数据中的 pos 与 last 指针,然后将 in 中的 pos 指向 last 传给下一个filter模块,让下一个filter模块不再进行处理;(该方案实践后成功,但是与sub filter模块一起使用时有些问题,不明白问题缘由)
  2. 仅缓存 in ,然后在自己的filter模块中直接 return NGX_OK;(该方案似乎不行,不交给接下来的模块进行处理直接返回NGX_OK会有些问题)
  3. 将所有收到的数据直接进行内存拷贝以缓存,该方案还未实施,考虑到性能比较差;

不知道各位大神有没有比较好的方案,若觉得 方案1,2 行不通的请告知缘由,万分感谢!

已修改于2023-02-22 02:12



写下您的回答
发表回答
全部回答(1)

按点赞数排序

按时间排序

性能最高的方案是在内存中用状态机来处理,比较复杂;最简单的方案是将响应缓存到文件中,再读取文件处理。

赞同

1

回复举报

回答于2020-08-13 18:06



回复陶辉
回复
提问者
小禾先生
这家伙很懒还未留下介绍~
0
文章
4
问答
0
粉丝
相关问答

这个模块修改了Nginx框架源码,所以你得先打patch,改完框架源码后,再用add-module来configure\make编译

点赞 0
浏览 4.4k

在一般的正则表达式中,`_.*` 表示匹配以下划线(_)开头的任意字符序列,其中 `.*` 表示匹配任意数量的任意字符。也就是:

- `_`:匹配下划线字符。

- `.*`:匹配任意数量(零个或多个)的任意字符。


因此,正则表达式 `_.` 可以匹配以下内容(以 `_` 开头的任意字符序列):


- `_abc`

- `_123`

- `_xyz123`


在给定的 NGINX 配置中,使用 `location ~ \.(_.*|DS_Store|Spotlight-V100|TemporaryItems|Trashes|hidden|localized)$ {}` 这个配置块可以用于匹配一系列文件和目录,包括两种情况:


1. 以下划线开头的文件或目录(例如,`_private`、`_hidden`)。

2. 特定文件或目录,如 macOS 中的 `.DS_Store`、`Spotlight-V100`、`TemporaryItems`、`Trashes`、`hidden` 和 `localized`。


看问题里这个配置块的目的感觉是为了阻止访问或执行某些特定文件或目录,增加服务器的安全性的吧,把这些特定的文件和目录列在配置块中,加上用正则表达式匹配,能有效地屏蔽对它们的访问。

点赞 0
浏览 3.4k
点赞 0
浏览 1.8k