frp 配置多个 web 项目,无需购买域名

简单配置,参考

前言:

网上也有很多教程包括官方文档,都需要购买域名,并且把 frpc.ini 中 [web]节配置的  custom_domains 的值解析到外网的服务器,多个web项目需要多个 custom_domains(每个web项目保证唯一),统统把这些 custom_domains 解析到外网服务器,然后就可以使用,使用方式就是 custom_domains:vhost_http_port,就可以实现多个web项目的访问。

下面的方法不需要购买域名和域名解析服务,也可以实现多个web项目内网穿透使用

提出解决方法依据的原理(想快速解决问题,请跳过)

疑问: frp软件尽管配置了 custom_domains,但是统统解析到了同一台外网服务器,那为什么可以实现请求统一端口(frps.ini common 中的vhost_http_port ) 来达到访问不同web项目的需求呢?

1. 首先,我们都知道浏览器输入一个 url 的访问过程,如果是使用域名访问,那么首先需要解析域名获得真实的IP地址然后,通过TCP报文来发送。那么神奇的地方就来了,我们在 frpc.ini 中把所有的 web 项目的 custom_domains 都解析到了同一个 IP地址,并且 frps.ini 提供web访问的端口只有一个(vhost_http_port),按照socket建立连接,我们有了(IP,Port)这个元组就可以唯一确定这个连接了,因此我们可以断定所有配置的内网的web项目全部使用这一个socket完成

2. 那使用一个socket链接如何区分不同的内网web项目呢?

回想 frpc.ini ,我们在这里配置了不同的 custom_domains, 这就是关键,fpr server只有通过这个标识才能分发不同的数据到不同的web项目。因此,在我们通过 custom_domains:vhost_http_port 来访问目的 web项目时候,必要要保证   custom_domains  被传递到了 frp server,这样才能被分发。frp软件采用http中host字段来保证这个事情,当我们使用浏览器请求目标网站,浏览器自动把目的RUL域名填到 http request header 的host字段。因此,当这个请求到达 frp server的时候,只要通过查找与 request header host 对应的 web项目即可,这样就实现了一个端口分发的问题。(类似于Nginx中端口分发,只不过那里使用的 url 前缀进行分发,这里使用的 request header host 字段)

3. 看到这里你就明白该怎么做了(笑)

我们只要配置本机的 host 文件,追加每个 custom_domains 到 公网服务器的解析即可

通过这样就可以达到,custom_domains 被顺利放在 请求的header host字段,并且也不需要购买域名实现本地解析。

=========== 实践派 ==============

一、配置  frpc.ini [common]server_addr = xx.xx.xx.xx


[common]
server_addr = xx.xx.xx.xx
server_port = 7000


[ssh_sx]
type = tcp
local_ip = 127.0.0.1
local_port =
remote_port = [web_9990]
type = http
local_ip = 127.0.0.1
local_port = 9990 #网站使用的端口
custom_domains = a.free.domain #随便写个域名保证唯一 [web_9991]
type = http
local_ip = 127.0.0.1
local_port = 9991 #网站使用的端口
custom_domains = b.free.domain
#随便写个域名保证唯一

二、配置服务器 frps.ini

[common]
bind_port =
vhost_http_port =

二、 重新启动客户端软件 ./frpc -c frpc.ini  重新启动服务端软件 ./frps -c frps.ini

三、配置本地host文件

windows : C:\Windows\System32\drivers\etc\hosts

linux:  /etc/hosts

追加

xx.xx.xx.xx  a.free.domain
xx.xx.xx.xx b.free.domain

xx.xx.xx.xx 是你的公网服务器IP 地址

刷新 host文件,使得新配置生效

windows: ipconfig.exe /flushdns

linux: systemctl restart nscd

四、打开浏览器

输入: a.free.domain:8080  即可访问 web项目 web_9990

输入: b.free.domain:8080  即可访问 web项目 web_9991

custom_domains

frp 配置多个 web 项目,无需购买域名 (访问内网可视化界面,jupyter noterbook, visdom, tensorboard)的更多相关文章

  1. 一个tomcat服务器上部署多个Web项目,不同域名访问

    [参考]一个tomcat服务器上部署多个项目,不同域名访问 我们一个服务器只按装了一个tomcat服务器,现在有多个项目或者多个域名访问,下面来进行配置 在这里我们只需要修改conf下的server. ...

  2. tomcat发布web项目,支持域名

    首先需要安装JDK,不是Linux自带的OpenJDK,参考下面的文章: centos下 安装jdk 设置java环境变量:编辑这个/etc/profile文件: export JAVA_HOME=/ ...

  3. 关于idea中,web项目启动tomcat,访问资源报错404

    背景: web项目启动tomcat,访问相应的资源,报错404,前提资源路径是没错的. 原因: 1.确定是不是web项目 不是的话: 配置web-inf的路径和webroot(web根目录)的路径 2 ...

  4. 基于frp的内网穿透实例1-通过SSH访问内网机器

    原文地址:https://wuter.cn/1804.html/ 老母鸡终于到了,作为一个能运行linux系统的四核1G硬件,它还是比较小巧的. FRP 全名:Fast Reverse Proxy.F ...

  5. 一款带Web面板的轻量级、高性能内网穿透工具:nps使用教程

    说明:内网穿透工具之前已经介绍了不少了,比如Frp.lanproxy.Holer等,现在再介绍个带Web面板的穿透工具nps,之前叫easyProxy,只是改名了而已,该工具是一款使用go语言编写的轻 ...

  6. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  7. [笔记] 使用frp从外网访问内网

    之前尝试过otunnel,也记录过使用方法,见[笔记] 使用otunnel从外网访问内网,但是用了几天发现还是不够稳定. 然后尝试frp,发现性能稳定,够用,将过程及配置分享在这里吧. 需求 内网机器 ...

  8. 内网客户 通过 公网域名/ip 访问内网web服务器 出错

    在一内部局域网中, client  内网地址为 10.0.0.2     web  服务器内网地址为 10.0.0.1    外网地址为  211.6.15.1    域名为  xx.love.com ...

  9. p2p-tunnel 打洞内网穿透系列(三)TCP转发访问内网web服务

    系列文章 p2p-tunnel 打洞内网穿透系列(一)客户端配置及打洞 p2p-tunnel 打洞内网穿透系列(二)TCP转发访问远程共享文件夹 p2p-tunnel 打洞内网穿透系列(三)TCP转发 ...

随机推荐

  1. Java中创建String的两道面试题及详解

    我们知道创建一个String类型的变量一般有以下两种方法: String str1 = "abcd"; String str2 = new String("abcd&qu ...

  2. react踩坑

    1.列表渲染一定要注意key的唯一性,不然会导致页面只更新部分的bug graphVertexConfigList.data.map((item, index) => { return < ...

  3. 停止node进程

    运行vue-cli项目的时候经常出现端口号占用,npm run dev报错的信息, 此时可通过任务管理器粗暴的杀死node进程,也可以通过cmd检测占用某个端口的程序,进而杀死该进程,步骤如下: 1. ...

  4. 详解 MySQL int 类型的长度值问题

    以下是每个整数类型的存储和范围 (来自 mysql 手册)

  5. echarts 报表使用

    下载echats后,将下包中的js引入项目,\echarts-2.2.7\echarts-2.2.7\build\dist //在页面中建立宽高的区域,用来显示报表 <div style=&qu ...

  6. Java中基本类型的包装类

    基本类型包装类: 项目中我们常常放弃基本类型,用基本类型的包装类 基本类型包装类有哪些: Int--Integer char--Character double--Double 以Intger为例讲述 ...

  7. shiro实现用户踢出功能

    shiro实现用户踢出功能 KickoutSessionControlFilte import java.io.IOException; import java.io.PrintWriter; imp ...

  8. SpringBoot项目部署初体验【Docker】

    前言 一个微服务项目,小到几个模块,大到十几二十几个模块,每个模块都是单独的SpringBoot工程,这么多模块的部署,部署成本真的很高,而且每个服务的部署,都是手动部署,打成war或者jar ?,一 ...

  9. 【JNDI】Java Naming and Directory Interface

    一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");)   ②连接数据库(Conn ...

  10. Yii2数据库操作 事务

    Yii2 DAO http://blog.csdn.net/hzqghost/article/details/44116039