frp 利用Nginx實現https
利用frp可以很容易的實現http和https的內網穿透。現在信息安全比較重要,所以https已經比較普及了。所以現在利用Let's Encrypt免费证书來實現https化。
我是在寶塔上配置的,沒辦法小白一個。在Frp 隐藏 vhost_http_port端口這篇中實現了非80,443端口的隱藏。其實只要稍微改變一下就能實現https了。
一:在添加完站點后進入這個站點的設置,點擊左面的SSL,在Let's Encrypt選項中寫入自己的郵箱,勾選上域名提交就行了。申請成功后再點擊右上的強制https。這樣就會自動跳轉到https了。
二:在配置文件中可以看到寶塔已經把證書和強制https的相關配置寫好了,我們要做的就是把一下不必要的配置註釋掉,加入Frp 隐藏 vhost_http_port端口這篇文章裏面的自動代理進去,具體的配置文件如下:
server
{
listen 80;
listen 443 ssl http2;
server_name 你的域名;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/你的域名;
SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
error_page 404/404.html;
HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
HTTP_TO_HTTPS_END
ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
SSL-END
ERROR-PAGE-START 错误页配置,可以注释、删除或修改
error_page 404 /404.html;
error_page 502 /502.html;
ERROR-PAGE-END
PHP-INFO-START PHP引用配置,可以注释或修改
include enable-php-70.conf;
PHP-INFO-END
REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/你的域名.conf;
REWRITE-END
禁止访问的文件或目录
location ~ ^/(.user.ini|.htaccess|.git|.svn|.project|LICENSE|README.md)
{
return 404;
}
一键申请SSL证书验证目录相关设置
location ~ .well-known{
allow all;
}
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log off;
access_log off;
}
location ~ .*.(js|css)?$
{
expires 12h;
error_log off;
access_log off;
}
access_log /www/wwwlogs/你的域名.log;
error_log /www/wwwlogs/你的域名.log;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8088;
}
}
提交后再打開你穿透的網站已經可以https了。
Let's Encrypt免费证书有效期是三個月,過期后寶塔會自動續期。如果沒有續期成功自己再查找原因!
如果frp客戶端使用的是http的話在frp服務端和客戶端的連接應該還是沒有加密的,這個時候爲了數據更加安全,可以把frp客戶端的加密啟用,這樣就實現了frp服務端到客戶端是加密的,訪問端到frp服務端也是加密的。
<span style="color: #3366ff;">上面這些其實還不是真正的frp的https模式,只能算是半個吧。又閱讀了FRP的issue,裏面有提到“ssl 证书不由服务器管理,frps 只负责转发请求,不负责处理 https 的请求内容。”也就是說要先配置好你要穿透web的ssl證書,啟用https后再使用frp的https進行穿透。這樣才可以https。</span>
本文作者為ISSAC,轉載請注明!