[{"data":1,"prerenderedAt":624},["ShallowReactive",2],{"navigation_docs":3,"-extension-basics-http-vhost":380,"-extension-basics-http-vhost-surround":619},[4,9,41,108,185,312,328,370,375],{"title":5,"path":6,"stem":7,"icon":8},"首页","\u002Fwhat-is-lolia","1.what-is-lolia","i-lucide-house",{"title":10,"icon":11,"path":12,"stem":13,"children":14,"page":40},"开始之前","i-lucide-list-check","\u002Fbefore-start","2.before-start",[15,20,25,30,35],{"title":16,"path":17,"stem":18,"icon":19},"入门阅读","\u002Fbefore-start\u002Fintroduction","2.before-start\u002F1.introduction","i-lucide-book",{"title":21,"path":22,"stem":23,"icon":24},"常见问题","\u002Fbefore-start\u002Ffaq","2.before-start\u002F2.faq","i-lucide-badge-question-mark",{"title":26,"path":27,"stem":28,"icon":29},"实名认证","\u002Fbefore-start\u002Fkyc","2.before-start\u002F3.kyc","i-lucide-user-check",{"title":31,"path":32,"stem":33,"icon":34},"安全提示","\u002Fbefore-start\u002Fsecurity","2.before-start\u002F4.security","i-lucide-shield-alert",{"title":36,"path":37,"stem":38,"icon":39},"大流量内容","\u002Fbefore-start\u002Fbig-traffic-contents","2.before-start\u002F5.big-traffic-contents","i-lucide-zap",false,{"title":42,"icon":43,"path":44,"stem":45,"children":46,"page":40},"面板","i-lucide-panels-top-left","\u002Fweb-management","3.web-management",[47,52,66,76,94],{"title":48,"path":49,"stem":50,"icon":51},"仪表盘","\u002Fweb-management\u002Fdashboard","3.web-management\u002F1.dashboard","i-lucide-gauge",{"title":53,"icon":54,"path":55,"stem":56,"children":57,"page":40},"隧道","i-lucide-chevrons-left-right-ellipsis","\u002Fweb-management\u002Ftunnel","3.web-management\u002F2.tunnel",[58,62],{"title":59,"path":60,"stem":61},"隧道管理","\u002Fweb-management\u002Ftunnel\u002Ftunnel-management","3.web-management\u002F2.tunnel\u002F1.tunnel-management",{"title":63,"path":64,"stem":65},"隧道创建","\u002Fweb-management\u002Ftunnel\u002Fcreate-tunnel","3.web-management\u002F2.tunnel\u002F2.create-tunnel",{"title":67,"icon":68,"path":69,"stem":70,"children":71,"page":40},"域名管理","i-lucide-globe-code","\u002Fweb-management\u002Fdomain-management","3.web-management\u002F3.domain-management",[72],{"title":73,"path":74,"stem":75},"域名白名单","\u002Fweb-management\u002Fdomain-management\u002Fwhitelist","3.web-management\u002F3.domain-management\u002F1.whitelist",{"title":77,"icon":78,"path":79,"stem":80,"children":81,"page":40},"OAuth","i-lucide-key-round","\u002Fweb-management\u002Foauth","3.web-management\u002F4.oauth",[82,86,90],{"title":83,"path":84,"stem":85},"应用管理","\u002Fweb-management\u002Foauth\u002Fapp-management","3.web-management\u002F4.oauth\u002F1.app-management",{"title":87,"path":88,"stem":89},"创建应用","\u002Fweb-management\u002Foauth\u002Fcreate-app","3.web-management\u002F4.oauth\u002F2.create-app",{"title":91,"path":92,"stem":93},"授权管理","\u002Fweb-management\u002Foauth\u002Fauthorizations","3.web-management\u002F4.oauth\u002F3.authorizations",{"title":95,"icon":96,"path":97,"stem":98,"children":99,"page":40},"账户设置","i-lucide-user-cog","\u002Fweb-management\u002Fsettings","3.web-management\u002F5.settings",[100,104],{"title":101,"path":102,"stem":103},"基础设置","\u002Fweb-management\u002Fsettings\u002Fsettings","3.web-management\u002F5.settings\u002F1.settings",{"title":105,"path":106,"stem":107},"安全性","\u002Fweb-management\u002Fsettings\u002Fsecurity","3.web-management\u002F5.settings\u002F2.security",{"title":109,"icon":110,"path":111,"stem":112,"children":113,"page":40},"客户端","i-lucide-laptop","\u002Fclient","4.client",[114,157,171],{"title":115,"icon":116,"path":117,"stem":118,"children":119,"page":40},"图形化客户端","i-lucide-app-window-mac","\u002Fclient\u002Fgui","4.client\u002F1.gui",[120,141,153],{"title":121,"path":122,"stem":123,"children":124,"page":40},"LoliaFrpClient","\u002Fclient\u002Fgui\u002Floliafrpclient","4.client\u002F1.gui\u002F1.loliafrpclient",[125,129,133,137],{"title":126,"path":127,"stem":128},"简介","\u002Fclient\u002Fgui\u002Floliafrpclient\u002Fintroduction","4.client\u002F1.gui\u002F1.loliafrpclient\u002F1.introduction",{"title":130,"path":131,"stem":132},"Windows","\u002Fclient\u002Fgui\u002Floliafrpclient\u002Fwindows","4.client\u002F1.gui\u002F1.loliafrpclient\u002F2.Windows",{"title":134,"path":135,"stem":136},"Linux","\u002Fclient\u002Fgui\u002Floliafrpclient\u002Flinux","4.client\u002F1.gui\u002F1.loliafrpclient\u002F3.Linux",{"title":138,"path":139,"stem":140},"Android","\u002Fclient\u002Fgui\u002Floliafrpclient\u002Fandroid","4.client\u002F1.gui\u002F1.loliafrpclient\u002F4.Android",{"title":142,"path":143,"stem":144,"children":145,"page":40},"LoliaShizuku","\u002Fclient\u002Fgui\u002Floliashizuku","4.client\u002F1.gui\u002F2.loliashizuku",[146,149],{"title":126,"path":147,"stem":148},"\u002Fclient\u002Fgui\u002Floliashizuku\u002Floliashizuku","4.client\u002F1.gui\u002F2.loliashizuku\u002F1.loliashizuku",{"title":150,"path":151,"stem":152},"快速入门","\u002Fclient\u002Fgui\u002Floliashizuku\u002Fusage","4.client\u002F1.gui\u002F2.loliashizuku\u002F2.usage",{"title":154,"path":155,"stem":156},"Kairo","\u002Fclient\u002Fgui\u002Fkairo","4.client\u002F1.gui\u002F3.kairo",{"title":158,"icon":159,"path":160,"stem":161,"children":162,"page":40},"命令行客户端","i-lucide-square-terminal","\u002Fclient\u002Fcli","4.client\u002F2.cli",[163,167],{"title":164,"path":165,"stem":166},"Lolia CLI","\u002Fclient\u002Fcli\u002Fcli","4.client\u002F2.cli\u002F1.cli",{"title":168,"path":169,"stem":170},"参考","\u002Fclient\u002Fcli\u002Freference","4.client\u002F2.cli\u002F2.reference",{"title":172,"icon":173,"path":174,"stem":175,"children":176,"page":40},"面板客户端","i-lucide-app-window","\u002Fclient\u002Fweb","4.client\u002F3.web",[177,181],{"title":178,"path":179,"stem":180},"MCSManager FRP模板","\u002Fclient\u002Fweb\u002Fmcsm","4.client\u002F3.web\u002F1.mcsm",{"title":182,"path":183,"stem":184},"MSLX 面板插件","\u002Fclient\u002Fweb\u002Fmslx","4.client\u002F3.web\u002F2.mslx",{"title":186,"icon":187,"path":188,"stem":189,"children":190,"page":40},"配置指南","i-lucide-sliders-horizontal","\u002Ftutorials","5.tutorials",[191,210,261,286],{"title":192,"icon":193,"path":194,"stem":195,"children":196,"page":40},"常见应用","i-lucide-toolbox","\u002Ftutorials\u002Fapp","5.tutorials\u002F1.app",[197],{"title":198,"path":199,"stem":200,"children":201,"page":40},"RDP远程桌面","\u002Ftutorials\u002Fapp\u002Frdp","5.tutorials\u002F1.app\u002F1.rdp",[202,206],{"title":203,"path":204,"stem":205},"通用配置","\u002Ftutorials\u002Fapp\u002Frdp\u002Fintroduction","5.tutorials\u002F1.app\u002F1.rdp\u002F1.introduction",{"title":207,"path":208,"stem":209},"以服务模式运行LoliaFRP","\u002Ftutorials\u002Fapp\u002Frdp\u002Fcli-tutorial","5.tutorials\u002F1.app\u002F1.rdp\u002F2.cli-tutorial",{"title":211,"icon":212,"path":213,"stem":214,"children":215,"page":40},"游戏应用","i-lucide-gamepad-2","\u002Ftutorials\u002Fgame","5.tutorials\u002F2.game",[216,257],{"title":217,"path":218,"stem":219,"children":220,"page":40},"Minecraft","\u002Ftutorials\u002Fgame\u002Fminecraft","5.tutorials\u002F2.game\u002F1.minecraft",[221,225,229,233,237,241,245,249,253],{"title":222,"path":223,"stem":224},"Java 版局域网联机","\u002Ftutorials\u002Fgame\u002Fminecraft\u002Fmcjavalan","5.tutorials\u002F2.game\u002F1.minecraft\u002F1.mcjavalan",{"title":226,"path":227,"stem":228},"Java 版独立服务器","\u002Ftutorials\u002Fgame\u002Fminecraft\u002Fmcjavaserver","5.tutorials\u002F2.game\u002F1.minecraft\u002F2.mcjavaserver",{"title":230,"path":231,"stem":232},"Simple Voice Chat","\u002Ftutorials\u002Fgame\u002Fminecraft\u002Fsimplevoicechat","5.tutorials\u002F2.game\u002F1.minecraft\u002F3.simplevoicechat",{"title":234,"path":235,"stem":236},"外置登录联机教程","\u002Ftutorials\u002Fgame\u002Fminecraft\u002Fauthlib-injector","5.tutorials\u002F2.game\u002F1.minecraft\u002F4.authlib-injector",{"title":238,"path":239,"stem":240},"基岩版服务器（BDS）","\u002Ftutorials\u002Fgame\u002Fminecraft\u002Fbedrock-nethernet","5.tutorials\u002F2.game\u002F1.minecraft\u002F5.bedrock-nethernet",{"title":242,"path":243,"stem":244},"旧版基岩版（RakNet）","\u002Ftutorials\u002Fgame\u002Fminecraft\u002Fbedrock-raknet","5.tutorials\u002F2.game\u002F1.minecraft\u002F6.bedrock-raknet",{"title":246,"path":247,"stem":248},"Geyser 互通服","\u002Ftutorials\u002Fgame\u002Fminecraft\u002Fgeysermc","5.tutorials\u002F2.game\u002F1.minecraft\u002F7.geysermc",{"title":250,"path":251,"stem":252},"旧版 Geyser（RakNet）","\u002Ftutorials\u002Fgame\u002Fminecraft\u002Fgeyser-raknet","5.tutorials\u002F2.game\u002F1.minecraft\u002F8.geyser-raknet",{"title":254,"path":255,"stem":256},"SRV 解析","\u002Ftutorials\u002Fgame\u002Fminecraft\u002Fsrv-record","5.tutorials\u002F2.game\u002F1.minecraft\u002F9.srv-record",{"title":258,"path":259,"stem":260},"星露谷物语多人联机","\u002Ftutorials\u002Fgame\u002Fstardew-valley","5.tutorials\u002F2.game\u002F2.stardew-valley",{"title":262,"icon":263,"path":264,"stem":265,"children":266,"page":40},"网页应用","i-lucide-link-2","\u002Ftutorials\u002Fweb","5.tutorials\u002F3.web",[267,270,274,278,282],{"title":150,"path":268,"stem":269},"\u002Ftutorials\u002Fweb\u002Fquick-start","5.tutorials\u002F3.web\u002F1.quick-start",{"title":271,"path":272,"stem":273},"DNS 配置","\u002Ftutorials\u002Fweb\u002Fdns-config","5.tutorials\u002F3.web\u002F2.dns-config",{"title":275,"path":276,"stem":277},"Apache","\u002Ftutorials\u002Fweb\u002Fapache","5.tutorials\u002F3.web\u002F3.apache",{"title":279,"path":280,"stem":281},"NGINX","\u002Ftutorials\u002Fweb\u002Fnginx","5.tutorials\u002F3.web\u002F4.nginx",{"title":283,"path":284,"stem":285},"获取访客真实IP","\u002Ftutorials\u002Fweb\u002Fget-realip","5.tutorials\u002F3.web\u002F5.get-realip",{"title":287,"icon":288,"path":289,"stem":290,"children":291,"page":40},"进阶配置","i-lucide-file-cog","\u002Ftutorials\u002Fadvanced","5.tutorials\u002F4.advanced",[292,296,300,304,308],{"title":293,"path":294,"stem":295},"配置PROXY protocol","\u002Ftutorials\u002Fadvanced\u002Fproxy-protocol","5.tutorials\u002F4.advanced\u002F1.proxy-protocol",{"title":297,"path":298,"stem":299},"双栈网络配置","\u002Ftutorials\u002Fadvanced\u002Fmixed-v4-v6","5.tutorials\u002F4.advanced\u002F2.mixed-v4-v6",{"title":301,"path":302,"stem":303},"AutoTLS","\u002Ftutorials\u002Fadvanced\u002Fautotls","5.tutorials\u002F4.advanced\u002F3.autotls",{"title":305,"path":306,"stem":307},"多个隧道创建和使用","\u002Ftutorials\u002Fadvanced\u002Fmulti-tunnel","5.tutorials\u002F4.advanced\u002F4.multi-tunnel",{"title":309,"path":310,"stem":311},"使用自己的域名","\u002Ftutorials\u002Fadvanced\u002Fcname","5.tutorials\u002F4.advanced\u002F5.cname",{"title":313,"icon":314,"defaultOpen":40,"path":315,"stem":316,"children":317,"page":40},"开发者","i-lucide-folder-code","\u002Fdevelopers","6.developers",[318,323],{"title":319,"path":320,"stem":321,"icon":322},"LoliaFRP Open API","\u002Fdevelopers\u002Fopenapi","6.developers\u002F1.openapi","i-lucide-webhook",{"title":324,"path":325,"stem":326,"icon":327},"OAuth2 鉴权","\u002Fdevelopers\u002Foauth","6.developers\u002F2.oauth","i-lucide-fingerprint-pattern",{"title":329,"icon":330,"defaultOpen":40,"path":331,"stem":332,"children":333,"page":40},"扩展阅读","i-lucide-book-open-text","\u002Fextension","7.extension",[334,338,360],{"title":126,"path":335,"stem":336,"icon":337},"\u002Fextension\u002Fabout","7.extension\u002F1.about","i-lucide-text-initial",{"title":339,"icon":340,"defaultOpen":40,"path":341,"stem":342,"children":343,"page":40},"相关原理","i-lucide-monitor-cloud","\u002Fextension\u002Fbasics","7.extension\u002F2.basics",[344,348,352,356],{"title":345,"path":346,"stem":347},"frp 的工作基础","\u002Fextension\u002Fbasics\u002Ffrp-base","7.extension\u002F2.basics\u002F1.frp-base",{"title":349,"path":350,"stem":351},"TLS 与证书","\u002Fextension\u002Fbasics\u002Ftls","7.extension\u002F2.basics\u002F2.tls",{"title":353,"path":354,"stem":355},"密码学基础","\u002Fextension\u002Fbasics\u002Fcrypto","7.extension\u002F2.basics\u002F3.crypto",{"title":357,"path":358,"stem":359},"HTTP 虚拟主机","\u002Fextension\u002Fbasics\u002Fhttp-vhost","7.extension\u002F2.basics\u002F4.http-vhost",{"title":361,"icon":362,"defaultOpen":40,"path":363,"stem":364,"children":365,"page":40},"疑难解答","i-lucide-bug-off","\u002Fextension\u002Fapplications","7.extension\u002F3.applications",[366],{"title":367,"path":368,"stem":369},"Minecraft Java SRV与forced hosts搭配","\u002Fextension\u002Fapplications\u002Fminecraft-srv-forced-hosts","7.extension\u002F3.applications\u002F1.minecraft-srv-forced-hosts",{"title":371,"path":372,"stem":373,"icon":374},"社区","\u002Fcommunity","8.community","i-lucide-users",{"title":376,"path":377,"stem":378,"icon":379},"参与贡献","\u002Fcontributing","9.contributing","i-lucide-git-pull-request-arrow",{"id":381,"title":357,"body":382,"description":612,"extension":613,"links":614,"meta":615,"navigation":616,"path":358,"seo":617,"stem":359,"__hash__":618},"docs\u002F7.extension\u002F2.basics\u002F4.http-vhost.md",{"type":383,"value":384,"toc":601},"minimark",[385,396,401,423,426,430,433,483,492,496,510,514,520,523,542,546,551,558,562,570,577,581],[386,387,388,389,392,393,395],"tip",{},"本文只讲原理。域名验证见",[390,391,73],"a",{"href":74},"，隧道本身见",[390,394,63],{"href":64},"。",[397,398,400],"h2",{"id":399},"_1-一个端口怎么服务多个站点","1. 一个端口怎么服务多个站点",[402,403,404,405,409,410,413,414,417,418,422],"p",{},"按端口分隧道时，一条隧道占一个远程端口，访客连 ",[406,407,408],"code",{},"节点:端口"," 即可。但 80 与 443 只有一个，不可能每条隧道各分一个，于是 ",[406,411,412],{},"HTTP","\u002F",[406,415,416],{},"HTTPS"," 隧道改成按",[419,420,421],"strong",{},"域名","区分：所有 HTTP 隧道共用节点的 80，所有 HTTPS 隧道共用 443，节点看请求里的域名决定交给哪条隧道。",[402,424,425],{},"这就是虚拟主机（vhost）：同一组地址与端口上挂着多个站点。",[397,427,429],{"id":428},"_2-host-与-sni","2. Host 与 SNI",[402,431,432],{},"区分域名靠两处信息，取决于请求是明文还是加密：",[434,435,436,452],"table",{},[437,438,439],"thead",{},[440,441,442,446,449],"tr",{},[443,444,445],"th",{},"请求",[443,447,448],{},"读哪里",[443,450,451],{},"是否加密",[453,454,455,471],"tbody",{},[440,456,457,462,468],{},[458,459,460],"td",{},[406,461,412],{},[458,463,464,465],{},"请求头里的 ",[406,466,467],{},"Host",[458,469,470],{},"明文",[440,472,473,477,480],{},[458,474,475],{},[406,476,416],{},[458,478,479],{},"握手第一个包里的 SNI",[458,481,482],{},"仅这一段明文",[402,484,485,487,488,491],{},[406,486,416],{}," 隧道不做解密：节点只读 ",[406,489,490],{},"ClientHello"," 里的 SNI 决定交给谁，之后整条连接原样透传给 frpc。",[397,493,495],{"id":494},"_3-80-与-443-是两套-vhost","3. 80 与 443 是两套 vhost",[402,497,498,500,501,503,504,506,507,509],{},[406,499,412],{}," 与 ",[406,502,416],{}," 在节点上分开处理，互不占用：同一个域名可以同时有一条 ",[406,505,412],{}," 隧道和一条 ",[406,508,416],{}," 隧道，分别落在 80 和 443 上，它们不会因为域名相同而冲突。",[397,511,513],{"id":512},"_4-一个域名只能对应一个同类型后端","4. 一个域名只能对应一个同类型后端",[402,515,516,517,395],{},"同一个节点上，同一个域名在同一套 vhost 里只能有一个后端。再启动一条同类型、同域名的隧道时，节点无法判断该把请求交给谁，日志会报 ",[406,518,519],{},"router config conflict",[402,521,522],{},"不算冲突的情况：",[524,525,526,536,539],"ul",{},[527,528,529,530,532,533,535],"li",{},"同域名、不同协议：一条 ",[406,531,412],{},"、一条 ",[406,534,416],{},"，各占各的表",[527,537,538],{},"同域名、不同节点：每个节点有各自的 vhost 表",[527,540,541],{},"不同域名：本来就是用来区分站点的",[397,543,545],{"id":544},"_5-没有域名的请求","5. 没有域名的请求",[402,547,548,550],{},[406,549,467],{}," 与 SNI 都可能缺失：直接用 IP 访问、客户端不发 SNI，或者中间设备改写了请求头。",[402,552,553,554,557],{},"节点只按域名查表，查不到就没有后端，连接直接失败。它不会像 nginx 那样回落到 ",[406,555,556],{},"default_server","——节点上不存在默认站点，也没有任何一条隧道会被当作兜底。",[397,559,561],{"id":560},"_6-域名从哪来","6. 域名从哪来",[402,563,564,565,567,568,395],{},"vhost 只认域名，所以域名要先证明属于您：添加进",[390,566,73],{"href":74},"并通过 DNS 验证，之后才能在建隧道时选择。同时还要把域名指向节点，访客才到得了，填写规则见 ",[390,569,271],{"href":272},[402,571,572,573,576],{},"节点读的是",[419,574,575],{},"请求里的","域名，不关心这个域名解析到了哪里。前面套 CDN 时，回源请求带着同一个域名，选路结果与直连时相同。",[397,578,580],{"id":579},"_7-结论","7. 结论",[524,582,583,586,592,595,598],{},[527,584,585],{},"vhost 用域名代替端口做区分，让多条隧道共用一个入口",[527,587,588,589,591],{},"明文看 ",[406,590,467],{},"，加密看 SNI，节点不需要解密",[527,593,594],{},"80 与 443 是两套独立的表，同域名可以各占一条",[527,596,597],{},"同一个节点、同一个域名、同一协议只能有一个后端",[527,599,600],{},"没有域名就没有选路依据，节点不提供默认站点",{"title":602,"searchDepth":603,"depth":603,"links":604},"",2,[605,606,607,608,609,610,611],{"id":399,"depth":603,"text":400},{"id":428,"depth":603,"text":429},{"id":494,"depth":603,"text":495},{"id":512,"depth":603,"text":513},{"id":544,"depth":603,"text":545},{"id":560,"depth":603,"text":561},{"id":579,"depth":603,"text":580},"节点如何用一个端口按域名把请求分给不同隧道，以及 Host 与 SNI 的区别","md",null,{},true,{"title":357,"description":612},"MmKcoEmg8pwJ88c34cBTCLAlccOn7dxFVvPn5KjbMvA",[620,622],{"title":353,"path":354,"stem":355,"description":621,"children":-1},"TLS 用到的两类密码：密钥交换与前向保密、AEAD、密钥派生，以及密码套件名字的读法",{"title":367,"path":368,"stem":369,"description":623,"children":-1},"指导srv搭配forced hosts时的问题",1793537051122]