使用frpc和nginx做内网穿透用80端口代理不同机器不同服务

2023年 7月 25日 90.6k 0

硬件准备

使用frpc做内网穿透,需要有一台公网ip的服务器

文档地址

frp官网

frpgithub

下载

下载地址

客户端和服务端均在一个压缩包里,由于我客户的是mac,服务端是linux,所以要下载两个包
mac对应 darwin_amd64 linux对应 linux_md64

服务端

解压压缩包放置在有公网ip的服务器上
其中我放置的位置是 /home/nnnnzs/frp/目录下

服务端配置文件

服务端程序为frps,对应的配置文件为frps.ini 使用vim 打开目录下的frps.ini

[common]
# 和客户端互联的端口
bind_port = 1234
# 访问服务器8080ip的端口,才访问到内网穿透的应用
vhost_http_port = 8080
# 日志文件地址
log_file = /home/nnnnzs/frp/frp_0.48.0_linux_amd64/frps.log

服务端开机自启

参考官网教程 使用systemed 做进程管理

  • 创建/etc/systemd/system/frps.service文件
  • 写入配置文件
  • [Unit]
    # 服务名称,可自定义
    Description = frp server
    After = network.target syslog.target
    Wants = network.target
    
    [Service]
    Type = simple
    # 启动frps的命令,需修改为您的frps的安装路径
    ExecStart = /home/nnnnzs/frp/frp_0.48.0_linux_amd64/frps -c /home/nnnnzs/frp/frp_0.48.0_linux_amd64/frps.ini
    
    [Install]
    WantedBy = multi-user.target
    

    3. 使用 systemd 命令,管理 frps。

    # 启动frp
    systemctl start frps
    # 停止frp
    systemctl stop frps
    # 重启frp
    systemctl restart frps
    # 查看frp状态
    systemctl status frps
    
  • 配置 frps 开机自启。
  • systemctl enable frps
    

    如果出现添加开机自己被拒绝,请柬配置文件是不是复制粘贴的时候少了字符如:[

    反向代理

    在nginx设置反向代理,这样不需要暴露8080端口,通过域名+80端口 即可访问内网服务,原理是frpc根据host头来请求到对应服务

    server{
        listen 80;
        listen [::]:80;
        server_name a.nnnnzs.cn b.nnnnzs.cn;
        location / {
                proxy_pass http://localhost:8080;
                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 REMOTE-HOST $remote_addr;
        }
    }
    

    域名解析

    将两个域名分别添加解析到服务器所在ip上

    客户端A配置

    放置在需要穿透的内网电脑A 上

    [common]
    #服务器ip地址
    server_addr = 服务端ip地址
    # 服务器开放端口
    server_port = 1234
    # 日志端口
    log_file = ./frpc.log
    
    [web]
    type = http
    # 本地ip
    local_ip = 127.0.0.1
    # 本地服务端口
    local_port = 3001
    # 
    custom_domains = a.nnnnzs.cn
    

    客户端B配置

    [common]
    #服务器ip地址
    server_addr = 服务端ip地址
    # 服务器开放端口
    server_port = 1234
    # 日志端口
    log_file = ./frpc.log
    
    [web]
    type = http
    # 本地ip
    local_ip = 127.0.0.1
    # 本地服务端口
    local_port = 3002
    # 
    custom_domains = b.nnnnzs.cn
    

    当然 客户端A 和 B 可以是同一台电脑的不同端口

    [common]
    #服务器ip地址
    server_addr = 服务端ip地址
    # 服务器开放端口
    server_port = 1234
    # 日志端口
    log_file = ./frpc.log
    
    [web]
    type = http
    # 本地ip
    local_ip = 127.0.0.1
    # 本地服务端口
    local_port = 3003
    # 
    custom_domains = a.nnnnzs.cn
    
    [web]
    type = http
    # 本地ip
    local_ip = 127.0.0.1
    # 本地服务端口
    local_port = 3004
    # 
    custom_domains = b.nnnnzs.cn
    
    

    客户端脚本

    启动脚本

    #!/bin/bash
    nohup frpc -c frpc.ini &
    

    停止脚本

    #!/bin/bash
    
    # 检查并杀死frp进程
    processes=$(ps -ef | grep -E "frp|frpc" | grep -v grep | awk '{print $2}')
    
    if [ -n "$processes" ]; then
        echo "找到以下进程:"
        echo "$processes"
        echo "正在杀死进程..."
        kill -9 $processes
        echo "进程已成功结束。"
    else
        echo "没有找到frp或frpc进程。"
    fi
    
    

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论