FRP内网穿透和反向代理如何实现高效优化?

摘要:frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 本文将以暴露内网 Web 服务为例,实践 frp 的安装
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 本文将以暴露内网 Web 服务为例,实践 frp 的安装部署。更多应用场景,可见 frp 示例。 安装 frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。 可以在 Github 的 Release 页面中下载到最新版本的客户端和服务端二进制文件。 本文公网、内网机器都是 Linux x86_64,所以选择了 frp_0.39.0_linux_amd64.tar.gz。解压: $ tar xzvf frp_0.39.0_linux_amd64.tar.gz frp_0.39.0_linux_amd64/ frp_0.39.0_linux_amd64/frps frp_0.39.0_linux_amd64/frps_full.ini frp_0.39.0_linux_amd64/systemd/ frp_0.39.0_linux_amd64/systemd/frpc@.service frp_0.39.0_linux_amd64/systemd/frps@.service frp_0.39.0_linux_amd64/systemd/frpc.service frp_0.39.0_linux_amd64/systemd/frps.service frp_0.39.0_linux_amd64/LICENSE frp_0.39.0_linux_amd64/frpc.ini frp_0.39.0_linux_amd64/frpc_full.ini frp_0.39.0_linux_amd64/frps.ini frp_0.39.0_linux_amd64/frpc 公网 拷贝 frps 文件进公网机器,假设其 IP 为 x.x.x.x: scp frps* ubuntu@x.x.x.x: 修改 frps.ini 文件,设置监听 HTTP 请求端口为 8080: cat <<-EOF > ~/frps.ini [common] bind_port = 7000 vhost_http_port = 8080 EOF 安装 supervisor 进行部署,后台长期运行: # 安装 supervisor sudo apt install supervisor -y # 添加配置 sudo -i cat <<-EOF >> /etc/supervisor/supervisord.conf [program:frps] directory=/home/ubuntu command=/home/ubuntu/frps -c /home/ubuntu/frps.ini priority=999 autostart=true autorestart=true startsecs=10 startretries=3 stdout_logfile=/var/log/frps_out.log stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/var/log/frps_err.log stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB environment= nocleanup=false EOF exit # 更新服务 sudo supervisorctl update all # 查看服务 sudo supervisorctl status all 内网 拷贝 frpc 文件进内网机器,假设其 IP 为 192.168.1.100: scp frpc* ubuntu@192.168.1.100: 修改 frpc.ini 文件,假设 frps 所在的服务器的 IP 为 x.x.x.x,local_port 为本地机器上 Web 服务监听的端口, 绑定自定义域名为 custom_domains。 cat <<-EOF > ~/frpc.ini [common] server_addr = x.x.x.x server_port = 7000 [web] type = http local_port = 8000 custom_domains = www.yourdomain.com EOF 将 www.yourdomain.com 的域名 A 记录解析到 IP x.x.x.x。 如果服务器已经有对应的域名,也可以将 CNAME 记录解析到服务器原先的域名。或者可以通过修改 HTTP 请求的 Host 字段来实现同样的效果。 简单运行服务,进行测试: # 运行 HTTP 服务 python3 -m http.server 8000 # 运行 frpc 服务 ./frpc -c ./frpc.ini # 访问测试 curl http://www.yourdomain.com:8080/ 以 systemd 进行部署,后台长期运行: # 拷贝文件 sudo cp frpc /usr/bin/frpc sudo mkdir -p /etc/frp sudo cp frpc.ini /etc/frp/frpc.ini # 添加配置(frp 给的 systemd 配置) sudo -i cat <<-EOF > /etc/systemd/system/frpc.service [Unit] Description=Frp Client Service After=network.target [Service] Type=simple User=nobody Restart=on-failure RestartSec=5s ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini LimitNOFILE=1048576 [Install] WantedBy=multi-user.target EOF exit # 重载配置 sudo systemctl daemon-reload # 开机启动 sudo systemctl enable frpc.service # 启动服务 sudo systemctl start frpc.service # 查看状态 sudo systemctl status frpc.service GoCoding 个人实践的经验分享,可关注公众号!