web-dev-qa-db-ja.com

Nginx経由でRDPをプロキシする方法

Nginxで以下の設定を使用してRDP接続をプロキシしています:

  server { 
    listen          80;
    server_name     domain.com;

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

しかし、接続は通過しません。私の推測では、問題はproxy_passhttpです。 「Nginx RDP」をグーグルで動かしても、あまり成果はありませんでした。

誰もがそれが可能かどうか、そして可能であればどのように知っていますか?

5
fardin

まあ、あなたは正しいですhttpが問題ですが、コードブロックの問題ではありません。少し説明しましょう:

あなたのnginx.conf fileあなたはこれに似たものを持っています:

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 を確認してください

5
zochamx

Nginxを使用してRDP接続の負荷分散を検討している人のために、ここに私がやったことを示します。

通常どおりにnginxを構成して、HTTP(S)トラフィックを目的のサーバーに再ルーティングします。

そのサーバーに myrtille をインストールします(IISと.Net 4.5が必要です)と、ブラウザーからサーバーにRDPできるようになります!

0
fardin