web-dev-qa-db-fra.com

Comment proxy RDP via Nginx

J'utilise la configuration ci-dessous dans nginx pour la connexion proxy RDP:

  server { 
    listen          80;
    server_name     domain.com;

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

mais la connexion ne passe pas. Je suppose que le problème est http dans proxy_pass. Googler "Nginx RDP" n'a pas donné grand-chose.

Tout le monde sait si c'est possible et si oui comment?

5
fardin

En fait, vous avez raison, le http est le problème, mais pas exactement celui-là dans votre bloc de code. Expliquons-le un peu:

Dans votre nginx.conf fichier, vous avez quelque chose de similaire à ceci:

http {  
    ...
    ...
    ...

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

Donc, tout ce que vous écrivez dans vos fichiers de conf se trouve dans ce bloc/portée http. Mais rdp n'est pas http est un protocole différent.

La seule solution que je connaisse pour que nginx gère cela est de travailler au niveau tcp.

Alors à l'intérieur de votre nginx.conf et en dehors du bloc http, vous devez déclarer le bloc stream comme ceci:

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

Avec la configuration ci-dessus, il suffit de mandater votre backend sur la couche TCP avec un coût bien sûr. Comme vous pouvez le remarquer, il manque le server_name attribut vous ne pouvez pas l'utiliser dans la portée stream, en plus vous perdez toutes les fonctionnalités de journalisation qui viennent au niveau http.

Pour plus d'informations sur ce sujet, consultez le docs

5
zochamx

Pour tous ceux qui cherchent à équilibrer la connexion RDP à l'aide de Nginx, voici ce que j'ai fait:

Configurez nginx comme vous le feriez normalement, pour rediriger le trafic HTTP (S) vers le serveur souhaité.

Sur ce serveur, installez myrtille (il a besoin de IIS et .Net 4.5) et vous pourrez RDP dans votre serveur à partir d'un navigateur!

0
fardin