配置 Nginx 和 frps 共存 80/443 端口及泛域名支持教程

前言

常规情况下frps服务器端会占用80和443端口,为内网设备提供穿透,实现用户可以使用域名无端口访问内网设备.而在已经部署nginx的服务器上,由于nginx已经占用80和443端口,frps的HTTP和HTTPS需另外选择端口,可以通过nginx的反向代理配置让frps提供的穿透服务也能够使用80和443端口,实现nginx和frps共存.同时配置支持泛域名反向代理.

此方案适合个人用户搭建frps,国内服务器也可备案自己的域名,配置泛域名的反向代理及证书,可以方便快速的使用任何二级域名来穿透内网的各项服务.

此方案不适合公开提供服务的frps服务器,由于公开服务,用户使用的是自己的域名,无法为各用户分别配置反向代理.但如果你提供的frps支持subdomain泛域名,已经为用户提供了二级或三级域名使用,也可以使用本方案,但用户就无法使用自己的域名.所以此方案并不推荐用于公共frp服务.


方案介绍







方案配置

frps.ini配置

frpc.ini配置

如果 frps.ini 配置了 subdomain_host 泛域名,那么 frpc.ini 中域名参数需使用 subdomain = xx 仅填写二级域名主机头即可,不要填写完整域名.

如果 frps.ini 没有配置 subdomain_host泛域名,那么 frpc.ini 中域名参数需使用 custom_domains = xx.xxx.com 需填写完整的域名.

nginx配置

server {
    listen 80;
    server_name *.yourdomain.com;
    return 301 https://$host$request_uri;
}

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

    ssl_certificate /usr/local/nginx/conf/ssl/yourdomain.com.crt;
    ssl_certificate_key /usr/local/nginx/conf/ssl/yourdomain.com.key;

    client_max_body_size 50m; 
    client_body_buffer_size 256k;
    client_header_timeout 3m;
    client_body_timeout 3m;
    send_timeout 3m;
    proxy_connect_timeout 300s; 
    proxy_read_timeout 300s; 
    proxy_send_timeout 300s;
    proxy_buffer_size 64k; 
    proxy_buffers 4 32k; 
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k; 
    proxy_ignore_client_abort on; 

    location / {
        proxy_pass http://127.0.0.1:1234;
        proxy_redirect off;
        proxy_set_header Host $host:80;
        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;
    }
}

宝塔用户注意

有网友留言回复在宝塔里使用时,在配置 ssl 后会有重定向问题,添加了以下配置解决了 css 和 js 问题,此情况博主暂没有环境实际测试,如果遇到此问题可以自行尝试.

location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log /dev/null;
    access_log /dev/null; 
}

结语

更多FRP内网穿透相关技巧,教程及信息,请持续关注本站FRP内网穿透专栏:

晚高峰稳定 4K 的 IPLC 机场 解锁各流媒体 支持 ChatGPT. 晚高峰稳定 4K 的 IPLC 机场 解锁各流媒体 支持 ChatGPT. RedteaGO - 最划算的大陆漫游 eSim 流量卡,原生境外 IP,注册就送 3 刀。
RedteaGO - 最划算的大陆漫游 eSim 流量卡,原生境外 IP,注册就送 3 刀。
如果喜欢我的文章,觉得对你有帮助,请随意赞赏!

54 条评论

  1. 幽反丶叛冥  

    大佬,以下应用场景可以实现吗, 有一台云服务器,上面部署公司的门户网站。计划在这个服务器上部署一个frps ,用于微信公众号(http)和微信小程序(https)的测试工作。

    回复
    1. Stille  
      @幽反丶叛冥

      可以啊,就是满足这个需求的。

      回复
      1. 幽反丶叛冥  
        @Stille

        好的,谢谢。

        回复
  2. hanley  

    docker部署的nginx,docker部署的frps,用站长的配置文件反向代理报错502 Bad Gateway,找不到哪里的问题,请教下。谢谢
    2023/01/31 08:33:31 [error] 28#28: 19 connect() failed (111: Connection refused) while connecting to upstream, client: x.x.x.x, server: .hy100.top, request: "GET /favicon.ico HTTP/2.0", upstream: "http://127.0.0.1:4101/favicon.ico", host: "dsm.hy100.top", referrer: "https://dsm.hy100.top/"

    回复
    1. democrazy  
      @hanley

      如果出现“error: no route found: frp /”的问题,是因为docker里nginx的proxy是 http://frp:8080 和客户端的custom_domains不一致,可以把客户端配置成custom_domains=frp

      回复
    2. democrazy  
      @hanley

      可以参考一下这个
      https://juejin.cn/post/7063861035601494052

      回复
  3. 宝塔面板配置 Nginx 和 frps 共存 80/443 端口及泛域名支持教程 - My Blog  

    [...]关于 nginx 和 frps 共存的方案及使用场景,推荐先阅读以下文章:配置 Nginx 和 frps 共存 80/443 端口及泛域名支持教程[...]

    回复
  4. 夜影小窝  

    大佬用这个办法,80的可以用,443的不加原来的端口访问不了,证书也配置了。

    回复
  5. longinus  

    谢谢博主,看了你的文章终于成功了。但现在我有一个问题。
    我在电脑上部署了一个影音服务器,我现在通过这篇文章,可以https正常访问。FRP客户端配置是这样
    [emby]
    type = http
    local_ip = 192.168.1.9
    local_port = 8096
    remote_port = 80
    use_encryption = true
    use_compression = true
    custom_domains = emby.xxx.com
    我原先还一直通过HTTP访问家里的路由器,配置这样的
    [asus]
    type = http
    local_ip = 192.168.1.3
    local_port = 80
    remote_port = 80
    use_encryption = true
    use_compression = true
    custom_domains = asus.xxx.com
    bandwidth_limit = 1000MB
    但现在访问的话,登录界面输入账号密码就会刷新页面,是因本地端口用的80吗?访问路由器管理界面的端口我看也改不了。另外我的华硕服务器有个AICLOUD的功能,但是必须HTTPS访问,我原先的配置就是本地和外部端口设置的都是443,现在nginx反向代理之后我该怎么访问呢,FRP客户端该怎么设置?谢谢

    回复
    1. Stille  
      @longinus

      说的有点绕,没看懂.
      但是你这个客户端设置 type http 的话,是不要填写remote_port端口的

      回复
      1. longinus  
        @Stille

        是这样的,我一开始用FRP是为了访问我家里的路由器和电脑上的影音服务器。前者FRPC的本地端口是80,后者是8096。我想实现HTTPS访问,配置了泛域名证书,看了你的文章已经可以成功HTTPS访问影音服务器了。现在有两个问题:

        访问路由器这里出了问题,进管理界面输入用户名密码登录就会直接刷新网页,一直困在登录页这里,怎么也进不去。关掉NGINX,FRP改回原来的配置又正常。账号密码我甚至是直接复制的,也不会错。我这个华硕路由器上有AICLOUD这么个服务,姑且类似于FTP,WEBDAV什么的,设置里面虽然可以更改端口,但是似乎只能HTTPS访问。可现在NGINX反代以后,HTTPS访问,会出现FRP的那个找不到页面的错误。客户端配置是type=https local_port=443
        PS:我现在把remote_port去掉了,原来不用写这个的......
        回复
        1. Stille  
          @longinus

          你的意思是 frps 服务器上安装了 nginx 和 frps ,并且按照本文设置了共存.

          然后 影音服务器配置 HTTPS 访问成功了..是在 nginx 上配置了域名和证书,对吧..

          在然后同样的方式配置了域名证书到路由器的80,结果路由器无法登陆.

          是这个意思吗?

          另外AICLOUD这种服务本身就是https协议的就麻烦了,你得在AICLOUD里去配置证书.
          frpc 得新添加一个配置 type=https 到 AICLOUD.
          然后在服务器上nginx里单独在ngixn写一个配置文件, proxy_pass https://127.0.0.1:xxxx
          xxxx 为 vhost_https_port 的端口

          回复
          1. longinus  
            @Stille

            是这个意思。
            (1) AICLOUD这个配置还是跟文章里监听443那段server配置一样吗,只是改个proxy_pass? 另外,证书为什么要在AICLOUD这边去配置呢,NGINX不是已经配置了泛域名证书吗。
            (2) 路由器管理页面访问是这个地址 https://asus.xxx.com/Main_Login.asp 只要输入账号密码点登录就会再跳转到登录界面,死循环。难道是那个301跳转设置要改一下吗。能不能做个判断什么的,路由器这个我倒不需要非得HTTPS访问,HTTP访问也可以

            回复
            1. Stille  
              @longinus

              我这个教程基本上是给了思路.直接配置的 *.xxx.com 一刀切全部走 HTTPS

              实际上,你懂了这个逻辑,可以单独为各个服务来分别配置 nginx

              回复
              1. longinus  
                @Stille

                是的。不过我要是单独给路由器和AICLOUD配置的话,那原先.xxx.com这个配置是不是就不能用了,否则会冲突覆盖什么的?如果会的话,我就是想除了路由器和AICLOUD这两个单独配置,其他还是一刀切该怎么办?因为现在只有这两个有问题,其他HTTP访问的服务都正常

                回复
                1. Stille  
                  @longinus

                  不会冲突,nginx会先匹配单独的,在匹配*

                  回复
                  1. longinus  
                    @Stille

                    明白了,谢谢解答

                    回复
            2. Stille  
              @longinus

              1,是的,server_name 单独配个给AICLOUD用的域名.
              你也可以不在AICLOUD里配置证书试试,我没试过,反代是 https://IP 也有可能不需要.

              2,实在不行你就也单独给路由器配置 nginx 配置,走http就行了.frpc也配置路由走http

              回复

发表评论 取消回复
使用cookie技术保留您的个人信息以便您下次快速评论,继续评论表示您已同意该条款

🎲

代做工资流水公司惠州开工作收入证明绵阳制作工资流水账单滁州个人银行流水代办上海代做企业对私流水威海入职工资流水查询兰州打印工作收入证明重庆入职银行流水代办襄阳代开企业对公流水咸阳工资流水app截图制作漳州车贷工资流水 多少钱莆田车贷工资流水 报价金华开入职流水开房贷银行流水绵阳薪资流水样本宿迁企业对私流水代办扬州银行流水电子版代做遵义开公司流水成都转账银行流水制作铜陵签证银行流水 代办合肥房贷流水图片贵阳背调工资流水图片长沙查贷款银行流水汕头代办个人流水九江房贷流水办理临沂公司流水报价绵阳制作流水单广州办背调流水杭州签证工资流水价格兰州开对公流水菏泽公司银行流水代办香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化