• 原森林之家(foresthouse.cn)改为走私范(zousifan.com),只是改个名内容不变。
  • 网站图片自建立开始到19年全部丢失,血的教训时刻备份,多点备份!

简单搭建FRP内网穿透利用反代frp和Nginx共用80端口实现外网访问内网

心得笔记 6年前 (2018-06-19) 5161次浏览 7个评论 扫描二维码
本文最后更新于2022年5月23日,已超过 1 年没有更新,如果文章内容失效,请 反馈 给我们,谢谢!

前言:之前没接触过这个一来想了解一下找找新鲜感,二来是我的服务器硬盘不够使了,三来是网站内容在自己电脑上对于机密文件很是放心。最重要的一点也是我大错特错的一点是我以为通过FRP穿透后会使宽带大大提高,因为服务器宽带只有1兆,而我的电信光纤上传达到了20兆,还有我的硬盘也够大,本来以为电脑的上文件不经过服务器传输就相当于一个URL地址一样顶多传一个地址用不了多大的流量,可是我大错特错了,它是原原本本的把我电脑中的文件先拖到自己服务器中再从自己的服务器发送给客户端。那我还忙个毛啊……搞了这么久记一下吧,虽然不用了。


我又来了,又把它用起来了现在用的不是带宽了想把电脑上的硬件利用起来做程序运算,现在的服务器多1G内存就马上多一倍钱了CPU更是金贵得很,只要本地优化得好图片音频等包括JS能外链都尽量外链,应该没多大问题。

如下图:电脑上传能到2兆,而经过frp……

图片丢失
在看下面的时候先确定以下几点:
1、我的服务器系统阿里云liunx系统64位,加宝塔面板;本地电脑windows系统64位。
2、后台打开7500、7000、8080端口如下图;

图片丢失
说明:7500端口是frp的控制台服务端口,用于查看frp工作状态,7000端口是用于服务器端和客户端通信的,8080端口是穿透 http 的端口

3、阿里后台也开放7500、7000、8080端口如下图:

图片丢失
4、本地有web服务。

5、因为服务器中已经有了网站占用了80端口那么我再使用frp的时候就不能用80端口了需要先反代一下,以宝塔为例后台找到软件管理找到运行环境-打开nginx管理点击配置修改,找个舒服的地方插入以下代码:

server {

listen 80;

location / {

proxy_pass http://127.0.0.1:8080;

proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header X-Powered-By;
}

}

为了出错截个图像下面图片这样的最好找一个server{在它的前面加上像上面的代码图片示例:

图片丢失
首先下载开源的代码:https://github.com/fatedier/frp/releases(根据自己的系统选择linux或windows按32位或是64位下载)

下面的操作是服务端用linux系统64位的,本地端用windows系统64位的,可以根据自身需求下载所需要的版本:

FRP各版本下载
第一步:打开压缩包中的“frps”文件夹内的“frps.ini”修改默认的域名(这个域名必须解析到服务器),修改完后将整个“frps”文件夹传输到服务器根目录中如下图:

[common]
#服务器地址IPv4或ipv6+监听端口(我就直接用下面的四个0建议不要改,改个求)
bind_addr = 0.0.0.0
# frp server 绑定的端口[1-65535]用于服务器端和客户端通信,默认即可
bind_port = 7000
# 设置穿透 http 的端口默认为80这时必须改为 8080
vhost_http_port = 8080

##可视化面板
# 设置域名(保证此域名可用,和frpc中server_addr一致,仅用来通信对应frpc的server_addr)
subdomain_host = frp.foresthouse.cn
# 配置 frp的控制台服务端口,用于查看frp工作状态,默认即可(可选)
dashboard_addr = 0.0.0.0
dashboard_port = 7500
# dashboard 用户名密码,默认都为 admin,可以自己改包括上面的7500高兴可以改成7600,7800等等
dashboard_user = admin
dashboard_pwd = admin
##

#为了防止端口被滥用仅允许以下端口可被使用
allow_ports = 2000-3000,3001,3003,4000-50000

#通信密码和frpc中的token保持一致
token = abcdef

图片丢失

一个大坑注意,上面代码dashboard_addr和bind_addr写成服务器的内网IP或者直接写0.0.0.0就行或者以阿里云为例参考下面的图片填写私有IP(反正我写公IP头都干晕了)

图片丢失
第二步:分别执行以下linux命令启动frp:

cd /frps
./frps -c ./frps.ini

上面代码说明:第一行进入“frps”文件夹,第二行运行程序。如下图则成功了:

图片丢失
下面的命令是关闭frp

cd /frps
pkill frps

如果出现了像这样的错误说明权限不够请按照以下图片所示操作:-bash: cd: frps: No such file or directory

图片丢失
这个时候在地址栏目输入:域名:7500,则可以正常打开如下图。

图片丢失

第三步:把开头下载好的压缩包内的“frpc”文件夹放在电脑的随便什么地方,并修改文件夹内的“frpc.ini”文件,把server_addr填一下(推荐填写frps面板的域名不使用IP),把custom_domains也填一下后保存。代码示例如下:

[common]
#服务器地址IPv4或ipv6+监听端口(服务端分配的IP,不是内网IP,建议填写域名)
server_addr = frp.foresthouse.cn
server_port = 7000
token = abcdef
#日志文件路径、类型和时间
log_file = ./frpc.log
# trace,debug,info,warn,error
log_level = info
log_max_days = 3

[web]
type = http
#被穿透的局域网IP(可在路由器的DHCP保留当前MAC的IP静态以后重启还是这个IP就不变了)
#可以设置成当前电脑的局域网IP比如192.168.1.11也可以像下面这样的
local_ip = 127.0.0.1
#本地网站的端口号
local_port = 80
#(true\false)是否使用加密,默认关闭用于防止某些公司的代理服务器可能会识别流量特征从而阻断某些协议。
use_encryption = false
#传输内容压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 cpu 资源。
use_compression = true

##访问密码用于内部测试时不方便外人看到时使用
#http_user = admin
#http_pwd = admin

#是否G-zip启用压缩
use_gzip = true
#域名
custom_domains = ceshi.foresthouse.cn

第四步:在当前目录中建立一个文本文档在此文档内输入以下代码后另存为任意名称.cmd;比如“启动frp.cmd”

frpc.exe -c frpc.ini
pause
双击刚才创建好的启动frp.cmd文件即可启动客户端程序:

如下图则成功了

图片丢失
接下来用我们的域名加8080访问一下试试:

图片丢失
自己觉得比较好的frpc端的代码参考可配合上面的frps一起使用

[common]
#服务器地址IPv4或ipv6+监听端口(服务端分配的IP,不是内网IP)
server_addr = frp.foresthouse.cn
server_port = 7000
token = abcdef
#控制台或类似./frpc.log真正的日志文件路径
log_file = ./frpc.log
# trace,debug,info,warn,error
log_level = info
log_max_days = 3

[web]
type = http
#被穿透的局域网IP(可在路由器保留静态)
local_ip = 127.0.0.1
#本地网站的端口号
local_port = 80
#(true\false)是否使用加密,默认关闭用于防止某些公司的代理服务器可能会识别流量特征从而阻断某些协议。
use_encryption = false
#传输内容压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 cpu 资源。
use_compression = true

##访问密码用于内部测试时不方便外人看到时使用
#http_user = admin
#http_pwd = admin

#是否G-zip启用压缩
use_gzip = true
#域名
custom_domains = web1.foresthouse.cn

#有多个网站可直拉复制下面的修改web2-webN
[web2]
type = http
local_port = 80
custom_domains = web12.foresthouse.cn,www.baidu.com

#或者干脆来个更简单的
[myphpstudy_all]
type = http
local_port = 80
custom_domains = www.foresthouse.cn,www.so.com,www.google.com,m.123.com,bbs.456.com,myweb.web.net,img.pic.com
#通过像上面的设置把本地电脑上的所有网站都转发走一劳永逸。配合像phpstudy的运行环境啊哈哈

图片丢失

这是一个frp的提示页如果能打开证明我可能在用如果打不开了可能就不用了

最后有几点小问题总结中

1、关闭SSH后立马变成“502 Bad Gateway”frp会结束运行本地网站就不能访问了

在打开frp后还需要将frp加入后台运行,这样就保证关闭ssh也无所谓了,重新打开ssh窗口执行代码如下(注意第二句末尾有个符号):

cd /frps
nohup /frps/frps -c /frps/frps.ini &

2019-05-23更新


如果你有公网IP,又不想备案那么恭喜你请往下看!

首先怎么确定你的是公网IP请看下面两张图片,第一幅图:路由器里面的地址和第二幅图:网上查看自己的IP地址,如果这两个IP一样基本可以确定你就是公网IP了。

图片丢失
确定了以后可以先试下80和443端口,当然了肯定是封闭了的,试下万一是开着的呢?怎么试?在本地搭建一个运行环境。输入127.0.0.1可以访问的。或者是输入带有运行环境电脑的局域网IP比如192.168.1.2都是可以访问的,然后进入路由器把DMZ主机打开如下图:

图片丢失
然后在浏览器中输入公网IP看能不能打开本机中的运行环境有提示402、502的等等都是可以打开,要是啥提示都没有,直接无法访问的话基本上应该是封了端口了,也可以试试443的https端口当然可能性非常小。如果能访问的话就不用往下看了。

接下来去路由器进行端口映射,路由器都大同小异不同品牌的可能样式都不一样自己找吧,如下图添加一个80端口到运营商没有封闭的端口如下图:

图片丢失

接下来去找一个带端口号的CDN,只有这一种方法其它的什么穿透(速度慢、受VPS硬件影响、成本大),转发啥的都没用根本无解。如果你能忍受在网址后面加上端口号访问的话就另说了。
这里推荐一个CDN(我找了N久找到的业务刚起步配有中英文界面好多定价都没有明确,想追求极致稳定的请看文章最后的反代方法)地址在文章末尾,先来说下在CDN上怎么做,如下图:

图片丢失
设置很简单服务名称随便写方便查看,加速域名填写自己的域名,应用场景根据需要全站加速相应流量要高,如果担心流量太高而自己网站又没有文件下载的地方可以选择文件下载(适合软件安装包等文件下载类业务场景。)这样应该就不用流量了吧哈哈(我没试过),源站按自己实际情况选择http还是https等,线路配置是重点了,源站地址填写公网IP,端口号填刚才在路由器中穿透的端口号8181(可以自己定),下面还有一个加速区域,肯定是推荐选择全球加速了。
都设置好了还要去把域名cname一下,在域名商处把域名别名到下图CNAME处就可以了。

图片丢失
免备案自定义端口CDN点击这里直达

最后我是在阿里云买的域名然后用的cloudflare的CDN,在cloudflare上面CNAME到了免备案自定义端口的CDN上面并且在cloudflare开启了加速。算下来cloudflare是一级CDN,有自定义端口的这个是二级CDN这样流量应该很省很省了吧~~更狠的是二级CDN的应用场景我用的是文件下载我没下载的东西哈哈。这样把二级CDN流量省了(最大化减少缓存只用端口功能)给一级CDN缓存去吧(最大化增加缓存),借着一级CDN还可以弄个https爽歪歪。

最后这个CDN不是免费的第一个月送500G的流量不管用没用完第二个月就没有了,流量包北美地区的价格是7.5美元500G,1T是30美元比较坑的是有效期一个月,就是买了1T一个月没用下个月也没有了。用的少感觉还是按流量计费划算北美和欧洲地区0.03美元/G、亚太地区0.12美元/G、拉丁美洲0.18美元/G,自动选择。好处是请求费用目前不要钱(只是目前不要钱以后不一定)。

如果不想用二级CDN可以直接用Nginx的反代功能请往下看

需要购买一台服务器用来做反代,(国内需要备案),同样安装宝塔面板在添加站点处正常添加一个网站端口不用改默认的80,如下图:

图片丢失
添加完成后点击反向代理注意目标URL是DDNS地址一般路由器都自带的在路由器中设置,然后在DDNS地址后面加上端口例如8181取决于可以被外网访问到的端口。然后把启用反向代理的勾勾上。如下图:

图片丢失
需要注意的是购买的服务器中域名要和源站(本地)绑定的域名一样方便管理,域名需要解析到购买的服务器中A、CNNAME都可以。我是把域名停在CF从CF解析的这样就自带了缓存其它都不用设置了很方便而且还可以隐藏服务器的真实IP避免被攻击一箭双雕。

图片丢失
本篇文章的意图仅用来给测试应用、微信开发等行个方便,不要用在线上运营环境上,由此造成的任何后果与本站无关。确定要用的话请先备案,请先备案,请先备案重要的话说三遍。。。


版权所有丨如未注明 , 均为原创丨本网站采用 BY-NC-SA 协议进行授权 , 转载请注明 出处!
喜欢 (4)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
    仅用来给您发送回复提醒。不会公开!
  • 网址
(7)个小伙伴在吐槽
  1. 可有多个内网服务器的解决方案,反代只有一个成功了?
    Ratel2019-12-09 20:17 回复来自天朝的朋友 谷歌浏览器  MI 8 Lite) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36
  2. 你用nginx反向代理了,为什么还需要输入域名加端口,直接通过域名访问80端口再反向代理到你8080端口不就好么,你直接域名加端口访问那么你的nginx代理就没使用啊
    小白2019-08-13 15:27 回复来自天朝的朋友 火狐浏览器 Windows 10
    • forest
      我是根据自己情况写的这里只有公网ip,端口都被运营商屏蔽了唉
      forest管理员回复2019-08-24 01:01 回复来自天朝的朋友 Safari浏览器 iPhone iPhone OS 12_4 like Mac OS X) AppleWebKit
  3. 不是吧突然被打击到了,不是说frp实现点对点代理吗?说这流量基本都是终端对终端,服务器不怎么需要流量。按博主这里的经验,自己的电脑只相当于一个备份了,流量还是一样的全从frp服务器过。不但要买一台服务器做代理,自己也要弄一台服务器天天维护了。
    天鸡部落2019-07-23 00:24 回复来自天朝的朋友 谷歌浏览器 Windows 7
    • forest
      是的哦,必须要服务器中转需要两倍流量。
      forest管理员回复2019-07-23 19:58 回复来自天朝的朋友 谷歌浏览器 Windows 7
  4. 厉害了,大神
    网络营销2018-06-23 18:52 回复来自天朝的朋友 火狐浏览器 Windows 7
  5. 炎热夏天,闲来无事,拜读博客,消暑解闷!
    9482018-06-22 08:55 回复来自天朝的朋友 搜狗浏览器 Windows 7