网站首页 文章专栏 用frp内网穿透https网站
使用frp穿透本地一个https网站,frp client运行在树莓派中,树莓派中的nginx再次反向代理请求内网的nextcloud应用。其中,内网的nextcloud是具体的应用,暴露http服务;树莓派nginx用于提供https。
由于nextcloud根据http header中的host来生成登录时的url,在经过frp->nginx https->nginx nextcloud
这样的代理链路之后,nginx https
会收到错误的host header,导致登录的url不带端口。
本例非常特殊,因为一般的web服务不会带端口访问。这里是仅供自己使用的web服务,所以使用了国内免费的内网穿透,只能带端口访问。
流量由frp转发到nginx https时,http header中的host依旧为我自己的域名(似乎frp并没有修改这个host),但是端口被更改为443.
这么分析看来是frp的问题,它只修改了host的域名,没有加上端口。
临时的解决方案是在nginx https的配置中硬编码端口号,如下:
location / { proxy_pass http://192.168.255.3; #Proxy Settings proxy_redirect off; proxy_set_header Host $host:38013; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
$proxy_host
配置文件中的值,应该与proxy_pass
的内容有关。$host
http请求中的host