FRP內網穿透工具

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

[common]
bind_port = 7000 
vhost_http_port = 9988 #由于80端口已暫用這里我們使用Nginx做端口映射到80端口來做微信開發的調試,如何映射后文會介紹
#連接池
max_pool_count = 5
#token驗證
privilege_token = javen
#自定義二級域名
subdomain_host = javen.abc.com
#控制面板
dashboard_port = 9999
dashboard_user = javen
dashboard_pwd = javen
#日志
log_file = ./frps.log
log_level = info
log_max_days = 3

3、客戶端配置 frpc.ini

[common]
server_addr = 121.35.99.12 # 服務器IP
server_port = 7000 # 服務器bind_port
privilege_token = javen

[web]
type = http
local_port = 8080 # 映射到本地的8080端口
subdomain = mac

# 如果不使用SSH可以將其注釋掉
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_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

dashboard 界面

7、端口映射

這里我們使用Nginx將9988端口映射到80端口供微信開發調試使用



#user  nobody;
worker_processes  2;
worker_cpu_affinity 01 10;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    
    upstream wx {
       ip_hash;
       server localhost:8080 weight=1 max_fails=3 fail_timeout=60s;
           server localhost:8088 weight=1 max_fails=3 fail_timeout=60s;
    }
    
    server {
        listen       80;
        server_name  localhost;
        access_log  /home/nginxlog/wx_access.log;

        location / {
            proxy_redirect          off;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Forwarded-For $remote_addr;
            client_max_body_size      20m;
            client_body_buffer_size 128k;
            proxy_connect_timeout   600;
            proxy_send_timeout      600;
            proxy_read_timeout      900;
            proxy_buffer_size       4k;
            proxy_buffers           4 32k;
            proxy_busy_buffers_size 64k;
            proxy_temp_file_write_size 64k;
            proxy_pass http://wx;
        }

    }

        server {
                listen       80;
                server_name  *.javen.abc.com;
                access_log  /home/nginxlog/frp_access.log;

                location / {
                        proxy_redirect          off;
                        proxy_set_header Host $host:$server_port;
                        proxy_set_header X-Forwarded-For $remote_addr;
                        client_max_body_size      20m;
                        client_body_buffer_size 128k;
                        proxy_connect_timeout   600;
                        proxy_send_timeout      600;
                        proxy_read_timeout      900;
                        proxy_buffer_size       4k;
                        proxy_buffers           4 32k;
                        proxy_busy_buffers_size 64k;
                        proxy_temp_file_write_size 64k;
                        proxy_pass http://127.0.0.1:9988/;
                }

        }
    
    server {
        listen       8888;
        server_name  localhost;
        access_log   /home/nginxlog/static_access.log;

        location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css|apk)$
        {
            root /home/ftp/private; 
            expires 7d; 
        }
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}


推薦閱讀
nginx下載安裝
nginx啟動、重啟、關閉
nginx 配置詳解
nginx 配置優化詳解
nginx 負載均衡配置
nginx安裝第三方模塊的方法
nginx+tomcat動靜態資源分離

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容