购买腾讯云主机后FRP的配置的注意的要点
写在前面
需求和场景,是关键。我的需求是利用有公网IP的服务器中转数据。
所以,FRP目前是一个可选方案。知乎说Zerotier更好,还没来得及试。
FRP比较容易理解。公网主机在某个端口上监听,收到数据后向目标主机的目标端口转发,很容理解。
所以只剩下如何去做这一个问题了。
安装FRP
事实上不用装。
因为腾旭的主机给我们装好了。也不清楚是不是因我们提到这个事。
所以,systemctl status frps 能看到。
ps aux | grep frp, 则能看到两个。
frps和frpc
所以,不用装了。
关于frpc,为什么公网主机上也装了客户端,这个我也不太清楚。可以把它关了。没什么用。
可能是如果公网主机装了docker容器,如果想把容器中的数据引出,之用吧。我没有装容器的需求。
另外,这几个文件被 报病毒了。我没太在意。因为我在github上下的新版本的,它也提。所以就别理它。Let it be.
配置
服务端-公网主机
[common]
bind_addr = 0.0.0.0
bind_port = 7000
可以设置一个token
地址127.0.0.1也是可以的。
这里这个.0.0.0.0感觉好象不太对。
我的是这样的:
[common]
bind_port = 7000
log_file = /var/log/frps.log
log不是必须的。而且会占用空间。只是目前我正在调。
然后是客户端
[common]
server_addr = 43.x # 腾讯云主机的公网 IP
server_port = 7000
token = 123456
[jira_service]
type = tcp
local_ip = 127.0.0.1
local_port = 8085
remote_port = 8085
[gitlab_service]
type = tcp
local_ip = 127.0.0.1
local_port = 8086
remote_port = 8086
Nginx的路由或者说代理
这个并不是一定要做的.
除非你有域名,而且又像阿里云那样支持二级域名的服务.
server {
listen 80;
server_name jira.mywebside.cn;
location / {
proxy_pass http://127.0.0.1:8085; # 对应 frpc 的 remote_port
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
server_name gitlab.mywebside.cn;
location / {
proxy_pass http://127.0.0.1:8086; # 对应 frpc 的 remote_port
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
关于80端口
原理
没有什么难的.
唯一稍要注意是,关于80端口.
这个地方,我也没有想清楚.
后面我会说到.
显然,如果我们在公网主机,不装httpd,那么80端口是可以直传的。
但如果公网装了就不行了。
但这里,我也没有想清楚的地方是,是不是二级域名解析,一定要用类似Nginx这类路由。
现在我是选的这个路线。
那么我们在公网装了Nginx,那么公网主机的80端口就被占用了,这时如果想将内网机器的80端口导出,就需要两边都指向另一个端口,如81。就可以了。
也没有什么难的。
80Nginx的路由
server {
listen 80;
server_name web.mesite.cn;
location / {
proxy_pass http://127.0.0.1:81; # 转发到 FRP 中转的 8081 端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
客户端frpc.ini中
[web_service]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 8081
附录
frps.ini在哪里
如果是QQ云,显然通过ps或者 systemctl是能看到的。
一般在:/etc/frp/frps.ini
客户端,只需要把/usr/bin/frpc 拷到内网主机即可。
nginx的安装和重启
sudo apt update
sudo apt install nginx
sudo systemctl restart nginx
配置文件要注意,
/etc/nginx/conf.d/yoursite.cn.conf
这个文件是要自己创建的。
80端口,需要一个单独文件:
/etc/nginx/conf.d/www.yoursite.cn.conf
内网主机的frpc一定要做成服务
frpc -c ./frpc.ini
事实证明,它很容易崩掉。
其它的:为了公网IP,买个腾讯云,我觉得还是很划算的。要注意有云主机和轻量。
个人买轻量就行了,没必要买云主机。价钱差了好多。不要被那个优惠价所蒙蔽,因为一天几乎就只有一台特价的,你永远也抢不到。
最终我没有选阿里的。因为阿里一直也说清楚,低端的给不给IP(可能也是一样给的)。实际,这个IP不固定,也没有什么,只要是公网即可。当然固定了就更省事了,腾讯这点是不错的,69块,就有一个固定的公网IP,还要啥自行车。今晚我连不上,我看了下,显然是因为我自己的内网的主机的客户端崩了,腾讯云的主机的服务还是好好的。明天要把客户端也做成服,或者放container里。反正感觉还不错。
关于SSH,这个很简单了,因为腾讯给的主机,装我将frpc也做成服务,里面恰好有一个ssh,这样自己的客户端,习惯性,也搞了个SSH,两边还用了一个端口,只要不一样就行了。