回答
收藏
分享
举报
Nginx stream 第三方模块挂载问题
提问于2022-12-05 15:48

浏览 659

我想自己写一个stream模块,能捕获tcp/udp中的报文数据。我直接挂载,

NGX_STREAM_ACCESS_PHASE或者

NGX_STREAM_PREREAD_PHASE阶段(两种我都尝试了一下),下断点在自定义模块的handler中,gdb在第一次连接时会断下来,但是如果gdb 输入continue之后,已建立连接的tcp就再断不下来。


我编译好之后,运行起来,断点下在自定义部分

ngx_stream_access_control_handler就是我自定义的模块

其中执行的nginx.conf代码如下,只是一个简单的tcp/udp转发效果

daemon off;  # default on
master_process off;
pid objs/nginx.pid;
error_log objs/error.log debug;
load_module objs/ngx_stream_access_control_module.so;

stream {

upstream tcp_server{
server 0.0.0.0:8060;
}

upstream udp_server{
server 0.0.0.0:8050;
}

server{
ALLOW all;
listen 8070;
proxy_pass tcp_server;
}

server{
ALLOW all;
listen 8040 udp;
proxy_pass udp_server;
}
}

然后我本地开启一个udp的服务

nc -unlvvp 8050

在另一个shell开一个nc来监听这个服务

nc -u 192.168.191.132 8040

此时时第一次发送消息就可以被我的handler捕捉到,从而断下来

gdb中显示如下

断在了断点处,然后可以通过命令p *s->connection->buffer看到udp发送的内容

然后我这个模块目前是空的,直接返回

NGX_DECLINED。
gdb continue之后,让nginx继续运行,udp服务就可以接受到报文

但是我udp客户端再次发送报文,断点没有断下来,直接发送到服务端了

如果udp此时接受另一个客户端,nginx又会断下来,然后第一次断,后面又不断了,是为什么呢?nginx是只会对一个新的连接执行handler吗?

请问各位大哥,能不能教教我,我想在nginx写一个模块可以获取,处理其中的报文




已修改于2023-03-17 02:15



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

按点赞数排序

按时间排序

我自己测试的话,发现在udp情况下,如果nginx.conf设置了proxy_timeout 1s,也就是udp会话维持1s或者不维持,则可以断下来,考虑到可能是nginx自带的会话维持导致这种结果

赞同

0

回复举报

回答于2022-12-05 16:26



回复張大炮
回复
提问者
張大炮
这家伙很懒还未留下介绍~
0
文章
2
问答
0
粉丝
相关问答

没办法完全不受影响的,因为mirror是子请求,当子请求未结束时,主请求消耗的内存至少是无法释放的。你可以尝试在/mirror里,把超时时间大幅度调低,包括connect/read/send,再压下看看。

点赞 0
浏览 2.6k

不应该这么来弄,应该是结合lua/njs来做,通过njs/lua来判断文件是否存在

error_log stderr notice;
daemon off;
events { }

http {
include /usr/local/openresty/nginx/conf/mime.types;

server {
listen 80;

location @image_server {
content_by_lua_file "file_judge.lua";
}

location ~ ^/images/(?<sig>[^/]+)/(?<size>[^/]+)/(?<path>.*\.(?<ext>[a-z_]*))$ {
root cache;
set_md5 $digest "$size/$path";
try_files /$digest.$ext @image_server;
}
}

}

-- make sure the file exists
local file = io.open(source_fname)

if not file then
return_not_found()
end

file:close()

lua里面去判断文件存不存在

点赞 0
浏览 674