如何通过Nginx代理RDP

ttisahbt  于 2024-01-06  发布在  Nginx
关注(0)|答案(3)|浏览(360)

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

  1. server {
  2. listen 80;
  3. server_name domain.com;
  4. location / {
  5. proxy_pass http://192.168.0.100:3389;
  6. }
  7. }

字符串
但连接不通过。我的猜测是,问题是proxy_pass中的http。谷歌搜索“Nginx RDP”没有产生太多。
有人知道这是否可能吗?如果可能,又是如何做到的呢?

vbopmzt1

vbopmzt11#

好吧,实际上你是对的,http是问题所在,但不完全是你代码块中的问题。让我们解释一下:
在你的nginx.conf文件中,你有类似的东西:

  1. http {
  2. ...
  3. ...
  4. ...
  5. include /etc/nginx/conf.d/*.conf;
  6. include /etc/nginx/sites-enabled/*;
  7. }

字符串
所以你在conf文件中写的所有东西都在这个http块/作用域中。但是rdp不是http是一个不同的协议。
我所知道的nginx处理这个问题的唯一解决方法是在tcp级别上工作。
所以在nginx.conf内部和http外部,你必须像这样声明stream块:

  1. stream {
  2. # ...
  3. server {
  4. listen 80;
  5. proxy_pass 192.168.0.100:3389;
  6. }
  7. }


使用上面的配置只是在tcp层上复制你的后端,当然这是有代价的。你可能注意到它缺少server_name属性,你不能在stream范围内使用它,而且你失去了http级别上的所有日志记录功能。
有关此主题的更多信息,请查看docs

展开查看全部
hfwmuf9z

hfwmuf9z2#

对于任何希望使用Nginx负载平衡RDP连接的人来说,这是我所做的:
像往常一样配置nginx,将HTTP(S)流量重新路由到所需的服务器。
在该服务器上,安装myrtille(它需要IIS和.Net 4.5),然后您就可以从浏览器将RDP导入您的服务器!

yvt65v4c

yvt65v4c3#

如果你正在寻找一个完整的配置,不包含一堆点**,永远不会通过nginx配置测试**,下面是一个完整的和测试的配置。
此示例侦听端口25301并将连接转发到rds.example.com:25301。然后在无线路由器中,您必须将端口25301上的传入连接转发到目标Windows PC IP地址和端口3389

端口转发-路由器设置

| 服务名称|外部端口|内部端口|内部IP地址|议定书|
| --|--|--|--|--|
| 服务器9_RDP| 25301 | 3389 |10.0.0.9|两|

NGINX - RDP配置

  1. stream {
  2. tcp_nodelay on;
  3. resolver 1.1.1.1 1.0.0.1 valid=60s;
  4. resolver_timeout 5s;
  5. server {
  6. listen 25301;
  7. # proxy_pass 192.168.0.1:25301;
  8. proxy_pass rds.example.com:25301;
  9. proxy_connect_timeout 10s;
  10. proxy_timeout 2h;
  11. # Preserve client IP address
  12. proxy_bind $remote_addr transparent;
  13. allow 192.168.1.0/24; # Example for allowing specific IPs
  14. deny all;
  15. # Logging
  16. access_log off;
  17. error_log /var/log/nginx/error.log warn;
  18. }
  19. }

字符串

展开查看全部

相关问题