Nginx 转发除 80 端口外所有端口上的所有流量

Nginx 转发除 80 端口外所有端口上的所有流量

我有一个域名,假设是example.com在 Dynadot 中注册的。我拥有它以及子域名,www.example.comcloud.example.com通过 A 记录指向我的 IP 地址。我已经设置了一些可以使用此域名访问的服务器。例如,我的 FTP 服务器可以使用 访问example.com:21。我有一个在端口 80 上运行的 Node.js 服务器,以及一个Nextcloud服务器在端口 85 上运行。我最后设置的是一个 Nginx 服务器,它监听端口 80。这是我的 Nginx 配置:

server {
    listen 80;
    server_name cloud.example.com;

    location / {
        proxy_pass http://example.com:85;
    }
}

server {
    listen 80;
    server_name www.example.com;

    location / {
        proxy_pass http://192.168.1.31;
    }
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://192.168.1.31;
    }
}

此配置的作用是:

  • 如果用户访问example.comwww.example.com,它会将其重定向到我的 Node.js 服务器。

  • 如果用户访问cloud.example.com,它会将其重定向到我的 Nextcloud 服务器,该服务器也可以从 访问example.com:85

  • 如果用户想要连接到在不同端口上运行的另一台服务器,他们可以使用example.com:<port>

这很好,但我唯一的问题是我的 ISP 阻止了端口 80 的入站流量!

我花了几个小时寻找解决方法,唯一的选择是使用 GoDaddy。我可以在 GoDaddy 上托管我的 Nginx 服务器,它将example.comwww.example.com指向我的 Node.js 服务器,并指向cloud.example.com我的 Nextcloud 服务器。这样可以工作,但这意味着 的example.comDNS 设置需要更改为指向 GoDaddy 服务器的 A 记录。这一切都可以正常工作,但这意味着我无法再访问我的任何其他服务器,例如我的 FTP 服务器,因为exmaple.com:21不再指向<my IP>:21,而是<GoDaddy Server IP>:21

我在想,为了解决这个问题,我可以配置我的 Nginx 服务器,让它像以前一样工作,但如果用户使用example.com除端口 80 以外的任何端口访问,它会将连接转发到<my IP>:<port>。这样,我的所有其他服务器(例如我的 FTP 服务器)仍然可以通过访问exmaple.com:21,但端口 80 不会被阻止,因为使用端口 80 的 Nginx 服务器托管在 GoDaddy 上。

不过,我不知道 Nginx 是否可以做到这一点。如果可以,配置会是什么样子?如果不行,我还有什么其他选择?(除了购买我的 ISP 的商业计划来解锁端口 80)

相关内容