Web服务
功能介绍
Web模块提供了简易的反向代理、重定向、URL跳转、静态文件服务等功能。
基础使用说明
添加Web服务规则
菜单===>Web服务===>Web服务规则列表===>添加Web服务规则
文档只针对小白用户,只须填写/关注下面参数
-
操作模式
- 简易模式:满足大多数人使用要求
- 定制模式:提供更多可定制的参数 小白用户切勿修改填写定制模式下的任何参数
- 简易模式:满足大多数人使用要求
-
监听类型
- 你可以两种都勾上。
- 没有公网V4的情况下只勾上v6就足够了。
- 小米路由v4的443和80被系统占用,如果你要使用这两个端口可以使用v6的80和443
-
监听端口
- 所谓隐藏端口只是http使用了80监听端口,https使用了443监听端口,除非你明确知道你的运营商没有禁用80和433端口,否则不建议使用这两个端口。
- 支持两条不同的Web服务规则,一条启用TLS(HTTPS),一条不启用TLS(http)监听同一个端口.
-
防火墙自动放行
- Lucky运行在Openwrt等路由器环境,并且由iptables控制防火墙时此功能可以自动控制端口开放关闭
- 如果你的Lucky运行在Windows或者Docker环境下可以关闭此功能
- Lucky运行在Openwrt等路由器环境,并且由iptables控制防火墙时此功能可以自动控制端口开放关闭
-
TLS开关
- 决定你是否使用https
- 证书请在 菜单===>安全相关===>SSL证书 添加管理,每次手动添加证书后需要重启一次Web服务规则证书才生效。
-
添加Web服务子规则
- 你可以添加任意条Web服务子规则
- 子规则中的Web服务类型支持反向代理,重定向和URL跳转
- 子规则中的前端域名添加的就是你所需的域名,不要包含http://开头部分,直接填写域名即可。例如 123.abc.com
- 虽然前端域名与路径这部分参数支持 123.abc.com/def 这种带路径的方式,但不建议用作反向代理,只建议做跳转或重定向使用。使用路径形式反代有任何问题都不要反馈给开发者。
- 子规则中的后端地址添加的就是你的内网的服务地址 ,例如 *** http://192.168.36.180:28888 ***, 当后端服务是带有自签证书的https服务时,你需要在定制模式中启用 **忽略后端TLS证书验证
- 当服务类型是重定向或URL跳转时,后端地址你可以填写任意网址。重定向使用时支持 https://{host}:{port}的形式,实现http跳转https。
- 子规则中的BasicAuth认证功能可以让陌生人不能轻易访问你的Web服务。
- 携带客户端IP、追加客户端IP、跨域支持等更多功能可在定制模式中查看。小白直接忽略。
使用注意
- 添加完规则后要第一时间留意规则开关是否显示为开
- 或者查看添加Web服务规则旁边的模块日志,看是否存在 启用反向代理规则[http] [:16666]成功" 这类的日志。
- 如果日志提示规则启用出错,请更换监听端口。
- 外网无法访问时,查看默认子规则和各个子规则是否有访问日志显示。如果没有访问记录自行检查防火墙/路由ipv4端口转发等自身网络设置。
- 有问题先查阅常见问题中 Web服务相关问题。
HTTP跳转HTTPS
- 本节操作的前提是你已经创建成功一条https规则,并且外网可以访问。
- 新创建一条Web服务规则,注意这条新的Web服务规则不要启用TLS
- 选择定制模式
- 在默认子规则中选择Web服务类型为 重定向
- 如果你https规则监听的是443端口,那么你在这条新规则的监听端口填80(你要自行确保你的80端口未被占用), 默认子规则中的默认目标地址填写 https://{host}
- 如果你https规则监听的是非443端口,那么你在这条新规则的监听端口填和你https同样的端口(你要自行确保你的80端口未被占用), 默认子规则中的默认目标地址填写 https://{host}:{port}
- 如果你https规则监听的是非443端口,并且你在这条新规则的监听端口和你https端口不一致,例如https端口使用了 16601,那么你可以在默认目标地址里面写明你的https端口,默认子规则中的默认目标地址填写 https://{host}:16601
- 需要注意:两条规则的监听类型要完全一致,不能一条监听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:基本认证密码
常见问题
仔细检查Web服务每一条默认规则和子规则,把“单IP连续404限制”和基本认证中的“单IP连续登陆错误最多次数”改为0,如果您对这两处设置不够理解或把握,请勿随意修改。
群晖控制面板 安全性- 信任的代理服务器-添加 当前Lucky所在内网网段,比如 192.168.31.0/24。
- 检查您的内部网络设置,确保Lucky所在系统的网络环境能够正常访问后端地址。如果后端地址与Lucky在同一台机器上,尝试将后端地址的IP地址更改为127.0.0.1。
- 在寻求网友帮助时,请一次性清楚地描述您的内部网络环境以及Lucky的安装方式等细节。
- 不存在所谓的“隐藏端口”。
- 所谓的“隐藏端口”只是指你的 80/443 端口没有被运营商封禁。
- 如果你启用了 TLS,你的 HTTPS Web 服务规则监听 443 端口;或者你未启用 TLS, HTTP Web 服务规则监听 80 端口。此时外网访问http/https://{域名/ip}就不需要带端口。
默认支持,不用其它设置。
- 这种情况只会出现在通过lucky反向代理访问Lucky后台的情况下。
- 这是因为修改Web服务规则后需要重启规则(关闭端口再打开)。
- 如果您直接使用域名加Lucky后台端口的方式,则不会出现此问题。
- 反向代理是通过接收客户端的请求,并将请求转发到目标服务器的代理服务器来实现的。因此,只有使用了HTTP/HTTPS协议的应用程序才能通过反向代理进行访问。
- 对于Windows远程控制、FTP、Samba等应用程序,它们通常使用了其他协议,例如RDP、FTP、SMB等,因此无法使用反向代理进行访问。在这种情况下,需要使用端口转发等方式来实现访问。
1.Cloudflare证书属于自签证书,肯定显示不安全,请使用ACME申请证书。
- 自己ping一下访问的域名,看是否正确。
- 尽量不要使用泛域名来解析,使用明确的域名。
- 升级到2.0版本
- 编辑Web服务规则 ,操作模式切换到 定制模式
- 可道云所在的子规则里面开启 追加客户端协议头到指定Header
- 自定义Header Key填写 X-Forwarded-Proto 并保存即可。
- 升级到2.0版本
在HomeAssistant configuration.yaml配置里面要设置IP白名 单
打开定制模式,启用 使用目标地址Host
打开定制模式,启用 使用目标地址Host
- 确保lucky 网络环境下可访问 后端地址。
- 查询截图对应子规则的访问日志 截图向网友请教。
- 打开定制模式,启用 使用目标地址Host
- 关闭/打开 定制模式中的万事大吉开关
- 先确保可以使用nginx反代成功再向开发者反馈。
lucky的Web服务并非基于Nginx,只兼容了proxy_set_header,proxy_hide_header,add_header等少部分配置参数。
此情况建议只对/路径启用认证
当子规则日志中没有访问记录时,这表明流量尚未传输至Lucky端。请检查您的网络连接是否正常,并学会在手机端安装相关应用程序,使用ping来检测域名查询结果是否与Lucky端的DDNS结果一致。
获取到公网IPv4并不代表你有公网IP。
在同一局域网内无法通过域名访问反向代理,这可能是由于NAT回环问题造成的。您可以自行寻找解决方案,这与lucky无关。
虽然Lucky Web服务子规则本身支持路径,但大多数后端服务并不支持这种访问方式。
尽量避免使用以下端口
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