本文为 Stille 原创文章.经实践,测试,整理发布.如需转载请联系作者获得授权,并注明转载地址.配置 Nginx 和 frps 共存 80/443 端口及泛域名支持教程 - 思有云 - IOIOX

前言

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

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

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


方案介绍

常规 frp 穿透流程

常规frps提供80和443端口的穿透,当外网访问域名时,frps会将80和443端口穿透到内网设备,由内网设备来处理80和443端口的请求.例如HTTPS的强制跳转,伪静态,证书等请求都由内网设备来处理.一些成熟的服务,例如群晖DSM,Web Station以及各套件都能够很好的提供服务,而另外一些服务,例如某些docker容器,部分路由器管理端,可能仅仅提供了HTTP端口,想要使用HTTPS还得借助另外的反向代理服务,相对会更加麻烦.


Nginx 和 frps 共存方案流程

内网设备及服务可无需HTTPS支持,frpc.ini也只需要配置HTTP穿透到服务器.当外网访问域名时,收到请求的Nginx会根据泛域名配置,强制跳转到HTTPS,同时Nginx会提供SSL安全证书支持,然后Nginx会反向代理到frps的HTTP端口,在由frps穿透回内网获取信息返回给外网用户.


小结

经过一段时间的使用,两种方案各有利弊,还是需要根据实际使用场景来选择.例如群晖NAS官方的DSM,各套件和服务可以使用上文第一种独立frps方案,由群晖来处理Web前端和SSL证书.如果使用一些docker容器服务,本身仅只支持HTTP,那么可以选择nginx和frps共存的方案,让nginx反向代理来支持HTTPS和SSL证书.


方案配置

frps.ini配置

  • 由于nginx占用80/443端口,frps.ini中的 vhost_http_port 和 vhost_https_port 请更换为其他端口.
  • subdomain_host 根据需求可选配置泛域名,或者注释删除此参数使用自定义域名.

frpc.ini配置

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

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

nginx配置

  • proxy_pass http://127.0.0.1:1234; 中的 HTTP ,请勿写成 HTTPS .
  • proxy_pass http://127.0.0.1:1234; 中 1234 端口为 frps 的 HTTP 端口.
  • proxy_set_header Host $host:80; 注意需加上80端口,否则会无限循环301跳转,导致网页打不开提示重定向次数过多ERR_TOO_MANY_REDIRECTS.
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内网穿透专栏:

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

  1. 服务器安装frps实现内网穿透(3)-服务端nginx和frps共用80/443端口

    前两篇文章已经说了frps和frpc的相关配置,没有公网ip时通过openwrt上配置frpc实现内网的穿透.但如果我们把vhost_http_port和vhost_https_port配置成80和4 ...

  2. 无80和443端口下申请域名SSL证书(适用于 acme.sh 和 certbot)

    无80和443端口下申请域名SSL证书 文章目录 无80和443端口下申请域名SSL证书 SSL 证书申请的方式 通过 DNS 申请 SSL 证书 获取个人域名 acme.sh 方式 certbot ...

  3. linux nginx 配置端口访问,Linux入门教程:ubuntu 16.04配置nginx服务器实现一个IP一个端口多个站点,ubuntunginxNginx 使用异步...

    Linux入门教程:ubuntu 16.04配置nginx服务器实现一个IP一个端口多个站点,ubuntunginxNginx 使用异步 特点: Nginx 可以部署在网络上使用 FastCGI,脚本 ...

  4. nginx 配置域名 http https 80+443端口

    安装nginx apt-get install -y nginx 如果希望直接使用ip访问(即直接使用80端口),需要删除默认文件.不使用80端口.有域名.使用https等其他方式则跳过此步(不用删除 ...

  5. 配置ssl证书_Nginx监听443端口配置SSL证书

    1.先去宝塔:https://www.bt.cn/申请一个免费SSL证书:2.点支付订单后,还需要再列表 验证域名,验证域名需要在自己的域名解析配置txt类型字符串值如下,解析值在宝塔SSL申请列表详 ...

  6. linux下配置nginx ssl 认证 进行项目80,443端口开放配置

    在linux下安装nginx,首先需要安装 gcc-c++编译器.然后安装nginx依赖的pcre和zlib包.最后安装nginx即可. 腾讯云ssl认证网址 查看进程号 ps -ef|grep ng ...

  7. Nginx如何跳转到非443端口的https

    前言 近一段时间由于看到*云服务厂商有活动,就注册并开了台云服务器,试一下区别. ("充10美元送30天内有效的250美元的免费额度,意思是30天内在 你加起来 不超出250美元的 服务随便 ...

  8. XAMPP修改80和443端口及创建虚拟目录

    由于装了IIS,Xampp不能用了.原因是:iis占用了xampp需要的80.443端口.Xampp要修改两个地方才能启动Apache.不然就把模块Mod_SSL注释掉.就可以不用理443这个了. X ...

  9. linux nginx 安装stream,Centos7-64bit-编译安装配置Nginx stream四层负载均衡 动态加载

    Centos7-64bit-编译安装配置Nginx stream四层负载均衡 动态加载 2018-08-10 17:12 分享人:老牛 yum install screen -y && ...

最新文章

  1. Matlab与线性代数 -- Pascal矩阵
  2. 好程序员web前端CSS选择符(选择器):表示要定义样式的对象
  3. JVM内存管理------垃圾搜集器简介
  4. python装饰器-python修饰器(装饰器)以及wraps
  5. 正则表达式需要转义的字符
  6. java 内部类_Java——内部类详解
  7. JZOJ 5257. 小X的佛光
  8. java finalize 析构_close,析构函数和finalize:Java矛盾
  9. 单选框 RadioButton 1130
  10. Java命名规范(建议收藏)
  11. php 去掉无关数据,php 读取 mysql 表中的double数据,去掉多余的0
  12. springcloud微服务系列之服务注册与发现组件Eureka
  13. 【免费毕设】课程指导平台的开发(源代码+lunwen)
  14. [ CSS ] animation 快速参考
  15. sf上的SIMD的程序库
  16. 中国橡胶防老剂4020市场现状与投资预测报告(2022版)
  17. C-COT目标跟踪-----连续卷积算子
  18. 色彩管理实验 matlab,对色彩管理的一些认识和运用
  19. 利用栈实现中缀表达式转后缀表达式
  20. python matplotlib绘制折线图_Matplotlib实践系列:折线图完全示例

热门文章

  1. Office在线预览—PPT专场
  2. EVO的使用(翻译官方文档)
  3. 【游戏编程扯淡精粹】调试方法论
  4. stdole.dll文件签名证书过期
  5. Kali linux查看局域网内其他用户的输入信息
  6. 【实训日记9】Ansj5.1.3版本自定义词典、歧义词典的使用
  7. QQ音速--Q点冲值引导和帮助(转)
  8. 关于USB bulk设备中的CBW和CSW
  9. 用python操作excel表格的示例——修改成绩表
  10. prousb注册计算器的使用方法