Jacky's Blog Jacky's Blog
  • 首页
  • 关于
  • 项目
  • 大事记
  • 留言板
  • 友情链接
  • 分类
    • 干货
    • 随笔
    • 项目
    • 公告
    • 纪念
    • 尝鲜
    • 算法
    • 深度学习
  • 2
  • 3

解决动态 IP 和 DDNS 下 Nginx 反向代理的 504 超时问题

Jacky
17 4 月, 2023

一、前言

自从去年家里换了高性能NAS之后,我的一些测试站点就从 ECS 上迁移到了家里的虚拟机,毕竟性能强太多。然而,家里的公网IP的80和443端口都被封了。为了解决这个问题,我选择使用公网的服务器做反向代理。虽然有 DDNS,但在 Nginx 做反向代理时,每次 IP 变更之后,都无法访问网站,会一直卡在加载中,直到 504 超时。经过查阅资料和实践,我终于找到了解决方法。本文将介绍如何解决动态 IP 和 DDNS 下 Nginx 反向代理的 504 超时问题。

二、问题分析

在使用Nginx做反向代理时,我们通常会使用如下配置:

location / {
        proxy_pass http://example.com:8443;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
}

然而,在动态IP和DDNS的环境下,这样的配置会导致504超时。问题出在Nginx读取配置文件时,将域名解析为IP,并在运行时不再改变。当DDNS更新后,Nginx仍然尝试请求原来的IP,导致超时。

三、解决方法

为了解决这个问题,我们需要使用resolver参数,并配合resolver_timeout参数。resolver用于指定DNS解析服务器,resolver_timeout 用于指定解析超时时间。此外,我们还需要设置缓存有效时间,这里使用1s。以下是正确的Nginx配置方法:

resolver 8.8.8.8 119.29.29.29 valid=1s;
resolver_timeout 3s;
set $proxy_url http://example.com:8443;

location / {
        proxy_pass         $proxy_url;
        proxy_redirect     off;
        proxy_set_header   Host                 $host;
        proxy_set_header   X-Real-IP            $remote_addr;
        proxy_set_header   X-Forwarded-For      $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto    $scheme;
}

这样配置后,Nginx 会在运行时通过 DNS 解析域名,当 DDNS 更换 IP 后,也能正常进行反向代理。值得注意点是,DNS服务器可能需要等待一定的时间才能正确返回新的 IP,所以更换 IP 后网站仍然会有一定时间不可访问。在这种情况下,可以使用 nslookup <domain> <dns> 来查看指定 DNS 服务器对域名的解析情况,以排除 Nginx 的问题。

2
2022 年终总结
上一篇
在 Drone CI 中使用 DooD
下一篇

评论 (3)

再想想
  • 一介农夫

    可是我根据这个配置,会404,我跟你的区别是有 /api/ 这一个后缀

    10 月前
  • captno78

    博主你好,公网服务器作反向代理,nas服务的速度会受限于公网服务器的速度吗

    1 年前
    • Jacky

      @captno78: 对的,公网访问的时候取决于服务器

      1 年前

近期评论

  • Jacky 发表在《留言板》
  • 菜鸟 发表在《留言板》
  • merlin 发表在《留言板》
  • orz 发表在《Xcode 中使用 Clang-format》
  • Jacky 发表在《关于》
3 2
Copyright © 2016-2025 Jacky's Blog. Designed by nicetheme.
粤ICP备16016168号-1
  • 首页
  • 关于
  • 项目
  • 大事记
  • 留言板
  • 友情链接
  • 分类
    • 干货
    • 随笔
    • 项目
    • 公告
    • 纪念
    • 尝鲜
    • 算法
    • 深度学习

搜索

  • Mac
  • Apple
  • OS X
  • iOS
  • macOS
  • Linux
  • 阿里云
  • WordPress
  • 运维
  • macOS Sierra

Jacky

Go Python C C++ | 弱冠之年 | 物联网工程
183
文章
192
评论
267
喜欢