OpenWrt 上设置 nginx HTTP 不重定向到 HTTPS 以正常使用 OpenClash yacd 面板

由于 OpenWrt 编译时,如果在 make menuconfig 里选中了 LuCI -> Collections -> luci-nginxluci-ssl-nginx,会自动设置为将 HTTP(80 端口)重定向到 HTTPS(443 端口)。

但是 Clash 的 RESTful API 默认情况下以 HTTP 协议运行在 9090 端口,使用 nginx 作为 Web 服务器的 yacd 面板就无法连接到 Clash 的 RESTful API。

本文将教你用 5 条 shell 命令(算 6 条也行)使 nginx 不将 HTTP 流量重定向到 HTTPS。

以下内容更新于 2022-5-29。

OpenClash v0.45.22-beta 起,yacd 面板也将使用 Clash 的内置 Web 服务器(即与 Clash RESTful API 使用同一 Web 服务器,默认情况下监听 9090 端口)进行服务,无需再按照此教程进行设置即可正常使用 yacd 面板。

参考:
vernesong/OpenClash#2386


  1. 通过 SSH 或 luci-app-ttyd 连接到 OpenWrt 的终端。
    ssh-term-home

    OpenWrt 使用 uci 让整个系统的配置集中到一处,更便于管理。此教程基于 ImmortalWrt 21.02-SNAPSHOT r19080-b7afdb4b5b。理论上也适用于 OpenWrt 官方版本和其他没有移除 uci 的 OpenWrt 下游项目。
  2. 使用

    uci show nginx

    来查看所有与 nginx 相关的设置项。
    show-nginx-related-settings
    我们的目标就是让 nginx 的虚拟服务器 _redirect2ssl 返回与 _lan 相同的内容。

  3. 删除重定向相关内容

    uci delete nginx._redirect2ssl.return
  4. 添加与 _lan 虚拟服务器相同的 include

    uci add_list nginx._redirect2ssl.include='restrict_locally'
    uci add_list nginx._redirect2ssl.include='conf.d/*.locations'
  5. 提交所有 uci 更改

    uci commit
  6. 重载 nginx 配置

    service nginx reload

以下是所有命令的执行及结果截图。
full-shell-history


其实,还有一种更简单的解决方法。以下截图来自 yacd/README.md at master · haishanh/yacd
yacd-online

翻译:
站点 http://yacd.haishan.me 同时提供了对 HTTP 和 HTTPS 的支持,因为许多浏览器封锁了在 HTTPS 站点上对 HTTP 资源发起的请求。

警告

无论如何,不要在没有除了 Clash 的 RESTful API secret 以外的安全措施的情况下,从 WAN 访问 Clash 的 RESTful API。因为 secret 直接使用 URL 参数传递到 Clash 内核,也就意味着攻击者只需要截获你请求的 URL,即可修改你的 Clash 设置。

源于对音乐和科技的热爱

可能感兴趣的文章

留言