如何通过Nginx代理RDP

时间:2018-03-21 19:19:35

标签: nginx remote-desktop rdp

我在nginx中使用以下配置来代理RDP连接:

  server { 
    listen          80;
    server_name     domain.com;

    location / {
      proxy_pass      http://192.168.0.100:3389;
    }
  }

但连接没有通过。我的猜测是http中的问题是proxy_pass。谷歌搜索“Nginx RDP”没有太大的收益。

任何人都知道这是否可能,如果是,如何?

2 个答案:

答案 0 :(得分:3)

实际上你是对的http是问题,但不完全是代码块中的问题。让我们解释一下:

nginx.conf文件中,您有类似的内容:

http {  
    ...
    ...
    ...

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

因此,您在conf文件中编写的所有内容都在此http块/范围内。但 rdp 不是 http 是一种不同的协议。

我知道nginx处理此问题的唯一解决方法是在tcp级别上工作。

因此,在nginx.conf内部和http区域之外,您必须像这样声明stream块:

stream {
    # ...
    server {
        listen     80;
        proxy_pass 192.168.0.100:3389;
    }
}

使用上述配置只需在tcp层上代理后端,当然需要付出代价。由于您可能会注意到它遗漏了server_name属性,因此您无法在stream范围内使用它,此外您还会失去http级别的所有日志记录功能。

有关此主题的更多信息,请查看docs

答案 1 :(得分:0)

对于任何想要使用Nginx来平衡RDP连接的人来说,这就是我所做的:

像往常一样配置nginx,将HTTP(S)流量重新路由到所需的服务器。

在该服务器上,安装myrtille(它需要IIS和.Net 4.5),您就可以从浏览器进入服务器RDP了!