如何修改nginx.conf监听UDP端口并将收到的报文转发到指定IP地址
核心错误原因
你配置的核心问题是stream块的层级错误:stream是和events、http平级的顶级配置块,不能嵌套在http块内部,这是你NGINX服务启动失败的直接原因。
前置检查
首先确认你的NGINX版本已编译包含stream模块:Windows环境下进入NGINX安装目录,CMD执行nginx.exe -V,查看输出中是否存在--with-stream参数,无此参数需要下载包含stream模块的NGINX发行版。
正确配置示例
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } # stream块为顶级块,和events、http平级 stream { server { # 替换为你需要监听的本机指定IPv4地址,同时指定UDP协议和10000端口 listen 你要监听的本机IPv4:10000 udp; # 替换为目标转发的IPv4地址和对应端口 proxy_pass 目标IPv4:目标端口; # UDP流量可选优化配置,避免无效连接占用资源 proxy_timeout 10s; proxy_responses 1; } } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; #error_page 404 /404.html; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
配置验证与生效
修改配置后先执行nginx.exe -t检查配置语法,输出test is successful后再重启NGINX服务即可生效。
额外注意事项
需同时放开Azure VM网络安全组的UDP 10000端口入站规则,以及Windows系统防火墙的对应端口入站规则,否则流量无法正常到达NGINX。
内容的提问来源于stack exchange,提问作者scott_lotus
相关产品推荐
相关产品推荐

