使用 frp 反向代理 https 网站

家里一台苹果本,一台 Ubuntu 台式机,Ubuntu 上跑个虚拟机,运行 Django 程序。苹果本和台式机在同一个局域网,需要从苹果本访问台式机的虚拟机里的 Django 程序。

frp

搜索后,发现 frp 可以满足这个需求。根据官方介绍,frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

frp 分为两个程序, frps 运行在服务端,frpc 运行在客户端

frps on Ubuntu

在 Ubuntu 上配置 frps.ini

[common]
bind_port = 7000
vhost_http_port = 8080

启动

frps -c frps.ini

frcp on Ubuntu VM

在 Ubuntu VM 上配置 frcp.ini

[common]
server_addr = 192.168.1.20
server_port = 7000

[django]
type = http
custom_domains = 192.168.1.20
plugin = http2https
plugin_local_addr = 192.168.2.30
plugin_host_header_rewrite = 192.168.2.30
plugin_header_X-From-Where = frp

启动

frpc -c frpc.ini

在 macbook 打开 chrome,访问 http://192.168.1.20:8080

问题

  1. Origin checking failed - http://192.168.1.20:8080 does not match any trusted origins.

在 django 程序的 settings.py 设置

CSRF_TRUSTED_ORIGINS = ['http://192.168.1.20:8080']
  1. CSRF cookie not set

通过 curl 查看 reponse header 的 Set-Cookie 部分,curl -IL http://192.168.1.20:8080

Set-Cookie: csrftoken=xxxtoken; expires=Thu, 17 Aug 2023 14:27:11 GMT; Max-Age=31449600; Path=/; SameSite=Lax; Secure

或者用 chrome dev tools 查看

This attempt to set a cookie via a Set-Cookie was blocked because it had the “Secureattribute but was not received over a secure connection.

提示得很清楚了,因为我们用的是 http 协议访问,所以浏览器不能保存 cookie。

在 django 程序的 settings.py 设置

CSRF_COOKIE_SECURE = False
© 2017 - 2023 · 记事本 · Theme Simpleness Powered by Hugo ·