frp的用法记录


工具
  1. 下载最新版本
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_arm64.tar.gz  
  
tar -zxvf frp_0.61.0_linux_arm64.tar.gz  
  
  
  1. 修改服务端配置
  
bindPort = 7000 #{必选} 客户端与该端口建立连接  
log.to = "./www/server/frp_0.60.0_linux_amd64/frps.log" #{可选} 日志配置, 通过打印的方式输出日志  
log.level="info"  
log.maxDays=3  
vhostHTTPPort = 7070 #{可选} http代理需要,当访问该端口时跳到对应本地frpc代理  
vhostHTTPSPort = 7443 #{可选} https代理需要,当访问该端口时跳到对应本地frpc代理  
transport.tcpMux = true #tcp流多路复用(优化传输,客户端与服务端同时配置才有效)  
   
#身份验证  
   
auth.method = "token" #{可选}身份验证方式  
auth.token = "a1bcdefgGHSDSAFDXFW324324321313U90809" #token设置密码,用于通过身份验证创建连接  
   
#frp服务仪表板配置  
   
webServer.port = 7077 #{自行修改端口}  
webServer.addr = "0.0.0.0" #公网ip或者0.0.0.0或者域名  
webServer.user = "admin" #登录用户名{自行修改}  
webServer.password = "qq741852" #登录密码{自行修改}  
  
# 使用的域名(将一级域名替换yourdomain.com,就是你购买的域名)  
subDomainHost = "malanxi.top"  
  
  
  1. 设置开机启动
vim /etc/systemd/system/frps.service  
  
[Unit]  
Description=FRP Server  
   
[Service]  
Type=simple  
ExecStart=/www/server/frp_0.60.0_linux_amd64/frps -c /www/server/frp_0.60.0_linux_amd64/frps.toml  
   
[Install]  
WantedBy=multi-user.target  
  
  
  
# 启动frp  
systemctl start frps  
# 停止frp  
systemctl stop frps  
# 重启frp  
systemctl restart frps  
# 查看frp状态  
systemctl status frps  
  
systemctl enable frps  
  1. nginx 域名配置
  
server {  
    listen 80;  
    server_name immich.malanxi.top qb.malanxi.top;  
    listen 443 ssl http2 ;  
    sendfile on;  
    # include /www/server/panel/vhost/nginx/common.conf;  
    # allow large file uploads  
    client_max_body_size 50000M;  
    include /www/server/panel/vhost/nginx/cert/common.conf;  
    # Set headers  
    proxy_set_header Host              $http_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;  
  
    # enable websockets: http://nginx.org/en/docs/http/websocket.html  
    proxy_http_version 1.1;  
    proxy_set_header   Upgrade    $http_upgrade;  
    proxy_set_header   Connection "upgrade";  
    proxy_redirect     off;  
  
    # set timeout  
    proxy_read_timeout 600s;  
    proxy_send_timeout 600s;  
    send_timeout       600s;  
      
    # gzip on;  
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;  
    # gzip_vary on;  
    # gzip_min_length 1000;  # 只压缩大于 1000 字节的内容  
    # gzip_comp_level 5;  # 压缩级别,0-9,推荐 4-6  
  
      location /api/assets/ {  
        proxy_cache cache_one;  # 启用缓存  
        proxy_cache_key "$scheme$host$request_uri";  # 定义缓存的key  
        proxy_cache_valid 200 10m;  # 200 响应缓存 10 分钟  
        proxy_cache_valid 404 1m;    # 404 响应缓存 1 分钟  
        proxy_cache_valid any 1d;    # 其他响应缓存 1 天  
        proxy_cache_bypass $http_cache_control;  # 根据 Cache-Control 请求头绕过缓存  
  
        # 添加 X-Cache-Status 响应头  
        add_header X-Cache-Status $upstream_cache_status always;  
  
        # 代理设置  
        proxy_pass http://127.0.0.1:7070;  # 代理到后端服务  
        proxy_set_header Host $host;         # 设置请求头  
        proxy_set_header X-Real-IP $remote_addr;  # 真实 IP  
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 转发 IP  
        proxy_set_header X-Forwarded-Proto $scheme;  # 请求协议  
  
        # 超时设置  
        proxy_connect_timeout 60;  
        proxy_read_timeout 60;  
        proxy_send_timeout 60;  
  
        # 缓冲设置  
        proxy_buffer_size 32k;  
        proxy_buffers 4 64k;  
        proxy_busy_buffers_size 128k;  
        proxy_temp_file_write_size 128k;  
  
        # 当发生错误时,继续请求下一个上游服务器  
        proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;  
    }  
  
    location / {  
        proxy_pass http://127.0.0.1:7070;  
    }  
      
      
}  
server {  
    listen 80;  
    server_name frp.malanxi.top;  
    listen 443 ssl http2 ;  
    default_type application/octet-stream;  
    sendfile on;  
    keepalive_timeout 65;  
    index index.php index.html index.htm default.php default.htm default.html;  
    root /www/wwwroot;  
    include /www/server/panel/vhost/nginx/cert/common.conf;  
      
    location / {  
        proxy_pass http://127.0.0.1:7077;  
        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;  
    }  
}  
  
  1. 配置客户端 frpc.toml
serverAddr = "服务器ip" #[必选]服务器ip地址/域名  
serverPort = 7000 # [必选] 要连接的 frps 端口  
auth.token = "ab22cdefgGHSDSAFDXFW324324321313U90809" #与服务端校验的令牌(需一致)  
transport.tcpMux = false #tcp流多路复用(优化传输,客户端与服务端同时配置才有效)  
   
[[proxies]]  
name = "web" # 代理名称(随便填)  
type = "http" # 代理类型  
localIP = "127.0.0.1" # 代理地址, 要转发到哪个地址  
localPort = 2283 # 代理端口, 要转发到哪个端口  
#remotePort = 2283 # 远程端口(和远程 frps 哪个端口绑定在一起, 访问对应端口将使用该代理)  
subdomain="immich"  
transport.useCompression = true  
  
  
[[proxies]]  
name = "qb" # 代理名称(随便填)  
type = "http" # 代理类型  
localIP = "127.0.0.1" # 代理地址, 要转发到哪个地址  
localPort = 8081 # 代理端口, 要转发到哪个端口  
subdomain="qb"  
transport.useCompression = true  
  1. 利用 nssm.exe 设置 frpc 开机启动
文件夹下创建start.bat    
  
frpc.exe -c frpc.toml  
  
nssm.exe install frpc  
  
Application Path:D:\frpc\start.bat    
Startup directory:D:\frpc  
Arguments:  
  
或者  直接nssm 启动  
  
Application Path:D:\frpc\frpc.exe  
Startup directory:D:\frpc  
Arguments: -c D:\frpc\frpc.toml