在做一些项目开发的过程中,我们往往需要将本地项目与公网API进行对接测试。尤其是在项目开发阶段我们一般很少直接将不成熟的项目部署到公网服务器,因此Frp通常是一个不错的选择。本篇笔记主要记录Frp内网穿透的配置过程,仅供参考。
一、准备工作:
1、一台公网可访问的服务器,我们暂且将其IP假设为“1.1.1.1”
2、一台内网服务器(可以是普通电脑、树莓派等),我们暂且将其IP假设为“8.8.8.8”
3、两台服务器均已安装WEB环境,不懂配置的可以选择宝塔、lnmp等一键配置。
二、操作步骤:
1、下载Frp,下载地址:https://github.com/fatedier/frp/releases
提示:由于国内网络环境因素,GitHub访问较慢,大家也可以利用国内相关镜像源下载。或在公网服务器利用“wget”获取。
通常情况:
服务器端选择 64位linux frp_0.33.0_linux_amd64.tar.gz
客户端选windows64位 frp_0.33.0_windows_amd64.zip
具体根据自身本地和公网服务器操作系统选择
2、在公网服务器安装Frps。
服务器端只需要两个文件frps和frps.ini,解压到根目录下"/frp"文件夹 通过cd进入frp,进入目录执行,注意权限改为777。
- cd /frp
- nohup ./frps -c ./frps.ini &
修改配置文件“frps.ini”。
- [common]
- #通信端口
- bind_port = 4443
- #http
- vhost_http_port = 8081
- #https
- vhost_https_port = 8082
- #泛解析,可以解析 *.zkii.net
- subdomain_host =api.zkii.net
- #服务器面板配置账号密码
- dashboard_port = 7500
- dashboard_user = admin
- dashboard_pwd = admin
4443是通信端口,客户端也必须相同,8081是服务器端口,因为80被nginx占用了,我们要用服务器端nginx反向代理。
服务器端管理地址 http://1.1.1.1:7500 默认账号密码admin
3、客户端安装Frpc。
只需要将frpc和frpc.ini解压到D盘frp下,修改配置文件“frpc.ini”。
- [common]
- server_addr = 1.1.1.1
- server_port = 4443
- #adminUI
- admin_addr = 127.0.0.1
- admin_port = 7400
- admin_user = admin
- admin_pwd = admin
- [web1]
- type = http
- local_ip = 127.0.0.1
- local_port = 80
- subdomain = home
- [web2]
- type = https
- local_ip = 127.0.0.1
- local_port = 443
- subdomain =web7
温馨提示:软件不能关闭,关闭就不能访问了。
客户端管理地址 http://127.0.0.1:7400 账号密码admin
①客户端启动脚本
- dim objShell
- set objShell=wscript.createObject("WScript.Shell")
- msgbox "启动frpc.exe进程成功"
- iReturnCode=objShell.Run("C:\app\frp\frpc.exe -c C:\app\frp\frpc.ini",0,TRUE)
②客户端关闭脚本
- CreateObject("WScript.Shell").Run "taskkill /f /im frpc.exe", 0
- msgbox "关闭frpc.exe进程成功"
4、配置Nginx代理策略。
具体要根据代理网站的域名和端口,进行代理配置。关于Nginx反向代理教程很多,因此这里略过。以下配置仅供参考。
- server
- {
- listen 80;
- server_name *.zkii.net;
- location / {
- proxy_pass http://127.0.0.1:8081;
- 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
- {
- listen 443 ssl http2;
- server_name web7.zkii.net;
- if ($server_port !~ 443){
- rewrite ^(/.*)$ https://$host$1 permanent;
- }
- ssl_certificate /www/server/panel/vhost/cert/web7.zkii.net/fullchain.pem;
- ssl_certificate_key /www/server/panel/vhost/cert/web7.zkii.net/privkey.pem;
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
- ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
- ssl_prefer_server_ciphers on;
- ssl_session_cache shared:SSL:10m;
- ssl_session_timeout 10m;
- error_page 497 https://$host$request_uri;
- location / {
- proxy_ssl_server_name on;
- 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;
- proxy_set_header Host $host;
- proxy_pass https://web7.zkii.net:8082;
- }
- }
配置完成,我们可以进行访问测试了。