我构建了一个 NGINX 反向代理,在其中监听端口 53 上的 UDP 流量,并将其传递到带有修改后的标头的 HTTP 端点。修改标头后,我将数据包发送到目标。
http配置文件
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr:$server_port - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log debug;
proxy_pass_request_headers on;
sendfile on;
#tcp_nopush on;
keepalive_timeout 120;
#gzip on;
server {
listen 8080;
access_by_lua_block
{
ngx.req.set_header("Host", "some_host")
ngx.req.set_header("Content-Type", "application/atom+xml;type=entry;charset=utf-8")
ngx.req.set_header("Authorization", "some_token")
}
location = / {
proxy_pass https://the_real_target;
}
}
}
流配置文件
stream {
upstream some_name {
server 127.0.0.1:8080;
}
server {
listen 80;
proxy_pass some_name;
}
server {
listen 53 udp;
proxy_responses 0;
proxy_pass some_name;
}
}
nginx.conf
user nginx;
load_module modules/ndk_http_module.so;
load_module modules/ngx_http_lua_module.so;
load_module modules/ngx_http_headers_more_filter_module.so;
include conf.d/stream.conf;
include conf.d/http.conf;
worker_processes auto;
error_log /var/log/nginx/error.log debug;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
当我使用 Postman 并将请求发送到端口 80 时,它可以工作。但是,当使用 PacketSender 通过 UDP 发送请求时,它不会重定向到 HTTP 服务器并关闭连接。
我开发了一个程序来测试是否可以将 UDP 数据包重定向到 TCP 端点。这可行,但我正在寻找一种仅使用 NGINX 来实现此目的的方法。有什么想法吗?