nginx 如何反代 ddns 网站?

2017-09-01 09:14:53 +08:00
 ColinZeb
假设我有一个 ddns 域名 ddns.domain.com ,但是由于运营商原因屏蔽了 443 和 80 端口,所以只能用端口 4430,
但是输入域名还要输入端口好麻烦,所以像配置个反代,home.domain.com
我 nginx 配置写的是 proxy_pass https://ddns.domain.com:4430

确实好使,但是问题来了,路由器重新拨号的时候 ddns.domain.com 的 ip 变了,反代域名 ddns.domain.com 就挂了,出现 504 网关错误。
怀疑是 nginx 有 dns 缓存。求问如何解决。
7436 次点击
所在节点    NGINX
29 条回复
ColinZeb
2017-09-01 21:33:38 +08:00
@ryd994 但是事实上,@Terenc3 的方法解决了我的问题。他这个好像是用变量,而不是用 upsteam,或者 @proxy 变量
Tink
2017-09-01 21:49:15 +08:00
不应该和 nginx 有关
ryd994
2017-09-01 23:13:25 +08:00
@Terenc3 $upstream 的作用是什么?
Terenc3
2017-09-01 23:27:35 +08:00
@ryd994 如果在 {} 符号里使用 set,那么每次调用该 {} 都会跑一次 set。

而$upstream 只是一个变量名称,可以修改为任何内容:

server {
...
resolver [DNS IP 地址] valid=5s;
set $[变量名]"http://ddns.domain.com:4430";
proxy_pass $[变量名];
...
}

这个用法类似传递真实 IP 到后端的变量:
set $realip $remote_addr;
sylecn
2017-09-02 00:27:31 +08:00
resolve 选项免费版支持的。默认缓存是参考域名对应的 TTL。如果设置了 valid,则 valid 优先。
ryd994
2017-09-02 02:27:05 +08:00
@Terenc3 我的意思是,为什么要用 upstream 变量间接而不是直接写在下面
Terenc3
2017-09-02 11:28:59 +08:00
@ryd994 因为使用了 DDNS 的缘故,为了达到每次访问都检查 DNS 的缘故,所以要用 set,而 set 需要指定一个变量,所以会有一个变量。

如果直接使用 proxy_pass https://ddns.domain.com:4430,则只会在 nginx 启动时解析一次,后面需要重新解析就需要 reload。
ryd994
2017-09-02 11:31:02 +08:00
@Terenc3 原来可以这样
ahu
2017-09-03 11:17:51 +08:00
@Terenc3 牛人,翻博客中,学习了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/387350

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX