【问题标题】:How to proxy RDP via Nginx如何通过 Nginx 代理 RDP
【发布时间】:2018-03-21 19:19:34
【问题描述】:

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

  server { 
    listen          80;
    server_name     domain.com;

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

但连接没有通过。我的猜测是问题出在proxy_pass 中的http。谷歌搜索“Nginx RDP”并没有产生多少。

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

【问题讨论】:

    标签: nginx remote-desktop rdp


    【解决方案1】:

    实际上你是对的,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

    【讨论】:

    • 感谢您的回答。我读到 RDP 现在可以与 HTTPS 结合使用。这给我的印象是我们可以在 http 块内使用它作为 SSL 连接。但是由于我对这件事的了解有限,我看不出这是怎么可能的。你有什么想法?
    • 这是下面文章中让我产生这种想法的那句话:“基本上,标准 RPC 流量在客户端被包装在 HTTPS 中”brianmadden.com/opinion/…
    • 嗯,你引用的那一行是指一个应用程序(outlook),它将 RPC 包装在 HTTPS 中,另一方面,你有另一个可以处理解压缩消息的软件。微软开发了在 https 流量上打包和解包 RDP 的软件,当然 nginx 不能这样做。你需要一个不同的实现,你不能直接传送到端口 3389 你需要一个 RD 网关检查这个turbofuture.com/computers/…
    • 不管怎样,如果您更改端口,此语法也适用于 VNC
    【解决方案2】:

    对于希望使用 Nginx 对 RDP 连接进行负载平衡的任何人,我都是这样做的:

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-21
      • 1970-01-01
      • 2023-03-11
      • 2011-12-14
      • 2017-09-27
      • 2018-01-07
      • 2014-06-09
      • 1970-01-01
      • 2016-11-19
      相关资源
      最近更新 更多