frp 利用Nginx實現https

warning: 这篇文章距离上次修改已过1460天,其中的内容可能已经有所变动。

 

利用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,轉載請注明!

none
最后修改于:2020年11月24日 19:27

添加新评论