我正在尝试在我的TURN服务器前面添加NGINX,我正在使用coturn包。
我的NGINX conf看起来像这样。
stream {
upstream turn
{
server 127.0.0.1:5349;
}
server {
listen 443 udp;
resolver 1.1.1.1;
proxy_connect_timeout 5s;
proxy_timeout 15s;
proxy_protocol on;
proxy_pass turn;
ssl_preread on;
}
}
这适用于Chrome浏览器。我得到srflx和中继候选人。
但在Firefox上,这些候选人都没有。
即使在chrome上,我在有和没有NGINX的情况下得到的候选人也有轻微的差异,这可能是原因。
没有NGINX:
candidate:3646143538 1 udp 1677729535 <my_ip> 59271 typ srflx raddr 0.0.0.0 rport 0 generation 0 ufrag xmIu network-cost 999
candidate:1499094430 1 udp 33562623 <public_ip_of_my_turn> 63683 typ relay raddr <my_ip> rport 59271 generation 0 ufrag xmIu network-cost 999
关于NGINX:
candidate:4227863252 1 udp 1677729535 127.0.0.1 54974 typ srflx raddr 0.0.0.0 rport 0 generation 0 ufrag 0nJM network-cost 999
candidate:601945334 1 udp 33562623 <public_ip_of_my_turn> 60590 typ relay raddr 127.0.0.1 rport 54974 generation 0 ufrag 0nJM network-cost 999
正如我们所看到的,我得到了raddr作为localhost。将客户端IP正确地传递到后端可以解决这个问题。
即使在共转日志中:没有NGINX:remote <my_ip>:59271
NGINX:remote 127.0.0.1:54974
已尝试代理$remote_addr
变量。因为在访问日志中,我得到了正确的IP(我的IP)。
1条答案
按热度按时间xzlaal3s1#
你正在使用nginx作为一个通用的TCP代理。在此配置中,nginx从客户端接收外部连接,并与TURN服务器建立(localhost)TCP连接。这种配置不允许为目的地保留用户的IP地址。
您需要使用某种IP保留方法,例如使用PROXY协议(需要目标软件的支持,我怀疑coturn是否支持它)或TPROXY配置。