fardin
fardin

Reputation: 1477

How to proxy RDP via Nginx

I'm using the below config in nginx to proxy RDP connection:

  server { 
    listen          80;
    server_name     domain.com;

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

but the connection doesn't go through. My guess is that the problem is http in proxy_pass. Googling "Nginx RDP" didn't yield much.

Anyone knows if it's possible and if yes how?

Upvotes: 10

Views: 38818

Answers (2)

fardin
fardin

Reputation: 1477

For anyone who is looking to load balance RDP connection using Nginx, here is what I did:

Configure nginx as you normally would, to reroute HTTP(S) traffic to your desired server.

On that server, install myrtille (it needs IIS and .Net 4.5) and you'll be able to RDP into your server from a browser!

Upvotes: 0

zochamx
zochamx

Reputation: 950

Well actually you are right the http is the problem but not exactly that one in your code block. Lets explain it a bit:

In your nginx.conf file you have something similar to this:

http {  
    ...
    ...
    ...

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

So everything you write in your conf files are inside this http block/scope. But rdp is not http is a different protocol.

The only workaround I know for nginx to handle this is to work on tcp level.

So inside in your nginx.conf and outside the http block you have to declare the stream block like this:

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

With the above configuration just proxying your backend on tcp layer with a cost of course. As you may notice its missing the server_name attribute you can't use it in the stream scope, plus you lose all the logging functionality that comes on the http level.

For more info on this topic check the docs

Upvotes: 15

Related Questions