问题标签 [nginx-module]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
92 浏览

nginx - 如何使用 nginx 模块中的 URL 加载文件?

我正在编写一个 nginx 模块,该模块预计会在向客户端发送回复之前加载加载远程文件。

用户在 URL 中传递一个 ID。我使用该 ID 将 URL 加载到远程文件。我的测试看起来像这样:

id123被转换为 URL,例如

现在我需要cute.png从我的nginx模块中加载。我可以用一个ngx_request或一个来做到这一点ngx_upstream吗?我无法找到任何明确的文档来说明如何做到这一点......


更新:

我现在(终于!)找到了子请求功能

但是,我收到以下 HTML 代码的 404 错误,而不是来自 3rd 方网站的答案:

我的感觉是,现在它查询我的 nginx 服务器,而不是使用外部 TCP 连接从 3rd 方网站获取文件......

知道为什么这么简单的陈述会出错吗?

0 投票
1 回答
604 浏览

c - Nginx 模块编写:如何将请求转发到服务器?

我使用 nginx 作为反向代理,我一直在尝试编写一个 nginx 模块来处理传入的请求,如果它喜欢请求中存在的某些 HTTP 标头,nginx 将允许请求到达受保护的服务器(在nginx 代理)。现在,我已经成功实现了标头处理,但我一直在弄清楚如何将请求转发到服务器。

到目前为止,我已经研究了子请求,但我尝试的代码(或从现有模块复制,例如ngx_http_addition_filter_module!)似乎都不起作用。要么我陷入一个循环,其中有 100 多个子请求被触发,要么什么都没有发生。我一直在尝试使用的代码:

处理ngx_http_foo_subrequest_done程序如下所示:

请指教我做错了什么!

0 投票
0 回答
185 浏览

c - Nginx 模块:如何从过滤器重定向?

我正在编写一个自定义 nginx 模块,在其中使用过滤器进行一些处理。过滤器的设置如下所示:

我正在此body过滤器中处理一些逻辑,并且在某种情况下,我想在客户端的浏览器中执行重定向到 localhost。过滤器主体代码如下所示:

我尝试过的事情:
- 将 Location 标头和 headers_out.status 设置为 302,但它向客户端返回一个空响应
- 设置 headers_out.location 但这仍然返回一个空响应
- 调用 ngx_http_send_header(r) 但这会返回一个 NGX_ERROR 响应

如何通过重定向响应客户端?

0 投票
1 回答
150 浏览

nginx - 在 auth_request 之后调用自定义 nginx 模块

我有一个自定义 nginx 模块,它在将请求代理到服务器之前设置一些请求头。我还使用 auth_request 进行身份验证。我的位置部分包含 auth_request 以及自定义模块指令。我想确保仅在 auth 子请求之后而不是在子请求中设置自定义标头。目前,我看到首先调用了自定义模块,并且在子请求本身中设置了标头。

0 投票
1 回答
25 浏览

nginx - 关于 nginx 模块的输出问题?如何解决?

我是 nginx 新手,我正在尝试开发一个简单的 nginx 模块,特别是一个处理程序模块。虽然这不是我真正想做的,但我尝试先完成这项任务。当浏览器(或客户端)连接到 nginx 时,我正在尝试获取 socketfd。我已经成功获取它。但是,当我尝试使用 dup2() 输出某些内容时,nginx 始终处于挂起状态并且什么也不输出。有时我可以在很长一段时间后得到输出,一旦我像 nginx -s stop 这样停止 nginx,输出立即出现。

像这样:到达http://100.100.60.199/nc?search=123456 get search=123456 HTTP/1.l HOST

输出

我阅读了一些关于 nginx 模块的博客,发现处理程序模块有自己的模式(据我了解?)。例如,输出应该是 nginx_chain_t,我应该构造该链而不是像常规 c 代码那样使用 dup2。所以我想知道像下面的函数那样获得输出是否可行。

这是我的处理函数:

所以我想知道这是否可行,我怎样才能使用上面的方法把事情做好,或者任何人都可以说这是不可能的并且构造一个链是唯一的方法?

0 投票
1 回答
128 浏览

audio - 是否可以通过标准 GET 请求将广告或消息动态拼接到 MP3 文件中?

假设您有一个 60,000,000 字节的 MP3 文件,还有一个 500,000 字节的 MP3 广告,两者都以相同的比特率编码。

是否可以使用 nginx 或 apache 模块将 MP3“Content-Length”标头值更改为 60,500,000,然后控制传入的“Content-Range”请求,以便前 500,000 个字节返回广告音频,并且任何范围请求大于500,000 开始返回具有 500,000 字节偏移量的常规音频文件?

还是只能使用 FFmpeg 等应用程序将广告(或消息)拼接到 MP3 文件中以重新渲染整个文件?

抱歉,如果这是一个愚蠢的问题,我只是想跳出框框思考。

0 投票
1 回答
48 浏览

nginx - 无法更改 ngx_pagespeed 的选项

我能够成功地将 ngx_pagespeed 添加到 Digital Ocean 的 Nginx 服务器。我按照这个进行了自动安装:https: //www.modpagespeed.com/doc/build_ngx_pagespeed_from_source

该模块有效 - 例如,我可以看到它自动将我的 .jpg 图像转换为 .webp。此外,curl -I -p http://localhost| grep X-Page-Speed返回X-Page-Speed: 1.13.35.2-0标题。

但是,我无法编辑任何选项。当我尝试运行类似pagespeed rewrite_images on,甚至pagespeed on,我得到一个错误pagespeed: command not found

每个文档pagespeed应该是 Nginx 的命令:https ://modpagespeed.com/doc/configuration

我尝试了其他几个命令:

  1. whereis pagespeed返回pagespeed:
  2. which pagespeed什么都不返回。

据我所知,这些应该返回完整路径,例如/usr/bin/pagespeed

0 投票
1 回答
6642 浏览

nginx - 站点启用/中不允许使用 nginx“邮件”和“流”指令

当我尝试将流或邮件指令与 nginx 一起使用时,我遇到了问题。我正在使用 nginx/1.16.1 和 Ubuntu 18.04.4 LTS。
这是我的 nginx.conf

我想在我的站点配置之一(test.streamconf)中使用“流”指令

但是,如果我为启用站点的文件夹创建符号链接并使用“sudo nginx -t”测试我的配置,我会收到以下错误消息:

nginx: [emerg] "stream" 指令在 /etc/nginx/sites-enabled/test.streamconf:1 中不允许使用
nginx: 配置文件 /etc/nginx/nginx.conf 测试失败

流和邮件模块已经安装... 在此处输入图像描述

我错了什么?

0 投票
2 回答
198 浏览

c - Nginx Module Code error_page 指令问题

我正在利用 ModSecurity WAF 来帮助阻止 tx 在 NGINX 上被认为是危险的:https: //github.com/SpiderLabs/ModSecurity https://github.com/SpiderLabs/ModSecurity-nginx

我的问题可以在这里找到: https ://github.com/SpiderLabs/ModSecurity-nginx/issues/182

我的问题的 TLDR 是 nginxerror_page指令重置了原始客户端在重定向到 GET 期间发送的 HTTP 请求方法标头。这会导致 WAF 的误报日志报告客户端发送了一个带有 GET 等的 HTTP 正文,当他们真正发送一个 POST 并且 NGINX 命中error_page重定向时,由于某些情况下上游在反向代理调用上超时。

为了解决这个问题,我需要对这个文件部分进行破解或公关: https ://github.com/SpiderLabs/ModSecurity-nginx/blob/master/src/ngx_http_modsecurity_rewrite.c#L145

在 sudo 代码中实现这样的目标:

而正是在这里,我一直无法解决上面的 sudo 代码。如何在这里创建一个 tx 上下文安全变量,该变量可以在各个阶段和内部error_page重定向中持续存在以存储原始客户端 http 方法标头?

我登陆了这些 NGINX 页面指南,但到目前为止,还没有真正看到任何东西切入我想要的东西: https ://www.evanmiller.org/nginx-modules-guide.html

寻找任何了解该问题并可能能够将我的 sudo 代码转换为我可以在我的沙盒环境中测试的东西的 NGINX / C 大师。

注意我没有放弃我的 NGINX error_page 指令调用的奢侈。所以我确实需要一个我相信的上述 sudo 代码的解决方案。

谢谢!

0 投票
0 回答
239 浏览

nginx - Nginx 映射重定向捕获正则表达式/查询字符串捕获并重定向到新的

我正在尝试使用 map 指令在 nginx(openresty) 中设置批量重定向,但在从源 url 捕获正则表达式/查询字符串并转发到目标 url 时遇到了一些问题。下面就像我的设置

nginx.conf 就像

服务器块

新的重定向地图包含以下重定向

~^/test/123/(\w+)(\w+).*$ /US/en/test/$1-$2;

哪个效果很好,但我很难获得以下字符串

  1. 正则表达式捕获的部分 url

/Product.html?ProdNo=A5441&Brand=COMPANY

在新 url 中捕获

2.Regex Capture的部分url

在新 url 中捕获

任何帮助将不胜感激,干杯!