跳到主要内容

Web服务

功能介绍

Web模块提供了简易的反向代理、重定向、URL跳转、静态文件服务等功能。

基础使用说明

添加Web服务规则

添加Web服务规则

菜单===>Web服务===>Web服务规则列表===>添加Web服务规则

文档只针对小白用户,只须填写/关注下面参数

  1. 操作模式

    1. 简易模式:满足大多数人使用要求
    2. 定制模式:提供更多可定制的参数 小白用户切勿修改填写定制模式下的任何参数
  2. 监听类型

    1. 你可以两种都勾上。
    2. 没有公网V4的情况下只勾上v6就足够了。
    3. 小米路由v4的443和80被系统占用,如果你要使用这两个端口可以使用v6的80和443
  3. 监听端口

    1. 所谓隐藏端口只是http使用了80监听端口,https使用了443监听端口,除非你明确知道你的运营商没有禁用80和433端口,否则不建议使用这两个端口。
    2. 支持两条不同的Web服务规则,一条启用TLS(HTTPS),一条不启用TLS(http)监听同一个端口.
  4. 防火墙自动放行

    1. Lucky运行在Openwrt等路由器环境,并且由iptables控制防火墙时此功能可以自动控制端口开放关闭
    2. 如果你的Lucky运行在Windows或者Docker环境下可以关闭此功能
  5. TLS开关

    1. 决定你是否使用https
    2. 证书请在 菜单===>安全相关===>SSL证书 添加管理,每次手动添加证书后需要重启一次Web服务规则证书才生效。
  6. 添加Web服务子规则

    1. 你可以添加任意条Web服务子规则
    2. 子规则中的Web服务类型支持反向代理重定向URL跳转
    3. 子规则中的前端域名添加的就是你所需的域名,不要包含http://开头部分,直接填写域名即可。例如 123.abc.com
    4. 虽然前端域名与路径这部分参数支持 123.abc.com/def 这种带路径的方式,但不建议用作反向代理,只建议做跳转或重定向使用。使用路径形式反代有任何问题都不要反馈给开发者。
    5. 子规则中的后端地址添加的就是你的内网的服务地址 ,例如 *** http://192.168.36.180:28888 ***, 当后端服务是带有自签证书的https服务时,你需要在定制模式中启用 **忽略后端TLS证书验证
    6. 当服务类型是重定向URL跳转时,后端地址你可以填写任意网址。重定向使用时支持 https://{host}:{port}的形式,实现http跳转https
    7. 子规则中的BasicAuth认证功能可以让陌生人不能轻易访问你的Web服务。
    8. 携带客户端IP、追加客户端IP、跨域支持等更多功能可在定制模式中查看。小白直接忽略。

使用注意

使用注意
  1. 添加完规则后要第一时间留意规则开关是否显示为
  2. 或者查看添加Web服务规则旁边的模块日志,看是否存在 启用反向代理规则[http] [:16666]成功" 这类的日志。
  3. 如果日志提示规则启用出错,请更换监听端口。
  4. 外网无法访问时,查看默认子规则和各个子规则是否有访问日志显示。如果没有访问记录自行检查防火墙/路由ipv4端口转发等自身网络设置。
  5. 有问题先查阅常见问题中 Web服务相关问题。

HTTP跳转HTTPS

HTTP跳转HTTPS
  1. 本节操作的前提是你已经创建成功一条https规则,并且外网可以访问。
  2. 新创建一条Web服务规则,注意这条新的Web服务规则不要启用TLS
  3. 选择定制模式
  4. 在默认子规则中选择Web服务类型为 重定向
  5. 如果你https规则监听的是443端口,那么你在这条新规则的监听端口填80(你要自行确保你的80端口未被占用), 默认子规则中的默认目标地址填写 https://{host}
  6. 如果你https规则监听的是非443端口,那么你在这条新规则的监听端口填和你https同样的端口(你要自行确保你的80端口未被占用), 默认子规则中的默认目标地址填写 https://{host}:{port}
  7. 如果你https规则监听的是非443端口,并且你在这条新规则的监听端口和你https端口不一致,例如https端口使用了 16601,那么你可以在默认目标地址里面写明你的https端口,默认子规则中的默认目标地址填写 https://{host}:16601
  8. 需要注意:两条规则的监听类型要完全一致,不能一条监听tcp6而另外一条监听tcp

可用变量

用于后端地址,跳转地址

{host}: 请求主机名/域名,不含端口
{port}: 访问端口
{hostAndPort}: 请求主机名/域名,含端口
{path}: 请求路径
{PATH}: 请求路径(不含前面的/)
{args}: 请求参数
{Args}: 请求参数(不含前面的问号)
{ClientIP}: 客户端IP,优先从请求头获取
{RemoteIP}: 客户端IP,不会从请求头获取
{ClientIP_IPInfo}: 客户端IP的地址信息,配合IP地址库使用
{RemoteIP_IPInfo}: 客户端IP的地址信息,配合IP地址库使用,不会从请求头获取
{time}: 当前时间,格式:2006-01-02 15:04:05
{domainPartX}: 末尾X为数字1开始,获取请求host第X段,段以.分割
{pathPartXXX}: 末尾X为数字1开始,获取请求路径的第X段 ,段以/分割
{数字}: 前端域名含有*通配符时,表示第N个通配符匹配的字符串,从1开始, {1}
{STUN_规则名_ADDR}: STUN规则穿透地址
{STUN_规则名_IP}: STUN规则穿透IP
{STUN_规则名_PORT}: STUN规则穿透端口

{QueryParam_XXX}: 文本输出可用,获取相应请求参数。例如https://127.0.0.1:666/?ip=8.8.8.8, {QueryParam_ip}=8.8.8.8
{QueryParam_XXX_IPInfo}:文本输出可用,获取相应请求参数的IP信息查询结果。例如https://127.0.0.1:666/?ip=8.8.8.8, {QueryParam_ip_IPInfo}=美国|Level3


更多变量支持查看 全局变量说明。

自定义参数

为了能更灵活地使用 Web 服务,引入了兼容部分 nginx 配置格式的自定义参数设置。 需要注意的是,每句设置之间用“;”号分割。
例子:

proxy_set_header {headerkey} [headervalue]; 用于设置请求头信息。

proxy_hide_header {headerkey}; 用于隐藏指定的请求头。

add_header {headerkey} [headervalue]; 用于添加请求头信息。

只对于路径 /etc/config 设置,
其规则为 path /etc/config proxy_set_header {headerkey} [headervalue] | add_header {headerkey} [headervalue]。此规则表示,仅对匹配该路径的请求进行设置,多个设置之间用 | 分割。

对路径 /etc/config 以外的路径设置 path !!!/etc/config XXXXXXXXX.

HTTP 基本认证

认证信息设置支持多用户验证。例子:

user1:passwd1  # 用户名:user1 密码:passwd1
user2: #用户名: user1,密码为空
:passwd3 # 用户名为空,密码:passwd3

路径认证规则设置

/ 表示仅 对 /路径请求启用认证 
/abc/* 意味着对以 /abc/ 起始的请求实施认证;
可通过多行设置多个路径匹配。
以 "!!!" 起始的路径表明该路径跳过验证,例如!!!/etc/config 表示 /etc/config 路径无需验证,其他路径则需进行验证。
当同时存在以!!! 开头的路径规则和不含!!! 开头的路径规则时,不符合这两种规则的请求路径均需进行验证。

对于 alist 等应用,因其身份验证所使用的请求头与基本认证的请求头相同,从而导致冲突,使得基本认证不断弹出验证框。在此情况下,可尝试开启“认证信息存储进 Cookie”开关 。

静态文件网站

选择“文件服务”类型,即可快速部署纯静态网页网站。

IP查询服务

选择“文本输出”类型,按照以下格式自定义输出内容:

当前IP:{ClientIP}   来自于:{ClientIP_IPInfo}

即可部署一个与 https://6.666666.host:66/ip 相同的IP查询服务接口。 如需获取IP地址信息,请按照文档中的说明先上传离线IP数据库。确保数据库文件符合要求,以便系统能够正确解析和提供IP地址的相关信息。

邮件发送

选择“邮件发送”类型,即可快速部署一个发送邮件的接口

接口调用方法 使用 POST 方法调用接口。

接口请求头

在请求头中设置:

content-type: application/json; charset=utf-8

. 接口请求主体格式 请求主体应遵循以下格式:

{
"SMTPHost": "stmp.qq.cn", //SMTP服务器地址
"SMTPPort": "587", //SMTP端口
"SenderEmail": "admin@qq.cn", //发件人邮箱
"SenderPassword": "", //发件密码
"RecipientEmail": "12345@qq.com", //收件人邮箱
"EmailSubject": "666", //邮件主题
"EmailBody": "666666", //邮件内容
"SenderName": "666", //发件人名称
"ContentType": "text/plain; charset=UTF-8", //邮件类型
"AsyncSend": false, //异步发送标记,
"RetryCountOnFailure": 0, //失败重试次数
"RetryInterval": 1000 //重试时间间隔
}

当异步发送标记为 true 时,调用接口会立即返回,无法获取邮件是否成功发送的状态。这种方式适合于不需要立即确认邮件发送结果的场景。自行根据实际需要使用。

可以通过浏览器访问该接口地址测试

注意:如果对基本认证该接口启用了基本认证,lucky内部各处Webhook中只需要在请求头加上下面配置即可。

BasicAuthUserName:基本认证用户名
BasicAuthPassword:基本认证密码

常见问题

访问反代的服务时提示403,发现IP被添加到全局黑名单

仔细检查Web服务每一条默认规则和子规则,把“单IP连续404限制”和基本认证中的“单IP连续登陆错误最多次数”改为0,如果您对这两处设置不够理解或把握,请勿随意修改。

反代群晖时群晖访问日志没有显示真实IP

群晖控制面板 安全性- 信任的代理服务器-添加 当前Lucky所在内网网段,比如 192.168.31.0/24。

反代出现502Bad Gateway提示。
  1. 检查您的内部网络设置,确保Lucky所在系统的网络环境能够正常访问后端地址。如果后端地址与Lucky在同一台机器上,尝试将后端地址的IP地址更改为127.0.0.1。
  2. 在寻求网友帮助时,请一次性清楚地描述您的内部网络环境以及Lucky的安装方式等细节。
我如何才可以隐藏端口?
  1. 不存在所谓的“隐藏端口”。
  2. 所谓的“隐藏端口”只是指你的 80/443 端口没有被运营商封禁。
  3. 如果你启用了 TLS,你的 HTTPS Web 服务规则监听 443 端口;或者你未启用 TLS, HTTP Web 服务规则监听 80 端口。此时外网访问http/https://{域名/ip}就不需要带端口。
反向代理怎么设置支持 Websocket ?

默认支持,不用其它设置。

提交修改Web服务规则后,提示请求出错,被退出登陆页面。
  1. 这种情况只会出现在通过lucky反向代理访问Lucky后台的情况下。
  2. 这是因为修改Web服务规则后需要重启规则(关闭端口再打开)。
  3. 如果您直接使用域名加Lucky后台端口的方式,则不会出现此问题。
为什么设置了反代Windows远程控制/FTP/samba/SSH 端口,但使用不了。
  1. 反向代理是通过接收客户端的请求,并将请求转发到目标服务器的代理服务器来实现的。因此,只有使用了HTTP/HTTPS协议的应用程序才能通过反向代理进行访问。
  2. 对于Windows远程控制、FTP、Samba等应用程序,它们通常使用了其他协议,例如RDP、FTP、SMB等,因此无法使用反向代理进行访问。在这种情况下,需要使用端口转发等方式来实现访问。
为什么我上传了Cloudflare的证书,浏览器方式显示不安全?

1.Cloudflare证书属于自签证书,肯定显示不安全,请使用ACME申请证书。

偶尔/经常通过域名无法访问个别子规则反向代理
  1. 自己ping一下访问的域名,看是否正确。
  2. 尽量不要使用泛域名来解析,使用明确的域名。
可道云设置反向代理后无法访问
  1. 升级到2.0版本
  2. 编辑Web服务规则 ,操作模式切换到 定制模式
  3. 可道云所在的子规则里面开启 追加客户端协议头到指定Header
  4. 自定义Header Key填写 X-Forwarded-Proto 并保存即可。
反向代理unbraid通过域名无法访问,需要在域名后面加上/login
  1. 升级到2.0版本
反向代理HomeAssistant 出现提示 400 Bad Request

在HomeAssistant configuration.yaml配置里面要设置IP白名单

华为路由/小米路由登陆页面无法反代

打开定制模式,启用 使用目标地址Host

群晖/绿联 WebDAV反代后,挂载到windows无法修改文件名

打开定制模式,启用 使用目标地址Host

访问页面显示502 BadGateway
  1. 确保lucky 网络环境下可访问 后端地址。
  2. 查询截图对应子规则的访问日志 截图向网友请教。
其他上述未提到的疑问,均可以尝试
  1. 打开定制模式,启用 使用目标地址Host
  2. 关闭/打开 定制模式中的万事大吉开关
  3. 先确保可以使用nginx反代成功再向开发者反馈。
Nginx 配置应该填在哪里?

lucky的Web服务并非基于Nginx,只兼容了proxy_set_header,proxy_hide_header,add_header等少部分配置参数。

启用BaseAuth后不断弹出登陆窗口

此情况建议只对/路径启用认证

为什么有时能够访问,有时却无法访问?有些域名可以正常访问,而有些则无法访问。

当子规则日志中没有访问记录时,这表明流量尚未传输至Lucky端。请检查您的网络连接是否正常,并学会在手机端安装相关应用程序,使用ping来检测域名查询结果是否与Lucky端的DDNS结果一致。

为什么我设置了DDNS IPv4 获取到了公网IP,但还是没法访问?

获取到公网IPv4并不代表你有公网IP。

lucky同一局域网内无法通过域名访问反代,手机流量却可以。

在同一局域网内无法通过域名访问反向代理,这可能是由于NAT回环问题造成的。您可以自行寻找解决方案,这与lucky无关。

为什么不支持在同一域名下的不同路径访问不同的后端服务呢?

虽然Lucky Web服务子规则本身支持路径,但大多数后端服务并不支持这种访问方式。

无法访问,浏览器提示ERR_UNSAFE_PORT

尽量避免使用以下端口
1, // tcpmux
7, // echo
9, // discard
11, // systat
13, // daytime
15, // netstat
17, // qotd
19, // chargen
20, // ftp data
21, // ftp access
22, // ssh
23, // telnet
25, // smtp
37, // time
42, // name
43, // nicname
53, // domain
77, // priv-rjs
79, // finger
87, // ttylink
95, // supdup
101, // hostriame
102, // iso-tsap
103, // gppitnp
104, // acr-nema
109, // pop2
110, // pop3
111, // sunrpc
113, // auth
115, // sftp
117, // uucp-path
119, // nntp
123, // NTP
135, // loc-srv /epmap
139, // netbios
143, // imap2
179, // BGP
389, // ldap
465, // smtp+ssl
512, // print / exec
513, // login
514, // shell
515, // printer
526, // tempo
530, // courier
531, // chat
532, // netnews
540, // uucp
556, // remotefs
563, // nntp+ssl
587, // stmp?
601, // ??
636, // ldap+ssl
993, // ldap+ssl
995, // pop3+ssl
2049, // nfs
3659, // apple-sasl / PasswordServer
4045, // lockd
6000, // X11
6665, // Alternate IRC
6666, // Alternate IRC
6667, // Standard IRC
6668, // Alternate IRC
6669, // Alternate IRC