使用 Nginx + SSL 部署安全抗干扰的 FRP 内网穿透

基于 frp v0.65.0,通过 nginx 与 SSL 加密部署安全的内网穿透环境,实现抗干扰与服务保护。
2025-10-17
2569 字 · 约 7 分钟阅读

frp 是一个流行的内网穿透工具,可以帮助用户将内网服务暴露到公网上,使用简单,功能强大。

最近需要将 frp 部署在本地并连接到一台位于日本的服务器上,那么抗神秘干扰也是一个重要的考虑因素,因此选择使用 nginx 作为反向代理,并通过 ssl 加密传输来抗干扰,缺点则是降低了 frp 的性能。

以下基于 frp v0.65.0 版本,介绍如何使用 nginx + ssl 来部署 frp。

首先,在日本服务器上安装 frp,并配置 frps.toml 文件:

bindAddr = "127.0.0.1"
bindPort = 47000

# 代理仅在本机监听避免对外暴露 remote_port按需开启
# proxyBindAddr = "127.0.0.1"

[webServer]
addr = "127.0.0.1"
port = 47500
user = ""
password = ""
pprofEnable = false

[auth]
method = "token"
token = ""

用 supervisor 管理 frps 服务:

[program:frps]
directory=/opt/frp/frp_0.65.0_linux_amd64
command=/opt/frp/frp_0.65.0_linux_amd64/frps -c /opt/frp/frp_0.65.0_linux_amd64/frps.toml
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stdout_logfile_maxbytes=16MB
redirect_stderr=true
user=app

用 ss 确认 frps 在本地监听:

ss -tnlp | grep 47

接着安装 nginx,并配置反向代理:

sudo apt update
sudo apt install nginx

在 nginx 配置文件中添加以下内容,编辑 /etc/nginx/sites-available/frps.conf

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name frps.example.com;

    access_log  /var/log/nginx/frps.log;
    error_log   /var/log/nginx/frps.log;

    # 你的 SSL 证书路径
    ssl_certificate /path/to/your/fullchain.pem;
    ssl_certificate_key /path/to/your/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    
    # ======= Dashboard(管理面板)=======
    location / {
        proxy_pass http://127.0.0.1:47500/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # ======= WebSocket(frp 主服务)=======
    location /~!frp {
        proxy_pass http://127.0.0.1:47000;
        proxy_http_version 1.1;

        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 Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

接着回到本地服务器上配置 frpc.toml 文件:

 
# ========== 基本信息 ==========
serverAddr = "frps.example.com"   # 你的远程 frps 地址或域名
serverPort = 443

# ========== 认证 ==========
auth.method = "token"
auth.token = ""

# ========== 传输层 ==========
transport.protocol = "wss"

# ========= 代理配置 ==========
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 22

使用 supervisor 管理 frpc 服务:

[program:frpc]
directory=/docker/frp/frp_0.65.0_linux_amd64
command=/docker/frp/frp_0.65.0_linux_amd64/frpc -c /docker/frp/frp_0.65.0_linux_amd64/frpc.toml
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stdout_logfile_maxbytes=16MB
redirect_stderr=true
user=app

查看 frpc 日志,确认连接成功:

tail -f /var/log/supervisor/frpc.log

留言

发表留言