【问题标题】:nginx re-route all data based on port (nginx proxy)nginx 根据端口重新路由所有数据(nginx 代理)
【发布时间】:2021-09-17 17:57:16
【问题描述】:

我还是 nginx 新手,我想完成这个。

我有两台服务器(server1 和 server2),在 server1 上有一个 sftp 服务器(bitvise)。 在 server2 上,我运行了一个 nginx docker 容器。

我想配置 nginx,所以当流量在端口 22 上到达 server2(带有 nginx 的那个)时,它会被重定向到 server1,我的 sftp 服务器就在那里。

我有一个 dns“transfer.test.com”映射到我的 server2 公共 IP(已测试)。

这是我添加到 nginx conf 文件中的配置。

server {
 listen 22;
 server_name transfer.test.com;
 return 301 https://google.com;


 location / {
   set $sftp server1-private-ip:22;
   proxy_pass  $sftp;
  }
} 

server1-private-ip 是 server1 的私有 IP(带 sftp 的那个)。

但直到现在它还没有工作。 我可以使用 server1 的私有 IP 使用 filezile 连接到 sftp 但是 我无法使用 server2 的私有 IP 使用 filezila 连接到 sftp,这意味着流量没有被重定向。

感谢您的帮助。

【问题讨论】:

    标签: linux docker nginx networking nginx-reverse-proxy


    【解决方案1】:

    如果您想使用 nginx 作为 SSH 或 SFTP 等非 HTTP 协议的代理,您应该在 stream 上下文而不是 http 上下文中定义您的服务器。典型的主配置文件(通常是/etc/nginx/nginx.conf)看起来像

    user              <username>;
    worker_processes  <number>;
    ...
    
    events {
        worker_connections  <number>;
    }
    
    http {
        include       /etc/nginx/mime.types;
        ... # other global http directives here
        include       /etc/nginx/conf.d/*.conf;
    }
    

    如您所见,单个服务器(或服务器组)的配置文件包含在 http 上下文中。您应该在主配置文件中添加 stream 块:

    user              <username>;
    worker_processes  <number>;
    ...
    
    events {
        worker_connections  <number>;
    }
    
    http {
        ...
    }
    
    stream {
        server {
            listen      22;
            proxy_pass  <server1_private_ip>:22;
        }
    }
    

    server_namelocation 之类的指令在 stream 上下文下定义的 server 块中毫无意义。请注意,使用上述配置时,nginx 应使用ngx_stream_core_modulengx_stream_proxy_module 模块编译。

    【讨论】:

    • 我添加了这个流 { server { listen 22;设置 $sftp jz-nginx:80; proxy_pass $sftp; } } 到我的 nginx.conf 文件,在 http{} 下,但是当我 curl transfer.test.com 时,我仍然没有得到 nginx 欢迎页面,jz-nginx:80 其中 jz-nginx 是本地 nginx docker 容器
    • 我什至尝试了 stream { server { listen 22; proxy_pass :22; } } 但是当我尝试从 filezilla 连接到 server2_private_ip:22 时它仍然无法正常工作谢谢您的帮助
    • nginx -t 命令说什么?
    • 在添加这个stream { server { listen 22; set $sftp &lt;server1-private-ip&gt;:22; proxy_pass $sftp; } } 之后,nginx -t 说:nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
    • nginx配置文件好像没问题。抱歉,我不知道如何进一步提供帮助。我对 docker 网络不是很熟悉。
    猜你喜欢
    • 1970-01-01
    • 2020-12-23
    • 2016-05-28
    • 2014-01-30
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    相关资源
    最近更新 更多