1
xiaoz 2017-09-01 09:25:58 +08:00
你确定 ddns 搞好了,重新拨号你 ddns 解析更新没有。这锅感觉和 nginx 无关系
|
2
ColinZeb OP |
3
ColinZeb OP 上面说反了,反正就是原始 ddns 域名好使,配置的反代域名不好使。
|
4
ColinZeb OP 问个无关的问题,为什么这个主题我不能编辑了,也不能追加,是因为我又发布了一个新主题吗?有错别字不能改好别扭……
|
5
GPU 2017-09-01 09:40:57 +08:00
|
6
greenskinmonster 2017-09-01 09:49:58 +08:00
nginx 没有自己的 dns 缓存,我也是反代 ddns 的域名,没有问题。
实在不行,直接去你 ddns 的域名解析服务器查最新的 IP,然后替换配置文件中的 IP,reload dig +short @dnsserver.ddns.com my.ddns.com |
7
Terenc3 2017-09-01 09:53:18 +08:00
把域名的 TTL 设低一点,1 至 5 秒比较好。
|
8
terrawu 2017-09-01 09:54:19 +08:00
caddy 反代,堪比 nginx 收费版。
|
9
xiaoz 2017-09-01 10:07:27 +08:00
@ColinZeb 你反代的不是 https://ddns.domain.com:4430 吗?干嘛又去 curl ddns.domain.com ( 80 端口),curl https://ddns.domain.com:4430 看看状态是否正常,若不正常和 nginx 无关。
|
10
wwqgtxx 2017-09-01 10:13:44 +08:00 via iPhone
如果你 ddns 后面那台电脑是你自己控制的话,直接 ssh 或者用 frp 把端口映射到服务器上更简单
|
11
ColinZeb OP @xiaoz 正常的,因为我是手打的,端口忘了写了。我肯定会排除 ddns 的问题,不然我也不能怀疑 nginx。
@wwqgtxx 比如我把 ddns 的 8443 映射到 vps 的 443 端口,那我 vps 的 443 端口挂其他东西了,所以反代比较合适。你说的 ssh 映射我不太懂,但是应该类似于端口转发吧 @Terenc3 我用的 cloudxns,最低 60,但是我 ping 的时候发现 ip 变了,curl ddns.domain.com:8443 结果也对,所以和 ttl 应该也没关系。 @GPU 我试试这个 https://www.oschina.net/translate/nginx-with-dynamic-upstreams?print |
12
wwqgtxx 2017-09-01 10:27:33 +08:00 via iPhone
@ColinZeb 我的意思是你随便把他转发到你服务器上的一个端口,然后在服务器上用 nginx 直接对 127.0.0.1 反代就行了
|
13
ColinZeb OP @wwqgtxx 哦 这样啊。 那就是 ddns 端每次 ip 变化,都连接到服务器,让服务器转发到新 ip 上。如果连接了 ssh,我觉得执行一句 nginx -s reload 也可以解决问题。
|
14
wwqgtxx 2017-09-01 10:41:32 +08:00 via iPhone 1
@ColinZeb 其实我的意思是你根本用不着 ddns,直接从你家的电脑连接到你的服务器,把端口反向转发到你的服务器上,然后就相当于你服务器上的一个本地端口了,再然后你想怎么配置 nginx 就简单多了
|
15
Terenc3 2017-09-01 11:36:57 +08:00 4
server {
... resolver 114.114.114.114 valid=5s; set $upstream "http://ddns.domain.com:4430"; proxy_pass $upstream; ... } 可以尝试一下在 nignx 里指定 DNS 服务器和有效期。 |
16
Terenc3 2017-09-01 11:37:50 +08:00
|
17
lanwairen123 2017-09-01 13:34:29 +08:00 via Android
楼上正解
|
18
littlehz 2017-09-01 15:28:54 +08:00
我记得 nginx 配置文件里的域名,是重载配置的时候生效。好像要用 lua 脚本写 upstream 才能动态即时生效。
|
19
lyhiving 2017-09-01 15:54:25 +08:00
这样的情况最好就是你的 IP 变了就访问一下服务器,让服务器完成 nginx 的 reload。
很多路由器都有联网后打开某个页面的功能的。 否则就要像 15 楼那样定时轮询…… |
20
ryd994 2017-09-01 17:55:00 +08:00 via Android 1
因为 Nginx 只在读取配置时解析 DNS,之后不会更新
要更新需要 reload 要跟随 DNS 需要加 resolve 选项,而这是商业版才有的。 最简单办法:定时 nginx -s reload @lanwairen123 @Terenc3 不正解,Nginx 不会跟随 DNS http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server |
21
ColinZeb OP |
22
Tink 2017-09-01 21:49:15 +08:00 via iPhone
不应该和 nginx 有关
|
24
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; |
25
sylecn 2017-09-02 00:27:31 +08:00 via Android
resolve 选项免费版支持的。默认缓存是参考域名对应的 TTL。如果设置了 valid,则 valid 优先。
|
27
Terenc3 2017-09-02 11:28:59 +08:00 1
@ryd994 因为使用了 DDNS 的缘故,为了达到每次访问都检查 DNS 的缘故,所以要用 set,而 set 需要指定一个变量,所以会有一个变量。
如果直接使用 proxy_pass https://ddns.domain.com:4430,则只会在 nginx 启动时解析一次,后面需要重新解析就需要 reload。 |