frp实现内网穿透并且支持80端口访问
frp
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力。类似的还有:ngrok、lanproxy等(frp和ngrok都是用go实现,lanproxy是用java实现)。利用内网穿透,我们可以实现微信调试,将内网的应用对外展示等。
搭建分服务器端和客户端。
特性
- 支持 80 端口转发
- 快速开发,不用推到线上测试,比如开发微信公众号,授权。支付之类的。
- 部署本地网站
- 放置视频至本地,减少公网服务器的存储空间
- 其他一些特性(至 frp官网 查看)
要求
需有一台公网服务器
安装
下载软件
下载软件:FRP Releases
支持多平台,需根据服务器系统和CPU架构选择下载。下载的包是同时包含服务器端和客户端软件的。下载速度可能会比较慢,请耐心等会。
mac 下载 darwin_amd64.tar.gz 后缀的,linux amd 64 位的下载 linux_amd64.tar.gz 后缀的
**## 下载**
wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz
**## 解压**
tar zxvf frp_0.36.2_linux_amd64.tar.gz
**## 移至安装目录**
mv frp_0.36.2_linux_amd64 /usr/local/frp
服务端配置
frps.ini
是服务端的配置文件。
完整的配置说明可以参考:frps配置
例如我的配置如下:
[common]
# 服务端监听端口
bind_port = 7000
# 搭建http web服务,监听的端口(例如:80,但由于80端口留给nginx,此处改为其它端口)
vhost_http_port = 8080
# 配置服务器管理看板
# 限定访问ip,如果不限制访问请设置为:0.0.0.0。
# 监听端口,管理员的登录名和密码
dashboard_addr = 0.0.0.0
dashboard_port = 7001
dashboard_user = username
dashboard_pwd = password
# 设置记录日志的文件
# 日志级别:trace, debug, info, warn, error,从低到高
# 日志最多保留的天数
log_file = /usr/local/frp/log/stdout.log
log_level = info
log_max_days = 3
# 认证token
token = token
# 子域名
subdomain_host = frp.iw3c.com
subdomain_host
是你的域名,这里在域名加 frp
是为了避免污染你的二级域名,把*.frp
解析到你的服务器IP,方便在 PC 端可以直接配置多个 xxx.frp.iw3c.com
这种三级域名
保存 ,运行
./frps -c ./frps.ini
注册为服务:
vim /etc/systemd/system/frps.service
# 内容为
[Unit]
# 单元描述
Description=frps
# 在什么服务启动之后再执行本程序
After=network.target
[Service]
Type=simple
# 程序执行的目录
WorkingDirectory=/usr/local/frp/
# 启动的脚本命令
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
# 重启条件
Restart=always
# 几秒后重启
RestartSec=5
[Install]
WantedBy=multi-user.target
重载服务
systemctl daemon-reload
注册为开机启动
systemctl enable frps
启动服务
systemctl start frps
查看状态
systemctl status frps
客户端运行
将 frpc 放置在本机
[common]
server_addr = xxx.xxx.xxx.xxx # 服务器ip
server_port = 7000
[web]
type = http
local_ip = 127.0.0.1
local_port = 18181 # 本地web服务监听的端口
# 远程端口不用设置,只能沿用frps下vhost_http_port
# 映射域名为 http://dev.frp.iw3c.com
subdomain = dev
# 或者直接指定全域名(你只需要将域名解析到服务器上)
# custom_domains = frp.iw3c.com
保存 ,运行
./frpc -c ./frpc.ini
这样就可以用域名http://dev.frp.iw3c.com:8080
访问你本机的服务了
FRP与Nginx共用80端口
在nginx的配置文件目录,添加frp.iw3c.com.conf配置文件,然后配置nginx反向代理。
配置内容如下:
# 代理http web
server {
listen 80;
server_name *.frp.iw3c.com;
location / {
proxy_pass http://127.0.0.1:8080;
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;
}
}