frp下反向代理实现https协议
前⾔:由于需要很多地⽅⽤到内⽹穿透环境,所以选择了frp,近阶段需要Https,所以有了此⽂,
本⽂分为frp⾃⾝功能和frp+Nginx进⾏反向代理实现https
环境介绍:我这⾥的环境是服务端和客户端的配置均是可以在Linux/Windows下运⾏的,唯⼀需要注意的是linux上证书和windows获取⽅式不同,windows较⿇烦,这⾥就不演⽰了,我这⾥⽤的是域名绑定的Linux服务端⽣成证书存放在Windows客户端下的
系统版本
Linux CentOS7
Windows Windows Server2012
⼀、frp
注意服务端和客户端的版本是需要⼀致的
如只有⼀端不知道版本可以进⼊⽬录通过./frps -v或者./frpc -v查看版本号
nginx ssl证书配置详细操作这⾥就不介绍了,可以参考其他⽂章
⼆、证书⽣成
我这⾥⽤的是Let’s Encrypt,毕竟免费,哈哈,安装⽅式⽤的是Certbot
下⾯是wiki上的简介:
Let’s Encrypt 是⼀个将于2015年末推出的数字证书认证机构,将通过旨在消除当前⼿动创建和安装证书的复杂过程的⾃动化流程,为安全⽹站提供免费的SSL/TLS证书。 Let’s Encrypt 是由互联⽹安全研究⼩组(ISRG,⼀个公益组织)提供的服务。主要赞助商包括电⼦前哨基⾦会,Mozilla基⾦会,Akamai以及思科。2015年4⽉9⽇,ISRG与Linux基⾦会宣布合作。⽤以实现这⼀新的数字证书认证机构的协议被称为⾃动证书管理环境(ACME)。 GitHub上有这⼀规范的草案,且提案的⼀个版本已作为⼀个Internet草案发布。Let’s Encrypt 宣称这⼀过程将⼗分简单、⾃动化并且免费。 2015年8⽉7⽇,该服务更新其推出计划,预计将在2015年9⽉7⽇当周某时发布⾸个证书,随后向列⼊⽩名单的域名发⾏少量证书并逐渐扩⼤发⾏。若⼀切按计划进⾏,该服务预计将在2015年11⽉16⽇当周某时全⾯开始提供.
注意:在装证书之前先把Nginx或者80.443相关服务先停⽌,不然会发⽣端⼝冲突发⽣如下错误
Cleaning up challenges
Problem binding to port 80: Could not bind to IPv4 or IPv6.
Linux下安装:
⽬录结构:
先执⾏:
yum install snapd
systemctl enable --now snapd.socket
ln -s /var/lib/snapd/snap /snap
再进⼊⽬录:
执⾏:
./letsencrypt-auto certonly --standalone --email 123@123 -d ⼆级域名.域名
如果使⽤的是xx云默认的python环境出现
subprocess.CalledProcessError: Command '['virtualenv', '--no-site-packages', '--python', '/usr/bin/python2.7                                                    ', '//certbot/venv']' returned non-zero exit status 1这种错误
使⽤:pip install --upgrade virtualenv==16.7.9升级即可
没有报错的话会出现如下提⽰:
可以看到证书存放地址以及域名过期时间
进⼊⽬录查看⼀下
这⾥只展⽰单域名,现在通配符泛域名解析letsencrypt也是⽀持的了,但是需要DNS解析,我这⾥以后有需要会写出⽅法
certbot⾃动定时续期证书⽅法
certbot renew #⼿动测试,查看证书过期时间
certbot renew --force-renewal #忽略证书过期时间,直接重置证书时间
crontab -e #定时任务
0 0 1 * * /usr/bin/certbot renew --force-renewal #编辑⽂件
三、frp⾃⾝进⾏反向代理实现https
为了体现内⽹穿透,这⾥我们准备了⼀台服务端和⼀台客户端,系统分别是CentOS和WindowsServer,具体情况具体分析吧
需要注意的是这⾥的证书是放在客户端下的
服务端配置(Linux上frps.ini)
[common]
bind_port=7000                      #服务端端⼝
#privilege_token=*******            #客户端连接凭证
max_pool_count=5                    #最⼤连接数
vhost_http_port = 80                #客户端http映射的端⼝
vhost_https_port = 443              #客户端https映射的端⼝
dashboard_port=7505                  #服务端看板的访问端⼝
dashboard_user=root                  #服务端看板账户
dashboard_pwd=***                    #服务端看板账户密码
配置完之后运⾏服务端
Linux : ./frps -c ./frps.ini
Windows : 进⼊⽬录
服务端配置完成
客户端配置(Windows上frpc.ini)
server_addr = 192.168.100.100                    #服务端的IP地址,好像也可以写域名,没试过
server_port = 7000                              #服务端端⼝
[test_http]                                      #Http服务,映射的是服务端http80端⼝
type = http                                      #服务⽅式
local_ip = 127.0.0.1                            #服务端ip,可写本地,局域⽹等做反向代理的ip
local_port = 8000                                #服务端端⼝
custom_domains = st                  #需要反向代理的域名,就是服务端要代理的域名
[test_https]                                    #Https服务,映射的是服务端https443端⼝
type = https                                    #服务⽅式
local_ip = 127.0.0.1                            #服务端ip,可写本地,局域⽹等做反向代理的ip
local_port = 8000                                #服务端端⼝
custom_domains = st                  #需要反向代理的域名,就是服务端要代理的域名
# 以下为https新加的内容
plugin = https2http                            #将 https请求转换成http请求后再发送给本地服务
plugin_local_addr = 127.0.0.1:8000              #转换http后的端⼝
#证书相关配置
plugin_crt_path = C:\Users\Administrator\  #linux下⽣成的证书为fullchain.pem格式,复制到Windows上改成.crt后缀即可plugin_key_path = C:\Users\Administrator\st\privkey1.key    #linux下⽣成的证书为privkey.pem格式,复制到Windows上改成.key后缀即可plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp
配置完之后运⾏服务端
Linux : ./frpc -c ./frpc.ini
Windows : 进⼊⽬录
服务端配置完成
关于frp命令的后台启动⽅法
使⽤systemctl来控制启动
```sudo vim /lib/systemd/system/frps.service````
写⼊以下内容
[Unit]
Description=fraps service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
#启动服务的命令(此处写你的frps的实际安装⽬录)
ExecStart=/yourpath/frps -c /yourpath/frps.ini
[Install]
WantedBy=multi-user.target
然后就启动frps
sudo systemctl start frps
再打开⾃启动
sudo systemctl enable frps
如果要重启应⽤,可以这样,sudo systemctl restart frps
如果要停⽌应⽤,可以输⼊,sudo systemctl stop frps
如果要查看应⽤的⽇志,可以输⼊,sudo systemctl status frps
就可以运⾏了
四、 Nginx+frp的配置
这⾥的环境也是⼀台服务端和⼀台客户端,系统分别是CentOS和WindowsServer
需要注意的是这⾥的证书是放在服务端下的
Nginx这⾥不介绍安装了
直接上配置⽂件 .conf
server
{
listen 80;                                                              # http对应端⼝
listen 443 ssl;                                                          # https对应端⼝,
ssl_certificate /etc/letsencrypt/st/fullchain.pem;      # 证书存放位置
ssl_certificate_key /etc/letsencrypt/st/privkey.pem;    # 证书存放位置
server_name *.st;                                            # ip,域名,我这⾥以泛域名举例,毕竟是做反向代理,http就不⽤配置了                                                                                # https还可以做其他安全配置,需要的去看其他⽂章
location / {
proxy_pass  127.0.0.1:12369;                                      # 映射的frp服务端frps.ini的 vhost_http_port端⼝
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_redirect off;
proxy_read_timeout 240s;
}
# 我这⾥没做http强制转换为https,有需要的可以做⼀下
error_page  500 502 503 504  /50x.html;
location = /50x.html {
root  /usr/share/nginx/html;
}
}
改完了记得重载配置
服务端配置(Linux上frps.ini)
[common]
bind_port=7000                      #服务端端⼝
#privilege_token=*******            #客户端连接凭证
max_pool_count=5                    #最⼤连接数
vhost_http_port = 12369              #客户端http映射的端⼝,就是上⾯Nginx的proxy_pass对应端⼝
vhost_https_port = 12399            #客户端https映射的端⼝
dashboard_port=7505                  #服务端看板的访问端⼝
dashboard_user=root                  #服务端看板账户
dashboard_pwd=***                    #服务端看板账户密码
配置完之后还是运⾏服务端测试⼀下
Linux : ./frps -c ./frps.ini
Windows : 进⼊⽬录
客户端配置(Windows上frpc.ini)
server_addr = 192.168.100.100                    #服务端的IP地址,好像也可以写域名,没试过
server_port = 7000                              #服务端端⼝
[test_http]                                      #Http服务,映射的是服务端http80端⼝
type = http                                      #服务⽅式
local_ip = 127.0.0.1                            #服务端ip,可写本地,局域⽹等做反向代理的ip
local_port = 8000                                #服务端端⼝
custom_domains = st                  #需要反向代理的域名,就是服务端要代理的域名
配置完之后还是运⾏客户端测试⼀下
Linux : ./frpc -c ./frpc.ini
Windows : 进⼊⽬录
到此的话应该就没有其他问题了

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。