Frps、nginx内网穿透安装与配置
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https, stcp 协议。利用免费 frp 内网穿透服务实现处于内网或防火墙后的机器,对外网环境提供 http
或 https
服务。对于 http 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个 80 端口,支持 80 端口穿透。利用处于内网或防火墙后的机器,对外网环境提供 tcp/udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机,支持 kcp 协议和点对点穿透。
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
架构图
服务端安装
1、在GitHub下载最新的release版本 【https://github.com/fatedier/frp/releases】,选择对应的服务器版本,可以查看当前服务器版本架构只需要运行arch
即可回显架构。
以阿里云服务器为例:
以 arm64
架构举例(目前大多数都应该是这个架构),本文撰写时 frp 最新版是 v0.27.1
cd /root wget --no-check-certificate https://github.com/fatedier/frp/releases/download/v0.27.1/frp_0.27.1_linux_amd64.tar.gz tar -xzvf frp_0.27.1_linux_amd64.tar.gz mv frp_0.27.1_linux_amd64 /usr/local/ cd /usr/local/ # 更短名 mv frp_0.27.1_linux_amd64/ frp_0.27.1 # 确保 frps 程序具有可执行权限 chmod +x frps
软件目录【不同版本可能存在部分差异】
然后试着运行一下 frps
,看看是否能正常运行
./frps --help
如果提示 ./frps: cannot execute binary file: Exec format error
只能说明软件版本与服务器架构选择不匹配,更换版本即可解决。
服务端配置
服务端只需要配置frps.ini 保存即可,
# 下面这句开头必须要有,表示配置的开始 [common] # frps绑定端口 (必选) bind_port = 7000 # frps 日志 (可选) log_file = ./frps.log # frps 日志等级 (可选) log_level = warn # frps 日志存放天数 (可选) log_max_days = 30 # 默认为900秒,即15分钟,如果设置成0就不会对报文时间戳进行超时验证 authentication_timeout = 900 # 仪表盘端口,只有设置了才能使用仪表盘(即后台) dashboard_port = 7500 # 仪表盘访问的用户名密码,如果不设置,则默认都是 admin dashboard_user = admin dashboard_pwd = admin # frp 穿透访问内网中的网站监听端口 配合后面使用nginx做域名绑定访问 vhost_http_port = 7001 # 将 frp.so.codeceo.org 解析到服务端后,可以使用此域名来访问客户端对应的 http subdomain_host = frp.so.codeceo.org
测试开启服务端
./frps -c ./frps.ini & # 以后台守护进程开启服务端
nginx 配置
server { listen 80; listen [::]:80; # 这里使用统配符解决客户端绑定的域名访问 server_name *.so.codeceo.org; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/frp; # frps proxy location / { # 反向代理frps 7001端口 proxy_pass http://127.0.0.1:7001; 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; } }
客户端配置
下载对应客户机器的frp版本【https://github.com/fatedier/frp/releases】,版本选择与服务端相同。
修改frpc.ini
[common] # 服务端公网IP server_addr = xxx.xxx.xxx.xxx # 服务端frps绑定端口 server_port = 7000 [web1] type = http local_port = 80 custom_domains = web1.so.codeceo.org [web2] type = http local_ip = localhost local_port = 9528 use_gzip = true custom_domains = web2.so.codeceo.org [web6] type = http local_port = 80 custom_domains = web6.so.codeceo.org
客户端启动测试
./frpc -c frpc.ini
可以登录dashboard查看当前启动的代理是否正常(访问ip:7001 vhost_http_port)
如果出现 login to server failed: EOF
可以尝试检测本机网络是否有问题。
写在最后:
当前只是一个http案例,还有更多 TCP/UDP [转发 ssh]、HTTP(S) [转发路由器设置页面]、TCP/UDP [范围转发]等需要自己慢慢摸索。
如果都使用的是阿里云ECS,开启上面指定的端口访问,否则会 connect error.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?