Nginx 作为“网关”使用

Nginx 作为“网关”使用

我的问题是什么?

我有一个 IP 地址和多个带子域的域。所有域和子域都指向我的 IP 到 Debian 机器,nginx 版本:nginx/1.10.3。我在本地网络中还有其他我想使用的服务器。

我想要的是?

假设我有以下域:

  • 示例.com
  • 例子
  • private.example.me

我想要积分示例.com到本地 IP10.0.0.3我想把它用于港口80443

接下来我想要点例子到本地 IP10.0.0.4这就是我想使用端口的主要问题22 - SSH在它和端口上80443

最后一个(也许是最糟糕的)观点private.example.me到本地 IP10.0.0.5在端口上22 - SSH、80、443、5900 - VNC、...

我目前所知道的是什么?

我有很多配置/etc/nginx/sites-enabled/*像这样:

root@Gateway:/# nano /etc/nginx/sites-enabled/example.com 

server {
    listen 80;
    listen [::]:80;

    server_name example.com;

    root /var/www/example.com;

    location ~ ^/(.*)$ {
            proxy_pass              http://10.0.0.3:80/$1$is_args$args;
            proxy_set_header        Host            example.com;
            proxy_set_header        X-Real-IP       $remote_addr;
    }
}

server {
    listen 443;
    listen [::]:443;

    server_name example.com;

    root /var/www/example.com;

    location ~ ^/(.*)$ {
            proxy_pass              http://10.0.0.3:443/$1$is_args$args;
            proxy_set_header        Host            example.com;
            proxy_set_header        X-Real-IP       $remote_addr;
        }
}

这是可行的,因为它是 HTTP 流量,但它不适用于 TCP/UDP 流量,如 SSH、VNC、VPN 等。

如何实现这个功能?

答案1

不行。nginx 可以充当 HTTP 代理,但不能用于 SSH 或 VNC。此外,至少对于 SSH(我相信 VNC 也是如此),您根本无法根据域名分离流量,因为流量中没有可以实现这一点的信息。

答案2

只要您的代理后面只有一个 vnc 和 ssh 服务器,您就可以在网关主机上使用 ip 转发将流量重定向到这些服务。不是使用 nginx,而是使用 iptables。

相关内容