插件窝 干货文章 怎么配置nginx保证frps服务器与web共用80端口

怎么配置nginx保证frps服务器与web共用80端口

Nginx proxy server 端口 386    来源:    2025-04-21

配置Nginx实现frps与Web服务共用80端口

要实现frps服务器与Web服务共用80端口,可以通过Nginx的反向代理功能来实现。以下是具体配置方案:

方案一:基于域名分流(推荐)

1. 前提条件

  • 拥有一个域名并解析到服务器IP
  • frps客户端使用域名连接(而非直接IP)

2. Nginx配置示例

server {
    listen 80;
    server_name frp.example.com;  # frp专用子域名

    # frp的http穿透流量
    location / {
        proxy_pass http://127.0.0.1:7000;  # frps默认http端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen 80;
    server_name example.com www.example.com;  # 网站主域名

    # 正常的web服务配置
    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

3. frps配置调整

确保frps.ini中http端口设置为7000(或其他非80端口):

[common]
bind_port = 7000
vhost_http_port = 7000

方案二:基于URL路径分流

如果无法使用不同域名,可以通过路径区分:

server {
    listen 80;
    server_name example.com;

    # web服务
    location / {
        root /var/www/html;
        index index.html index.htm;
    }

    # frp服务路径
    location /frp/ {
        proxy_pass http://127.0.0.1:7000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

方案三:TCP协议分流(适用于非HTTP流量)

如果frps需要处理TCP流量:

stream {
    # frps的TCP流量
    server {
        listen 80;
        proxy_pass 127.0.0.1:7000;
    }
}

http {
    # 正常的web服务配置
    server {
        listen 8080;
        server_name example.com;

        location / {
            root /var/www/html;
            index index.html index.htm;
        }
    }
}

注意:此方案需要Nginx 1.9.0+版本支持stream模块

注意事项

  1. 确保Nginx配置后重启服务:nginx -t && systemctl restart nginx
  2. 检查防火墙是否放行相关端口
  3. 如果使用HTTPS,需要在Nginx配置SSL证书并做相应调整
  4. 监控Nginx日志排查问题:tail -f /var/log/nginx/error.log

选择哪种方案取决于您的具体需求,基于域名分流是最清晰和推荐的方式。