frp和宝塔(Nginx)共用80/443(http,https),真正解决https穿透502问题,支持泛域名穿透
标签搜索
侧边栏壁纸
  • 累计撰写 4 篇文章
  • 累计收到 18 条评论

frp和宝塔(Nginx)共用80/443(http,https),真正解决https穿透502问题,支持泛域名穿透

admin
2021-12-29 / 4 评论 / 23,391 阅读 / 正在检测是否收录...

相信能找到这个文章的你也踩了不少坑,网上一些文章基本上都是穿透的80端口,穿透443端口或多或少的都有些问题。大部分小伙伴只一台服务器,并且已经部署过网站,,如果同时使用 frp 服务的话就会存在共享80/443端口的问题,本文将介绍在宝塔配置 nginx 和 frp 共享 80/443 端口和泛域名支持的方法,基本思路通过服务端Nginx(使用的80/443)来配置域名监听并且反向代理到frp所在的http和https端口(frp服务端端口不是 80/443,要改为其它端口如 808/809,本例80用的808,443用的是809),然后frp服务端穿透到frp客户端实现网络访问,本文采用的是tcp转发的方式,没使用frp的 httphttps 为什么这么干呢,是因为我们要使用80/443二个端口的穿透,而frp只支持单个端口的泛域名转发,具体请看我提的 Issues ,并且frp官方文档上说httphttps的实现底层也是tcp。废话不多说直接开始

Frp服务端配置

[common]
# 如果有多个IP,可以选择绑定到不同的ip上
bind_addr = 0.0.0.0
bind_port = 7000
# udp port to help make udp hole to penetrate nat
bind_udp_port = 7001

# udp port used for kcp protocol, it can be same with 'bind_port'
# if not set, kcp is disabled in frps
kcp_bind_port = 7000

# 虚拟主机配置,不能和系统中已监听的端口冲突。http和https可以设置成同一个
#vhost_http_port = 908 #如果采用单端口泛域名转发可以采集此方式
#vhost_https_port = 909 #如果采用单端口泛域名转发可以采集此方式
allow_ports = 808,809 #808为http端口,809为https端口

# 服务端web面板
dashboard_addr = 0.0.0.0
dashboard_port = 7500
# 设置用户名密码,默认都是admin,请注意做修改
dashboard_user = admin
dashboard_pwd = 123qwe

# 普罗米修斯运维服务,go语言相关监控,可以关闭
enable_prometheus = false

# 设置日志文件地址
log_file = /var/log/frps.log
# trace, debug, info, warn, error
log_level = info
log_max_days = 3

# 最新版本支持的验证方式比较多,这里还是选用token模式
# AuthenticationMethod specifies what authentication method to use authenticate frpc with frps.
# If "token" is specified - token will be read into login message.
authentication_method = token
# AuthenticateHeartBeats specifies whether to include authentication token in heartbeats sent to frps. By default, this value is false.
authenticate_heartbeats = false
# AuthenticateNewWorkConns specifies whether to include authentication token in new work connections sent to frps. By default, this value is false.
authenticate_new_work_conns = false
# auth token 相当于密码,请注意保护
token = 123qwe

Frp客户端配置

[common]
server_addr = frp.abc.com #你的服务器IP或域名
server_port = 7000
token = 123qwe

[webhttp]
type = tcp
local_ip = 127.0.0.1
local_port = 80 #本地端口
remote_port = 808 #服务器端口

[webhttps]
type = tcp
local_ip = 127.0.0.1
local_port = 443 #本地端口
remote_port = 809 #服务器端口

宝塔服务器端Nginx配置

  server
  {
    listen 80;
    server_name *.abc.com;
    # return 301 https://$host$request_uri; #取消此注释可以使80自动跳转443,取消注释时别忘了注释location节点
    location /
    {
      proxy_pass http://$host:808;
      #proxy_redirect http://$host/ http://$http_host/;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $host;
      resolver 114.114.114.114;
    }
  }

  server
  {
    listen 443 ssl http2;
    server_name *.abc.com;

    ssl_certificate /www/server/nginx/conf/ssl/fullchain51.pem;
    ssl_certificate_key /www/server/nginx/conf/ssl/privkey51.pem;

    location /
    {
      proxy_pass https://$host:809; #通过域名访问frp服务
      #proxy_redirect https://$host/ https://$http_host/;
      proxy_ssl_server_name on;
      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;
      proxy_set_header Host $host;
      resolver 114.114.114.114;
    }
  }

宝塔客户端Nginx配置

就按宝塔正常流程进行网站的新建和管理就可以,如果使用多域名的话,要在宝塔Nginx服务端先反代相关的域名。

特别说明

如果此文对你有帮助,请关注留言,转发请标记原文地址,谢谢。

2

评论 (4)

取消
  1. 头像
    Flipped
    MacOS · Google Chrome

    感谢 解决了问题

    回复
  2. 头像
    oymlxasepd
    Windows 10 · Google Chrome

    《萨拉尔》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/9415.html

    回复
  3. 头像
    tvxqwxddqk
    Windows 10 · Google Chrome

    《情与缘》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/40720.html

    回复
  4. 头像
    rrhhttedre
    Windows 10 · Google Chrome

    你的文章让我感受到了正能量,非常棒! http://www.55baobei.com/AewKexyY99.html

    回复