如何通过 Nginx 代理 RDP
How to proxy RDP via Nginx
我在 nginx 中使用以下配置来代理 RDP 连接:
server {
listen 80;
server_name domain.com;
location / {
proxy_pass http://192.168.0.100:3389;
}
}
但是连接不通。我的猜测是问题出在 proxy_pass
中的 http
。谷歌搜索 "Nginx RDP" 收效甚微。
有人知道这是否可行吗?如果可行,怎么做?
其实你是对的 http
是问题所在,但不完全是你代码块中的那个问题。让我们解释一下:
在您的 nginx.conf
文件中,您有类似的内容:
http {
...
...
...
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
因此,您在 conf 文件中写入的所有内容都在这个 http
block/scope 中。但是 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
对于希望使用 Nginx 负载平衡 RDP 连接的任何人,这是我所做的:
像往常一样配置 nginx,将 HTTP(S) 流量重新路由到您想要的服务器。
在该服务器上,安装 myrtille(它需要 IIS 和 .Net 4.5),您将能够从浏览器将 RDP 连接到您的服务器!
我在 nginx 中使用以下配置来代理 RDP 连接:
server {
listen 80;
server_name domain.com;
location / {
proxy_pass http://192.168.0.100:3389;
}
}
但是连接不通。我的猜测是问题出在 proxy_pass
中的 http
。谷歌搜索 "Nginx RDP" 收效甚微。
有人知道这是否可行吗?如果可行,怎么做?
其实你是对的 http
是问题所在,但不完全是你代码块中的那个问题。让我们解释一下:
在您的 nginx.conf
文件中,您有类似的内容:
http {
...
...
...
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
因此,您在 conf 文件中写入的所有内容都在这个 http
block/scope 中。但是 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
对于希望使用 Nginx 负载平衡 RDP 连接的任何人,这是我所做的:
像往常一样配置 nginx,将 HTTP(S) 流量重新路由到您想要的服务器。
在该服务器上,安装 myrtille(它需要 IIS 和 .Net 4.5),您将能够从浏览器将 RDP 连接到您的服务器!