微信公众号开发需要访问公网地址,每次开发的代码需要部署到公网上才能看到效果,不便于调试。于是就有了内网穿透。就是可以通过公网域名访问内网本地服务,这样就可以随时在本地调试程序了。
首先,到这里下载最新版本的frp
https://github.com/fatedier/frp/releases
我的服务端(公网)是CentOs系统的,所以选择下载frp_0.20.0_linux_amd64.tar.gz
我的客户端(本地)是Win7系统(64位)的,所以选择下载frp_0.20.0_windows_amd64.zip
分别在linu系统和windows系统解压duiy对应的文件。
在linux上配置frps.ini如下:
[common]
bind_port = 7000
vhost_http_port = 8888
log_file = ./frps.log
token = sd@89Qi
启动脚本:
./frps -c ./frps.ini &
在Windows系统上配置frpc.ini如下:
[common]
server_addr = 140.143.233.182
server_port = 7000
token = sd@89Qi
[web]
type = http
local_port = 8082
custom_domains = sub.xxx.com #你自己的公网可访问域名
#用户访问时会要求输入用户名和密码
#http_user = admin
#http_pwd = 123456
启动脚本:
frpc.exe -c frpc.ini
把你本地的8082端口服务跑起来,比如我跑的是java web服务,然后在浏览器里访问http://sub.xxx.com:8888,发现访问到你本地的服务了。
如果不想带端口,可以在linux的frps.ini中配置vhost_http_port = 80
如果你的linx上有nginx,只需在nginx.conf里面配置映射到8888端口即可。
upstream backend_tomcat_local {
server 127.0.0.1:8888;
}
server {
listen 80;
server_name sub.xxx.com;
charset UTF-8;
location / {
proxy_pass http://backend_tomcat_local;
#rewrite ^(.*)$ https://$host$1 permanent;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 443 ssl;
server_name sub.xxx.com;
ssl_certificate /home/cert/certificate.crt;
ssl_certificate_key /home/cert/private.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://backend_tomcat_local;
#rewrite ^(.*)$ https://$host$1 permanent;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
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; #用于判断客户端和nginx之间使用的协议
}
}
重载nginx服务,访问http://sub.xxx.com试试,应该可以了。我的nginx有时候没生效,就再次重载一下./nginx -s reload
附官方文档:https://github.com/fatedier/frp/blob/master/README_zh.md