NGINX UDP 代理传递至 HTTP

NGINX UDP 代理传递至 HTTP

我构建了一个 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 来实现此目的的方法。有什么想法吗?

相关内容