小试frp内网穿透
使用frp内网穿透工具把树莓派上的Cloudreve去盘放到公网。
家中闲置一个树莓派,在上面安装Cloudreve再外接一块移动硬盘,就搭好了一个小小的私有云盘。手机和电脑上的照片随时可以传上去,体验还不错。不过呢有个前提,我人得在家中且连上家里的WiFi才能使用这个云盘,是个小缺憾。所以今天决定装个frp,私有云盘放到公网上。
这里是完成后的效果,支持https域名访问。还不错吧!
安装Cloudreve、树莓派上挂载移动硬盘以及安装frp的过程这里就略去不表了,网上能搜到非常多资料。所以本文只说一下几个重要的配置。
域名配置
新加一个二级域名pan.mydomain.com
,解析记录如下:
Nginx配置
公网服务器上Nginx配置如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35server {
# 1. 配置一个名为 pan.madomain.com 的虚拟服务
server_name pan.mydomain.com;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
# 2. 避免 nginx 403 错误, Request Entity Too Large
client_max_body_size 1024m;
location / {
# 3. nginx 反向代理, 将流量转发到 frps 监听的端口
proxy_pass http://localhost:8098;
# 4. nginx 反向代理, 其他配置。注意这里重写了http请求中的Host头
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_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
}
# 5. https 证书配置
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/pan.mydomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/pan.mydomain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
树莓派Nginx配置如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22server {
listen 80;
listen [::]:80;
server_name pan.mydomain.com;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
// 1. 注意这里的5212端口为Cloudreve服务的端口
proxy_pass http://127.0.0.1:5212;
# 如果您要使用本地存储策略,请将下一行注释符删除,并更改大小为理论最大文件尺寸
#client_max_body_size 600m;
}
}
小提示:
- 使用 cerbot 一键为新的域名配置https证书,
sudo certbot --nginx -d pan.mydomain.com
- 修改 Nginx 配置后记得重启,
systemctl restart nginx
frp配置
frps.ini
配置非常简单。内容如下:1
2
3
4
5
6
7[common]
bind_port = 6999
vhost_http_port = 8098
dashboard_port = 8099
dashboard_user = a_user
dashboard_pwd = a_pwd
privilege_token = a_token
frpc.ini
配置如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[common]
server_addr = <server_ip>
server_port = 6999
privilege_token = a_token
login_fail_exit = false
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = <ssh_port>
[pan]
type = http
local_ip = 127.0.0.1
local_port = 80
custom_domains = pan.mydomain.com
总结
是不是感觉配置非常复杂。其实一点也不复杂,听我慢慢解释。
首先,整个链路是这样的:1
2
3
4
5Disk <----> Cloudreve <----> Pi(Nginx)
<----> Frp <---->
QCloud(Nginx) <----> Browser
大致访问过程如下:
- 用户在浏览器中访问
pan.mydomain.com
- (腾讯云服务器)Nginx反向代理将上述流量转发到当前服务器的
8098
端口 - 触发frps(公网服务器)和frpc(树莓派)的互动,流量继续转发到树莓派的
80
端口(为啥是80
?可以回头看nginx配置) - (树莓派)Nginx反向代理将上述流量转发到
5212
端口 - Done!(树莓派)Cloudreve云盘正在监听
5212
端口!