我有一个域名,假设是example.com
在 Dynadot 中注册的。我拥有它以及子域名,www.example.com
并cloud.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.com
或www.example.com
,它会将其重定向到我的 Node.js 服务器。如果用户访问
cloud.example.com
,它会将其重定向到我的 Nextcloud 服务器,该服务器也可以从 访问example.com:85
。如果用户想要连接到在不同端口上运行的另一台服务器,他们可以使用
example.com:<port>
这很好,但我唯一的问题是我的 ISP 阻止了端口 80 的入站流量!
我花了几个小时寻找解决方法,唯一的选择是使用 GoDaddy。我可以在 GoDaddy 上托管我的 Nginx 服务器,它将example.com
和www.example.com
指向我的 Node.js 服务器,并指向cloud.example.com
我的 Nextcloud 服务器。这样可以工作,但这意味着 的example.com
DNS 设置需要更改为指向 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)