1、什么是FRP
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。主要他是一个开源的。
https://github.com/fatedier/frp http://getfrp.yzxx-soft.com/index.html
具体配置以及使用方法我这里就不过多介绍了,官方文档有详细说明。
本篇文章目标: 1、自定义二级域名做本地端口映射 2、要求支持80端来做微信开发调试 3、能查看端口的连接状态
这里我贴出我的配置内容如下:
2、服务端端配置 frps.ini
假如服务端的IP地址为:121.35.99.12
1[common] 2bind_port = 7000 3vhost_http_port = 9988 #由于80端口已暂用这里我们使用Nginx做端口映射到80端口来做微信开发的调试,如何映射后文会介绍 4#连接池 5max_pool_count = 5 6#token验证 7privilege_token = javen 8#自定义二级域名 9subdomain_host = javen.abc.com 10#控制面板 11dashboard_port = 9999 12dashboard_user = javen 13dashboard_pwd = javen 14#日志 15log_file = ./frps.log 16log_level = info 17log_max_days = 3
3、客户端配置 frpc.ini
1[common] 2server_addr = 121.35.99.12 # 服务器IP 3server_port = 7000 # 服务器bind_port 4privilege_token = javen 5 6[web] 7type = http 8local_port = 8080 # 映射到本地的8080端口 9subdomain = mac 10 11# 如果不使用SSH可以将其注释掉 12[ssh] 13type = tcp 14local_ip = 127.0.0.1 15local_port = 22 16remote_port = 6000
4、自定义二级域名
在多人同时使用一个 frps 时,通过自定义二级域名的方式来使用会更加方便。
通过在 frps 的配置文件中配置 subdomain_host,就可以启用该特性。之后在 frpc 的 http、https 类型的代理中可以不配置 custom_domains,而是配置一个 subdomain 参数。
只需要将 *.{subdomain_host} 解析到 frps 所在服务器。之后用户可以通过 subdomain 自行指定自己的 web 服务所需要使用的二级域名,通过 {subdomain}.{subdomain_host} 来访问自己的 web 服务。
** 假如域名为:abc.com 去域名的控制面板添加解析 *.javen 到 121.35.99.12 **
5、客户端访问
http://mac.javen.abc.com:9988/user 映射到本地的 http://localhost:8080/user
6、Dashboard
通过浏览器查看 frp 的状态以及代理统计信息展示。
http://121.35.99.12:9999 登录的用户名以及密码为服务端配置的 dashboard_user = javen dashboard_pwd = javen

7、端口映射
这里我们使用Nginx将9988端口映射到80端口供微信开发调试使用
1#user nobody; 2worker_processes 2; 3worker_cpu_affinity 01 10; 4#error_log logs/error.log; 5#error_log logs/error.log notice; 6#error_log logs/error.log info; 7 8#pid logs/nginx.pid; 9 10 11events { 12 worker_connections 1024; 13} 14 15 16http { 17 include mime.types; 18 default_type application/octet-stream; 19 20 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 21 # '$status $body_bytes_sent "$http_referer" ' 22 # '"$http_user_agent" "$http_x_forwarded_for"'; 23 24 #access_log logs/access.log main; 25 26 sendfile on; 27 #tcp_nopush on; 28 29 #keepalive_timeout 0; 30 keepalive_timeout 65; 31 32 #gzip on; 33 34 upstream wx { 35 ip_hash; 36 server localhost:8080 weight=1 max_fails=3 fail_timeout=60s; 37 server localhost:8088 weight=1 max_fails=3 fail_timeout=60s; 38 } 39 40 server { 41 listen 80; 42 server_name localhost; 43 access_log /home/nginxlog/wx_access.log; 44 45 location / { 46 proxy_redirect off; 47 proxy_set_header Host $host:$server_port; 48 proxy_set_header X-Forwarded-For $remote_addr; 49 client_max_body_size 20m; 50 client_body_buffer_size 128k; 51 proxy_connect_timeout 600; 52 proxy_send_timeout 600; 53 proxy_read_timeout 900; 54 proxy_buffer_size 4k; 55 proxy_buffers 4 32k; 56 proxy_busy_buffers_size 64k; 57 proxy_temp_file_write_size 64k; 58 proxy_pass http://wx; 59 } 60 61 } 62 63 server { 64 listen 80; 65 server_name *.javen.abc.com; 66 access_log /home/nginxlog/frp_access.log; 67 68 location / { 69 proxy_redirect off; 70 proxy_set_header Host $host:$server_port; 71 proxy_set_header X-Forwarded-For $remote_addr; 72 client_max_body_size 20m; 73 client_body_buffer_size 128k; 74 proxy_connect_timeout 600; 75 proxy_send_timeout 600; 76 proxy_read_timeout 900; 77 proxy_buffer_size 4k; 78 proxy_buffers 4 32k; 79 proxy_busy_buffers_size 64k; 80 proxy_temp_file_write_size 64k; 81 proxy_pass http://127.0.0.1:9988/; 82 } 83 84 } 85 86 server { 87 listen 8888; 88 server_name localhost; 89 access_log /home/nginxlog/static_access.log; 90 91 location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css|apk)$ 92 { 93 root /home/ftp/private; 94 expires 7d; 95 } 96 } 97 98 # another virtual host using mix of IP-, name-, and port-based configuration 99 # 100 #server { 101 # listen 8000; 102 # listen somename:8080; 103 # server_name somename alias another.alias; 104 105 # location / { 106 # root html; 107 # index index.html index.htm; 108 # } 109 #} 110 111 112 # HTTPS server 113 # 114 #server { 115 # listen 443 ssl; 116 # server_name localhost; 117 118 # ssl_certificate cert.pem; 119 # ssl_certificate_key cert.key; 120 121 # ssl_session_cache shared:SSL:1m; 122 # ssl_session_timeout 5m; 123 124 # ssl_ciphers HIGH:!aNULL:!MD5; 125 # ssl_prefer_server_ciphers on; 126 127 # location / { 128 # root html; 129 # index index.html index.htm; 130 # } 131 #} 132 133} 134 135
推荐阅读 nginx下载安装 nginx启动、重启、关闭 nginx 配置详解 nginx 配置优化详解 nginx 负载均衡配置 nginx安装第三方模块的方法 nginx+tomcat动静态资源分离