前言
常规情况下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内网穿透专栏:
大佬,请教一下。你发的这段nginx配置代码位置是放在Lnmp原来的nginx.conf的哪个位置呢?是完全覆盖原来的还是直接添加到某个位置?我直接添加到原文件里面了,访问失败。请指点一下,谢谢。
按大佬的nginx配置, 成功反向到HTTPS. 謝謝大佬分享.
这里nginx的配置是指的frps端的nginx的配置吧
frps服务器上的nginx
老大,问下你我按照你的办法设置好nginx配置后,默认一直是301到https的,所以不管是使用自定义域名还是二级域名,开启的ssl都等于是无效的,默认都会跳转到https上去,导致用http不能访问,也就是会出现加载错误,请问这个怎么解决呀
采用的是宝塔nginx+frps的共存,去掉301重定向的话就不能访问,不去掉就会默认跳转https,所以也是研究很久都不能解决,我搭建了一个Typecho博客,前端301跳转https访问没有问题,后端也就是后台死活登录不上,F12查看发现是加载js跟css依然是http,所以报错了,试了很多方法都无法解决
终于弄好了,还是穿透的问题,宝塔的配置不能按你的那个写,具体操作如下:
在宝塔的nginx配置下找到这句代码: access_log off;
在下面添加如下代码
[code]
server {
listen 80;
server_name *.yourdomain.com; #穿透的泛解析域名
location / {
proxy_pass http://127.0.0.1:8080; #frps的非80端口
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;
}
}
server {
listen 443 ssl http2;
server_name *.yourdomain.com; #穿透的泛解析域名
ssl_certificate /www/server/panel/vhost/cert/yourdomain.com/fullchain.pem; #证书文件地址
ssl_certificate_key /www/server/panel/vhost/cert/yourdomain.com/privkey.pem; #证书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:8080;
proxy_redirect https://$host/ https://$http_host/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_ssl_server_name on;
proxy_set_header Host $host;
}
}
[/code]
对于宝塔我没测试过,暂时也没计划去测试.所以不能保证在宝塔上可用..如果前段能访问,后台登陆不上,建议以https的方式重装typecho在来恢复数据库.博客内有一些非http的内容是有可能导致一些错误
开启的ssl都等于是无效的,默认都会跳转到https上去,导致用http不能访问
这句没看明白.举个例子吧
就是内网主机上设置ssl,不管你是开启还是关闭ssl都会默认跳转https
说实话,还是没理解清楚你实际的环境
博主,我有个腾讯云的主机,装了宝塔,想问问能否出个宝塔和FRPS共存的教程,现在国内用宝塔的挺多的。你这篇文章我看了但是不知道将配置怎么在宝塔面板里面设置。谢谢哈
等有空研究下在看发个教程吧.
嗯,主要是不大清楚,在nginx配置里面的*.yourdomain.com,是改成FRPS的域名是吗?比如你的free.frp.ioiox.com,证书目录也是改成域名文件夹名,将证书上传在这个目录?
弄好,能http了,就是还差https再研究研究。希望能出个教程哈。
https很简单,选择重定向http,然后重定向那里点配置文件,再把proxy_set_header Host $host;加上80端口就可以了。注意,然后群晖要关闭强制跳转https,因为实际链接的是http