前言
常规情况下frps服务器端会占用80和443端口,为内网设备提供穿透,实现用户可以使用域名无端口访问内网设备.而在已经部署nginx的服务器上,由于nginx已经占用80和443端口,frps的HTTP和HTTPS需另外选择端口,可以通过nginx的反向代理配置让frps提供的穿透服务也能够使用80和443端口,实现nginx和frps共存.同时配置支持泛域名反向代理.
方案介绍
方案配置
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内网穿透专栏:
膜拜大佬,,,,,,找了好久都不行,万幸看到了大佬的帖子搞定了
解决了就好...
牛X,困扰我数日的问题终于被这篇教程给解决了,终于Nginx和frp共存了,成功的那一刻实在是感觉太酸爽了,也不得不佩服博主,给您N次方个赞。
我的服务器上装了宝塔面板(使用的是Nginx),想和frp共存,并做了反向代理,http的反代就正常,https的反代总是502网关错误,而https加端口(即,frp服务端非默认端口)访问就正常。在网上找了很多方法,都不得其解。都是一堆水货或纯粹就是复制粘贴引流的,要么就是对于https部分不是轻描淡写,就是只字不提。弄了很多,也尝试了很多,最终也是搞得实在是身心疲惫和心灰意冷。
直到看到这篇教程才恍然大悟。真如网上某些人说的,反向代理是内部调用,根本不需要https,http就行了,而这篇教程也是在反向代理避开了内部调用https,还特别强调只用http。以及反向代理时,之前也有人说需要向服务器传递域名信息,即,加入proxy_ssl_server_name on;代码,也看到博主把那条代码加进去了。
还有就是加入重定向return 301 https://$host$request_uri;的代码,让http直接跳转https。这样也是直接避开内部调用https。与此同时也是我万万没想到的,因为之前我做反向代理时,并没有做301,而是直接输入https开头的127.0.0.1:端口(非443,frp服务端设置的其他端口),也就是反代时直接内部调用了https
更令我没有想到的是,做反向代理时,$host的后面还要加:80,因为宝塔面板设置反向代理时,如果在$host后面加端口,就会提示错误,不能加端口(想想也是,host就是本地的,端口自然是80,是很难会想到再去加:80的),只能从配置文件里手动修改添加。
看来是被宝塔面板的‘反向代理’这一个功能设置给带坑里去了。以及,很多Nginx反向代理的知识都不太懂,基础薄弱。还有,某度也是个坑货,博主这篇这么好的教程,居然不显示,很多关键字都用上了,全给那些水货给霸占了。哎,看到这篇教程真切的感到是相见恨晚。
讲真,要不是无意中在某个论坛看到有人分享frp公共服务器(博主发的帖子),并跳转到了这个博客,以及想多了解这个博客都有些什么内容(也带有当时对博主分享frp公共服务器的感谢之意,想着就送一个IP访问给博主的网站,以表示感谢的心态),才无意中看到了这篇教程。是的,也要感谢老天爷,让我有了这样的运气。不然的话,估计我那个被困扰的问题可能一直会持续很久很久都不能被解决!
最好,就是非常感谢博主!!
同时欢迎加我的TG群,大家可以一起交流.
有史以来最长的一篇留言...能够帮到你就算是我没有白费力气写文章..
正是因为在折腾的过程中,网上搜到的教程都不尽完美,所以才会根据实践重新来写..
至于百度就算了吧...Google上还是能够找到的我博客...
确实,网上搜到的,但在实际尝试的时候,也正如您所说不尽完美,所以总是各种碰壁,屡试屡错。
百度也是越来越辣鸡,明显的感到近段时间唰的一下,好多东西都找不到了,不知道是不是百度那边做了什么调整或整治,能找到的信息量远不如以前。至于您说谷歌,我恨360,360这玩意儿简直就是“梯子”杀手。但电脑的安全防范也离不开360,其他免费杀软确实没有360做得专业。开VM虚拟机用“梯子”,但配置又吃紧。没错,我也能感觉谷歌的内容确实丰富过百度,百度这dog 太阳的,真的是屏蔽了不少好网站。
对了,您说的TG群,我该怎么加入呢?群号是多少?特殊是您分析frp公共服务器方面,没看到您留群号(按理说,应该是有群号),有时候想问点什么都不怎么方便。
左侧导航有TG群链接...要搭梯子!
问下Stille,对apache有研究嘛 ,我最近在apache的重定向上碰到了问题,想请教下OωO
apache确实就不大了解了..对于nginx我也都是网上各种学习的..
好的好的,还是谢谢博主啦!