当前位置:首页 > 未分类 > 正文内容

专门适合宝塔面板(BT)+ 阿里云 ECS → 家庭 DDNS 服务器 的 Nginx 反向代理配置

我不是郭靖1年前 (2025-08-31)未分类3740

Nginx 配置模板(宝塔反代用)

在宝塔面板 → 网站 → 设置 → 反向代理 → 修改配置文件,替换为以下内容:

#PROXY-START/

location ^~ /
{
    resolver 100.100.2.136 100.100.2.138 valid=10s;
    set $backend "https://www.1688fs.net:1443";
    proxy_pass $backend$request_uri;
    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;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 60s;
    proxy_connect_timeout 5s;
    proxy_send_timeout 30s;

    proxy_next_upstream error timeout invalid_header http_502 http_503 http_504;

    set $static_file 0;
    if ($uri ~* "\.(gif|png|jpg|jpeg|css|js|woff|woff2)$") {
        set $static_file 1;
        expires 1m;
    }
    if ($static_file = 0) {
        add_header Cache-Control no-cache;
    }

    add_header X-Cache $upstream_cache_status;
}
#PROXY-END/
配置详细说明

#PROXY-START/

location ^~ /  # 匹配根路径及其所有子路径,用于反向代理整个网站
{
    resolver 100.100.2.136 100.100.2.138 valid=10s;  
    # 指定 DNS 服务器(阿里云内网 DNS),并设置缓存有效期 10 秒
    # 每 10 秒刷新一次域名解析,保证 DDNS IP 变更后能访问

    set $backend "https://www.1688fs.net:1443";  
    # 定义变量 $backend 存储上游服务器地址(家庭服务器 HTTPS 端口)

    proxy_pass $backend$request_uri;  
    # 将客户端请求转发到上游服务器,并保留原始 URI
    # 使用 $request_uri 避免乱码和资源路径错误

    proxy_set_header Host $host;  
    # 保持客户端访问的 Host(域名)透传到上游
    # 防止网站认为是 IP 访问导致乱码或资源路径错误

    proxy_set_header X-Real-IP $remote_addr;  
    # 透传客户端真实 IP 到上游服务器

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    # 记录代理链中的客户端 IP,支持多级代理

    proxy_set_header X-Forwarded-Proto $scheme;  
    # 透传请求协议(http 或 https),上游服务器可根据此判断

    proxy_http_version 1.1;  
    # 使用 HTTP/1.1 协议,必要条件才能支持 WebSocket

    proxy_set_header Upgrade $http_upgrade;  
    # WebSocket 升级头,允许 HTTP 连接升级为 WebSocket

    proxy_set_header Connection "upgrade";  
    # WebSocket 升级标识,必须设置为 "upgrade"

    proxy_read_timeout 60s;  
    # 等待上游服务器响应的最大时间(WebSocket 长连接),超过断开

    proxy_connect_timeout 5s;  
    # 连接上游服务器的超时时间

    proxy_send_timeout 30s;  
    # 向上游服务器发送请求数据的超时时间

    proxy_next_upstream error timeout invalid_header http_502 http_503 http_504;  
    # 当出现上游错误、超时或返回 502/503/504 等错误时,尝试下一个上游
    # 提高代理可用性,适合家庭服务器可能 DDNS 改变的情况

    set $static_file 0;  
    # 初始化变量,用于判断是否是静态文件

    if ($uri ~* "\.(gif|png|jpg|jpeg|css|js|woff|woff2)$") {
        set $static_file 1;  
        expires 1m;  
        # 静态资源缓存 1 分钟,提高访问速度,减轻上游负载
    }

    if ($static_file = 0) {
        add_header Cache-Control no-cache;  
        # 非静态资源不缓存,保证动态请求实时性
    }

    add_header X-Cache $upstream_cache_status;  
    # 调试用,显示缓存状态(MISS/HIT/BYPASS),方便排查问题
}

#PROXY-END/

🔹 使用方法(在宝塔面板里操作)

  1. 登录宝塔面板 → 网站 → 选择 1688fs.net → 点击 反向代理。

  2. 添加一个代理规则(目标地址写 https://www.1688fs.net:1443)。

  3. 添加完后,点进去 → 配置文件 → 把里面的 location / { ... } 替换成上面这段。

  4. 保存并重载 Nginx。


🔹 说明

  • resolver 100.100.2.136 100.100.2.138 valid=30s;

    • 指定阿里云内网的 DNS(比 8.8.8.8 快),每 30 秒重新解析一次域名。

    • 如果家庭宽带换 IP,30 秒内 ECS 就会更新。

  • set $backend

    • 强制让 proxy_pass 使用变量,这样才能触发动态 DNS 解析。

  • proxy_set_header Host $host;

    • 保持原始域名头(避免博客程序认为是 IP 访问)。

  • proxy_next_upstream

    • 出错时自动重试,不会马上 502。


🔹 验证方法

  1. 先访问 1688fs.net → 确认能正常反代到家庭服务器。

  2. 手动让家庭宽带换一个公网 IP(断开/重拨)。

  3. 等 30 秒,再访问 1688fs.net → 如果还能正常访问,就说明配置生效。


👉 这样配置好之后,你就 不需要重启 PHP/Nginx 了,DDNS 更新后 ECS 会自动跟上,不再频繁报 502。

要不要我再帮你加一份 支持 WebSocket(ws/wss)反代 的配置?这样如果你博客里有即时通信或者后台管理面板用 WebSocket,也能直接透传。


““支持 WebSocket(ws/wss)反代 的配置”请帮我加上, “proxy_set_header Host $host; 保持原始域名头(避免博客程序认为是 IP 访问) ”这个是客户端访问网站,IP直接透传到“https://www.1688fs.net:1443”服务器是把?”



🔹 完整配置(支持 HTTP + WebSocket)

location / {
    # DNS 动态解析,阿里云内网 DNS,30 秒刷新一次
    resolver 100.100.2.136 100.100.2.138 valid=30s;

    # 触发变量方式 proxy_pass,保证 Nginx 每次都能刷新解析
    set $backend "https://www.1688fs.net:1443";

    proxy_pass $backend;

    # ========= 请求头透传 =========
    proxy_set_header Host $host;                # 保持用户访问的域名(1688fs.net)
    proxy_set_header X-Real-IP $remote_addr;    # 传递真实客户端 IP
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    # ========= WebSocket 支持 =========
    proxy_http_version 1.1;                     # 必须 HTTP/1.1 才能升级
    proxy_set_header Upgrade $http_upgrade;     # WebSocket 升级头
    proxy_set_header Connection "upgrade";      # 连接升级
    proxy_read_timeout 60s;                     # WebSocket 长连接超时时间

    # ========= 超时控制 =========
    proxy_connect_timeout 5s;
    proxy_send_timeout 30s;

    # ========= 出错时重试 =========
    proxy_next_upstream error timeout invalid_header http_502 http_503 http_504;
}

🔹 解释

  1. Host 透传

    proxy_set_header Host $host;
    • 用户访问的是 https://1688fs.net,Nginx 默认会把 Host 改成 blog.1688fs.net:1443。

    • 加上这一行后,Nginx 会把 用户原始访问的 Host(1688fs.net) 传给家庭服务器。

    • 好处:家庭服务器上的 Web 程序会认为自己就是被访问 1688fs.net,不会跳转到 blog.1688fs.net 或报错。

  2. 真实 IP 透传

    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 还是 ECS(因为 TCP 源 IP 已经变了),但是应用(比如 Nginx、PHP、博客程序)可以通过 X-Real-IP 获取到真正的客户端 IP。

    👉 也就是说:

    • 家庭服务器操作系统层面:来源 IP = ECS 公网 IP

    • 家庭服务器的 Web 应用层面:来源 IP = 用户真实 IP(通过 X-Real-IP)

    • X-Real-IP → 客户端真实 IP

    • X-Forwarded-For → 如果有多级代理,会追加 IP 列表

    • X-Forwarded-Proto → 协议(http/https),避免应用误判

  3. WebSocket 支持

    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    • 必须加这两行,否则 WebSocket (ws/wss) 握手会失败。

    • proxy_read_timeout 60s; → 避免 WebSocket 长时间空闲被断开。


🔹 使用方法

  1. 在宝塔面板 → 网站 → 反向代理 → 配置文件,替换成上面这份。

  2. 保存 → 重载 Nginx。

  3. 测试:

    • 打开 https://1688fs.net 看网页能否正常访问。

    • 如果博客里有 WebSocket(如评论系统、在线聊天、后台实时更新),检查浏览器开发者工具 → Network → ws 是否成功。

    • 在家庭服务器 Nginx/Apache/PHP 日志里,确认 X-Real-IP 是否能显示客户端的公网 IP。


👉 这样配置以后,你的 ECS 就能:

  • 自动刷新 DDNS IP(不用重启服务)

  • 支持 HTTP + WebSocket 正常转发

  • 日志里能看到客户端真实 IP(不是 ECS 的)


要不要我再帮你写一份 家庭服务器端 Nginx 配置,把 X-Real-IP 自动识别出来,日志里直接显示真实客户端 IP,而不是 ECS 的 IP?


扫描二维码推送至手机访问。

版权声明:如需转载请注明出处。

本文链接:https://www.1688fs.net/index.php/post/66.html

分享给朋友:

“专门适合宝塔面板(BT)+ 阿里云 ECS → 家庭 DDNS 服务器 的 Nginx 反向代理配置” 的相关文章

网站如何搬家?宝塔面板一键迁移详解

网站如何搬家?宝塔面板一键迁移详解

服务器更换,网站需要搬家,这对很多站长来说都是挺头疼的一件事,需要迁移网站程序、数据库,修改数据库连接文件等。如果缺乏经验的话,搬家完后可能还会出现各种各样的问题难以解决。但如果你用的是宝塔面板,网站搬家就不再是困扰你的问题了。今天后浪云就为大家介绍如何通过宝塔面板的一键迁移来完成网站搬家。1、登上...

macOS虚拟机安装全过程(VMware)

macOS虚拟机安装全过程(VMware)

大家好,又见面了,我是你们的朋友全栈君。作为一名忠实果粉,我最大的愿望就是能够拥有一台Macbook,体验macOS,但是作为学生党,这价钱,贵到离谱啊~~~watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY29wY2lu,size_20,c...

二维码墓碑:生命的数字化纪念

二维码墓碑:生命的数字化纪念

本文来自微信公众号:假装在读书 (ID:gh_2f355b253cfd),作者:宋沁语,编辑:夏艺珊、孙意然,题图来源:《心灵奇旅》“我知道墓地里躺着的是自己的祖先,但我不知道他是谁,我也不知道他为什么去世,他的一生是怎样的。”福建人胡剑波因此在墓碑上设计了二维码,创立了中国第一个二维码墓碑品牌。墓...

宅在家搭建传奇SF与小伙伴一同PK--是兄弟来砍我

宅在家搭建传奇SF与小伙伴一同PK--是兄弟来砍我

创作立场声明:娱乐为主。值友们切勿用来进行违法行为 ,若有法律或违规等相关行为请告知。追加修改(2020-04-12 13:39:08):追加内容: 有值友评论没有客户端,查看了下,好像是没共享上来,再次补发一个客户端连接 链接: https://pan.baidu.com/s/1JbD5qZgx...

自己架设传奇服务器,自己当服主

自己架设传奇服务器,自己当服主

创作立场声明:娱乐为主。值友们切勿用来进行违法行为 ,若有法律或违规等相关行为请告知。追加修改(2020-04-12 13:39:08):追加内容: 有值友评论没有客户端,查看了下,好像是没共享上来,再次补发一个客户端连接 链接: https://pan.baidu.com/s/1JbD5qZgx...