当前位置:首页 > 群晖专栏 > 技术教程 > 正文内容

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

admin5年前 (2020-01-27)技术教程370

前言

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


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


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




方案介绍


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


内网设备及服务可无需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;
    }
}

结语

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

FRP内网穿透专栏

本站提供免费和付费的技术支持.你可以通过留言,邮件,QQ的方式来进行技术交流和免费咨询.同时也可以付费支持的方式获得相关的技术支持,项目部署配置等服务.具体相关详情请点击查看 技术支持页面


扫描二维码推送至手机访问。

版权声明:本文由梦魁网络资源站发布,如需转载请注明出处。

本文链接:https://family.monkui.com:39/?id=153

标签: 技术教程
分享给朋友:

相关文章

了解 frp 的一些通用功能

了解 frp 的一些通用功能

前言日常使用中除了常规的HTTP/HTTPS代理以外,SOCKS5代理也是有一定的使用需求,例如通过SOCKS5代理可以方便的 SSH 登陆国外网络环境不好的服务器. 而goproxy是一款轻量级,功能强大,高性能的代理软件,不仅可以同时部...

macOS使用Github上传项目时忽略及删除.DS_Store文件教程

macOS使用Github上传项目时忽略及删除.DS_Store文件教程

前言最近又在折腾和研究Docker和GitHub,虽然不懂写代码,但靠着搜索引擎慢慢摸索,觉得很有意思,于是在Mac上安装了官方GitHub Desktop.使用过程中发现上传代码或者项目时,会把manOS的系统文件.DS_Store文件上...

docker 部署 zfile 在线文件目录 - 支持本地,对象存储,OneDrive等各种环境.

docker 部署 zfile 在线文件目录 - 支持本地,对象存储,OneDrive等各种环境.

前言两个月前在 V 站看到某大佬开源了一个支持多种平台的在线文件目录程序,直到现在才有时间去尝试安装使用.程序支持的环境非常全面,有阿里云 OSS, FTP, 华为云 OBS, 本地存储, MINIO, OneDrive 国际/家...

完美解决 Windows 10 无操作或锁屏时两分钟自动睡眠问题

完美解决 Windows 10 无操作或锁屏时两分钟自动睡眠问题

前言最近折腾入手了联想 M720q Tiny5 迷你主机,在安装好 Windows 10 后设置高级电源管理中的显示器和睡眠设置后发现,电脑总是在 2分钟无操作的情况下自动睡眠.多年没好好折...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。