NGINXを別のポート番号のリバースプロキシとして設定するには?

NGINXを別のポート番号のリバースプロキシとして設定するには?

次のようにhttpリクエストのリバースプロキシとしてNGINXを設定しました。

server {
    listen 80;
    server_name 203.0.113.2;

    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
        proxy_pass http://203.0.113.1:3000;
    }
}

また、SSH(ポート22)要求をプロキシしたいと思います。同じ構成ファイルにこのような別のサーバーブロックを追加できますか?

server {
    listen 22;
    server_name 203.0.113.2;

    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
        proxy_pass http://203.0.113.1:22;
    }
}

最終結果は次のとおりです。

server {
    listen 80;
    server_name 203.0.113.2;

    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
        proxy_pass http://203.0.113.1:3000;
    }
}
server {
    listen 22;
    server_name 203.0.113.2;

    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
        proxy_pass http://203.0.113.1:22;
    }
}

答え1

これSSHプロトコルHTTPに基づいていないため、通常のプロキシを介してプロキシできません。proxy_pass~のngx_http_proxy_module

しかし最近からnginx1.9.0(2016-04-26の1.10.0で安定したリリース)、nginxはサポートされています。TCPストリームプロキシ、つまり十分に新しいnginxバージョンがある場合、これは実際にSSH接続をプロキシするために使用できることを意味します(ただし、X-Real-IPHTTPに基づいていないため、プロキシ接続にこのようなものを追加することはできません)。 。

詳細と例については、以下を確認してください。

答え2

Nginxバージョン1.9.0以降、NGINXは--with-streamを使用して有効にする必要があるngx_stream_core_moduleモジュールをサポートしています。ストリーミング モジュールがイネーブルの場合、TCP プロキシを介して SSH プロトコルを使用できます。

stream {
    upstream ssh {
        server 192.168.1.12:22;
    }
    server {
        listen        12345;
        proxy_pass    ssh;
    }
}

https://www.nginx.com/resources/admin-guide/tcp-load-balancing/

関連情報